How Centinela works
This page is for the technically curious. The rest of the site avoids jargon; here it is allowed.
Data pipeline
Two custom Fivetran connectors load data into Google BigQuery: one syncs the global USGS earthquake feed, the other pulls daily river discharge (GloFAS, via Open-Meteo) and soil moisture (ECMWF) for every monitored place. Observed rainfall and air quality come from the Google Weather and Air Quality APIs and are recorded continuously. Nothing is seeded or hand-entered: even coordinates are derived, by geocoding each place name and probing the river-model grid for the strongest channel nearby.
The agent
A DataOps agent built with Google Cloud Agent Builder (ADK) on Gemini watches the pipeline itself. If a connector goes stale, the agent uses the Fivetran MCP server, including its write tools, to force a re-sync and restore data freshness, with retries and an auditable action history. A second agent writes the plain-language alert narration.
The risk model
The risk index of each place blends four signals: river discharge against that same place's 92-day baseline, observed 24-hour rain, soil wetness as an amplifier, and the strongest recent earthquake nearby. The strongest hazard dominates; co-occurring hazards raise it further. Small streams are dampened so a creek cannot read like a major river flood. The index is our own model and is labeled as such everywhere.
Why a baseline instead of a fixed number? A river that is normal in Bangladesh would be a once-a-decade flood somewhere dry. So every place is compared against its own recent history, not a global threshold.
How often it updates
Earthquakes arrive within minutes of the USGS publishing them. River, rain and soil readings refresh on their providers' cadence (hourly to daily), and the risk level for every place is recomputed each cycle, so what you see is current rather than a stored snapshot.
Reaching people
Alert content is translated with Cloud Translation (cached per string, human-correctable), spoken with Cloud Text-to-Speech, and pushed through Firebase Cloud Messaging topics: one topic per place, one message per severity change. The site is an installable PWA: a service worker precaches the app shell and serves it network-first, so it installs to the home screen and still opens offline (showing the last data seen). A standards-compliant CAP v1.2 feed is available for emergency-management systems.
Where it runs
The backend is FastAPI on Google Cloud Run; state lives in Firestore; the frontend is plain JavaScript modules with Google Maps. The whole stack re-deploys from source in one command.