# Flood Watch (Nigeria Flood Dashboard)
Local development stack and pointers for the live GCP deployment.
## Prerequisites
```bash
# Copy the env template and fill in secrets (DB, JWT, GEE, optional SMS)
cp .env.example .env
# For Google Earth Engine layers, use project **ggis-flood-watch**:
# enable Earth Engine API → create SA + JSON key → register SA in EE →
# GEE_SERVICE_ACCOUNT_EMAIL=your-sa@ggis-flood-watch.iam.gserviceaccount.com
# GEE_SERVICE_ACCOUNT_KEY=./ggis-flood-watch-gee.json
#
# Optional place **text search**: create a Maps key on ggis-flood-watch with
# Places API (legacy Text Search) only, then set GOOGLE_MAPS_API_KEY.
# Nearby settlements always use OSM / Nominatim. Google basemaps are not used.
# When the key is unset, search falls back to Nominatim.
```
> **Note for fresh clones:** `.env` and the GEE `*.json` key files are
> gitignored, so they are **not** in the repo — copy them over manually.
> Everything else (all 26 gauge + 29 met station definitions, exposure
> layers, and code) comes with the clone.
## Quick Start (local)
```bash
# 1. Start all services
# On first run, TimescaleDB auto-seeds the full station network via
# infra/timescaledb/init.sql: 26 gauge stations + 29 met stations
# across all major Nigerian river basins.
docker-compose up -d
# 2. Wait ~60 s for TimescaleDB to init, then backfill 90 days of history
docker-compose run --rm ingest python backfill.py
# 3. Start the Flink feature engineering job (standalone mode for local dev)
docker-compose exec flink-jobmanager python /opt/flink/jobs/flood_features.py --standalone &
# 4. Train ML models (needs ~500+ feature rows — takes 2-3 min)
docker-compose run --rm bentoml python train.py
# 5. Open the dashboard
open
localhost
```
## Live GCP deployment (temporary URLs)
Production project **`ggis-flood-watch`** (`europe-west1`) is live.
| Surface | URL |
|---|---|
| Frontend (Firebase) |
ggis-flood-watch.web.app |
| Custom frontend (pen …