Who it's for, and the problem
FloodLine is for volunteer groups who coordinate rescue requests during Chennai floods.
When Chennai floods (2015, Michaung in 2023, Fengal in 2024, Ditwah in 2025) phone lines go down and people ask for rescue on WhatsApp, X and Instagram. Volunteers read those messages by hand and pass them to boat teams. Reading about how they handled these floods, one thing stood out to me: they were doing all of it by hand, scrolling through hundreds of forwarded messages, trying to remember which family was already helped. I wanted to build something that takes that memory off their shoulders.
The same problems come up every time: one family is posted ten times, so two boats go to the same house; old requests keep being forwarded after the family is safe; and requests nobody picked up scroll away. In the 2018 Kerala floods volunteers built keralarescue.in for this, and the state adopted it. FloodLine is a much smaller attempt at the same idea, built for how requests actually arrive in Chennai: forwarded WhatsApp messages in Tamil, English and Tanglish.
Main features
- Paste messages one at a time or as a whole exported WhatsApp chat, in English, Tamil or Tanglish.
- Each message becomes structured data: area, phone, number of people, water level, and who is vulnerable (pregnant, needs medical care, baby, elderly, cannot walk).
- Messages about the same household are grouped into one request, with the reason shown (same phone number, or same door and street).
- Requests are ordered by urgency with points anyone can read (pregnant +40, medical +40, neck-deep water +35, plus waiting time). A volunteer can always overrule the order.
- Nothing gets forgotten: unclaimed for 45 minutes, no update for 90 minutes, a later "we are safe" message, or people still forwarding after a rescue are all flagged, with a ready reply in Tamil and English.
- Two volunteers share one board and see each other's actions immediately; the board can be downloaded for a shift handover.
- Map, call and WhatsApp buttons, phone layout, dark mode. The official helplines (112, 1070, 1077, 1913) are always shown, because FloodLine is a coordination tool, not an emergency service.
The AI: what it does, and what it isn't allowed to do
Model: Google Gemini (gemini-3.8-flash by default, moving to other current Flash models when one is busy), called from the browser in JSON mode, ten messages per call.
Role: reading messy rescue messages. Plain rules read every message first, instantly and offline. Gemini then re-reads them to catch what rules miss: landmarks instead of area names, Tamil number words, loose phrasing.
Guardrails: everything Gemini returns is checked against the original message. A phone number whose digits aren't in the message, an area that isn't in FloodLine's list of localities, or an address nobody wrote is thrown away, and the request shows what was dropped. In a rescue tool, a made-up detail can send a boat to the wrong house.
Representative inputs and outputs (from the hand-written test set):
| Message | Rules only (offline) | With Gemini + checks |
|---|---|---|
| "Near Phoenix mall backside streets totally flooded, old couple stuck in 1st floor, cant come down. 9840098400" | area: not recognised; people: not stated; elderly; upper floor; phone 9840098400 | area: Velachery; people: 2; elderly; upper floor; phone 9840098400 |
| "போரூர் ஏரி அருகே மூன்று பேர் வீட்டில் சிக்கியுள்ளோம், தண்ணீர் கழுத்து அளவு! உடனடியாக படகு தேவை" ("near Porur lake, three people stuck at home, water at neck level, need a boat urgently") | area: Porur; people: not stated; water: neck | area: Porur; people: 3; water: neck |
| "Velacheri taramani link rd la en friend family maatikitanga, kazhuthu alavu thanni. 8 month pregnant wife irukanga!!! 9003012345" | area: Velachery; water: neck; pregnant; phone 9003012345 | same |
And a guardrail case from the unit tests: if Gemini returns a phone number like 9999999999 that isn't in the message, it is blocked and the request says "Not used: phone 9999999999, not in the message".
Measured: on 30 hand-written messages I did not tune the rules on, rules alone get 90.3% of fields right but only 37.5% of head counts; with Gemini and the checks, 98.6% overall and 100% of head counts. Its two mistakes: an Adyar river warning placed in Kotturpuram (the bridge it mentions), and a woman in labour also marked as needing medical care.
Does it help? (simulation)
I can't test this in a real flood, so I simulated one. The same night is played twice with the same ten boats: once the way volunteer groups coordinate today (read the chat top to bottom, call back, post in the boat group), and once with FloodLine, whose real code reads every message. Averages over 20 simulated nights of 110 households:
- Households no boat ever reached: 26.8 → 1.2 (better on all 20 nights)
- Boat trips to a family already rescued: 26.7 → 0.4
- Critical households that waited over 3 hours or were never reached: 14.0 → 6.5 (better on 18 nights, worse on 2)
- Not better at everything: the median wait is a little longer (1h 01m → 1h 06m for critical households reached), because lower-risk households wait while critical ones go first, and because today's way never reaches about 27 households, who aren't in its median. Every assumption is editable on the Results page.
Stack, components, data and AI assistance
- Stack: plain HTML, CSS and JavaScript with no framework; hosted on GitHub Pages; no server, so messages stay in the volunteer's browser. Every message and action is stored as an event, and the board is calculated from the events.
- Model provider: Google Gemini API (Google AI Studio key, entered by the volunteer; never stored in the code).
- Open-source components: Leaflet (map), OpenStreetMap tiles, IBM Plex and Noto Sans Tamil fonts.
- Data: no external dataset. The practice night is generated by FloodLine's own simulator, and the 30-message test set was written and labelled by hand. All names and phone numbers are made up.
- AI assistance: I used Claude Code (Anthropic's AI coding assistant) to write much of the code, tests and documentation. I directed the project: I chose the flood-rescue problem, pushed it from a first version that felt "vibe-coded" to a plain, trustworthy design, recorded the demo voiceover, and ran the Gemini accuracy test with my own key. The demo video's subtitles were made with open-source Whisper; the voice is mine.
- Built during the event: all of it, on November 13–14, 2026. No code existed before; the only pre-existing parts are the libraries and fonts listed above.
Limitations, a failure case, and how I tested
Failure case: a message with no area name, like "Near Phoenix mall…". With rules only, it lands on the board as "area not recognised", with no map pin and no head count. It is still listed and can be taken, but it ranks lower than it should. Gemini fixes this one only because Velachery is in FloodLine's list of 28 localities; a landmark outside that list would still not be recognised.
Other limits: volunteers on different phones can't share one board yet (that needs a small server); pins are at the locality, not the house; it reads text only, not voice notes or photos; it has not been used in a real flood.
How I tested:
- 17 unit tests: phone formats, areas in three scripts, Tamil and Tanglish messages, telling requests from updates and offers, grouping and not grouping, points, every warning flag, merging two volunteers' boards, rejecting a phone number or area Gemini invented, broken Gemini replies, and that the simulation gives the same result every run.
- Measured the reader on generated messages (an easy upper bound) and on the separate hand-written set, with and without Gemini.
- The simulation found a real bug: numbers written "+919876543210" with no space were missed. Fixed, with a test.
- In the browser: ran the full practice night, opened two windows as two volunteers, checked phone size and dark mode.
Team
Nethra R, solo: problem choice, product direction, design review, testing, demo video and voiceover, built with AI coding assistance as described above.
What's next
A small server so different phones share one board; taking requests by SMS where there's no mobile data; more localities, landmarks and street-level locations; reading Tamil voice notes; and trying it with a Chennai volunteer group this monsoon.
Try it: https://nethra-r368.github.io/floodline/ · Code: https://github.com/Nethra-R368/floodline
Built With
- claude-code
- css
- gemini
- github
- google-ai-studio
- html
- javascript
- leaflet.js
- openstreetmap