Inspiration
When a bayou rises in Houston, the people who need flood information most are the least served by it. Flood dashboards assume you can read a map, speak English, and have a good data connection. An older resident, a Spanish speaker, or someone in a hurry has none of that, but they can ask a question out loud. We wanted flood information to work like asking a neighbor who happens to be watching every gauge in the county.
What it does
The Flood Father is a voice assistant for Houston-area floods, in English and Spanish. You open the site, tap Start talking, and ask in your own words if it's flooding near you or where to find a shelter. It checks live stream gauges and National Weather Service alerts for the place you name, then answers in plain, short sentences that include how old the data is, where it came from, and how far the nearest gauge is.
The site also has a tappable map of Harris County gauges, a list of open shelters from FEMA's official list, and an address or ZIP search. It never tells you a place is safe, it tells anyone in danger to call 911, and it says so when it doesn't have enough data.
How we built it
- Voice: an ElevenLabs agent handles speech in and out, detects English or Spanish, and switches languages mid-conversation.
- Reasoning: the agent's LLM is Google's Gemini Flash. It can't answer from memory: to talk about a place it has to call our API as a tool and use the result.
- Backend: a FastAPI (Python) service with Postgres, run with Docker Compose and Caddy on a Vultr VM behind our own domain, thefloodfather.surf, with HTTPS. It polls USGS stream gauges for Harris County and NWS active alerts, finds the nearest gauges to a location, and computes a risk level from official alerts and how fast the water is rising.
- Other data: the US Census geocoder turns addresses and ZIP codes into locations, FEMA's National Shelter System supplies open shelters, Open-Meteo gives rain estimates, and OpenStreetMap with Leaflet draws the map.
- Testing: the API has an automated test suite covering geocoding, FEMA shelters, public endpoints, and proxy handling.
Challenges we ran into
- Finding the place. The geocoder is great with street addresses and ZIP codes, but cross streets and bayou names often fail. We made the agent ask for a ZIP code or a spelled-out street instead of guessing.
- Speech recognition. In testing, "Brays Bayou in Meyerland" was heard as "Bryce Bayou in Maryland." We built the agent to refuse to look up a place from words that don't make sense, because a wrong guess about where water is can hurt someone.
- No official flood levels per gauge. We couldn't get flood-stage thresholds for each gauge, so we don't claim "flooding" from a raw number. Risk comes from official alerts and the rate of rise.
- Lagging data. USGS gauges read about every 15 minutes but transmit about hourly, so every answer states its age.
- Dry weather. There's no flood to show on a sunny day, so we focused on honest answers, including "no alerts right now, and that is not a guarantee."
Accomplishments that we're proud of
- A complete voice experience, working end to end in English and Spanish, with real public data and no mocked answers.
- Safety built in from the start: it won't say a street is safe, it says "turn around, don't drown" about driving through water, and it sends emergencies to 911.
- Every answer shows its source and age, and every limit is stated on the site.
- A privacy-first site: no cookies, no ads, no analytics, and map points are rounded to about 1 km before they reach our server.
- Letting judges test it live with a printed card of questions, including ones designed to break it.
What we learned
- For life-safety tools, what the assistant refuses to say matters as much as what it says.
- A model is only as trustworthy as its tools: forcing the agent to use live data made its answers checkable.
- Real-world speech is messy, so asking again is better than guessing.
- Public data is powerful and also late, patchy, and unlabeled. Honest labeling is a feature.
What's next for The Flood Father
- A phone number, so anyone with a basic phone can call, with SMS as an overflow option.
- Call summaries that tell responders who needs help first.
- Vietnamese and more languages.
- Flood-stage thresholds per gauge for more precise risk levels.
- A pilot with Harris County, a 211 line, or a community nonprofit before next storm season.
Built With
- caddy
- css
- docker
- elevenlabs
- fastapi
- fema
- gemini
- godaddy
- html
- javascript
- leaflet.js
- national-weather-service
- open-meteo
- openstreetmap
- postgresql
- python
- usgs
- vultr
Log in or sign up for Devpost to join the conversation.