HighGround: Telling Chennai Where the Water Will Go Tonight, Street by Street
How we built HighGround on AWS to tell Chennai residents where flood water will go tonight, street by street, using serverless forecasting, Bedrock-powered alerts and a validated flood model
Built for the Environmental Hacks hackathon (Bharat Builds Tour, AWS) - Heat and Water track
Every Chennai monsoon, the same scene repeats. The forecast turns red, the rain starts, and thousands of people make a high-stakes decision with almost no information: where do I park the car, and which road will still be passable in two hours?
So they guess. Flyovers fill up with parked cars because they are the only place that feels obviously safe. Underpasses turn into traps. Hospitals become unreachable for a few hours, and nobody knows until they're already on the road.
We built HighGround to replace that guess with an answer.
Why we built it: citizens, not control rooms
Chennai already has serious flood-monitoring systems, CFLOWS among them. They are valuable, but they are designed for officials and engineers: dashboards for people who dispatch pumps and manage drains. An ordinary resident at 9 pm with a car key in their hand is not the user.
HighGround flips the audience. It answers four questions a resident actually asks:
- How deep will the water be on my street tonight?
- Where can I park on dry ground?
- Which route is safe to drive?
- Which hospitals are about to be cut off?
For the Heat and Water track, that framing mattered to us: climate resilience isn't only about better models, it's about getting model output into the hands of the people who can act on it, in language they understand.

How we built it on AWS
We wanted every service to carry real load. Here is the actual flow.
1. Static front end: S3 + CloudFront via Amplify Hosting
The app is a React/Vite single-page app. Because the heavy computation happens ahead of time, the client is almost entirely static: the Protomaps PMTiles basemap and our terrain and depth tiles are served from S3 behind CloudFront (deployed through Amplify Hosting). PMTiles uses HTTP range requests, so there is no tile server to run and no per-request compute. It stays fast and cheap under a monsoon-night traffic spike, exactly when everyone opens the app at once.
2. The forecast pipeline: EventBridge Scheduler + Lambda
An EventBridge Scheduler rule fires every three hours and invokes a Lambda pipeline that:
- pulls precipitation forecasts from Open-Meteo,
- blends them into rainfall scenarios (moderate, heavy, extreme),
- selects the matching precomputed flood-depth layers, and
- publishes updated depth data to S3 and kicks off alerts.
Scheduled Lambda was the right fit: the work is bursty, short, and periodic, so there are no idle servers.
3. Alerts that are street-specific: SNS + DynamoDB
Nobody wants a city-wide "heavy rain" email. Users subscribe to the street segments they care about. We store subscriptions in DynamoDB and publish through Amazon SNS using filter policies keyed on street segment IDs, so a message about Velachery Main Road reaches only the people who live or park there.
4. The AI assistant: Amazon Bedrock + Strands Agents SDK
The assistant is built with the Strands Agents SDK on Amazon Bedrock. The important design choice is that it is grounded through tool calls. It doesn't "know" flood depths; it calls tools that read the same depth layers the map uses and the same hospital and route data. Bedrock also turns raw model output into plain-language alerts ("Water on your street is expected to reach about knee height by 10 PM. Move your car to the Kasturi Rangan flyover approach before then."), which is far more actionable than a number.
5. Address search: Amazon Location Service
Residents search by address or landmark, not by coordinates. Amazon Location Service handles geocoding with a Chennai bias, so "Besant Nagar" resolves to the right place instead of somewhere else with the same name.

The science behind the map
A pretty map is worthless if it is wrong, so most of our hackathon time went into the model.
Terrain. We used the Copernicus DEM at 30 m resolution as the elevation base.
Hydraulics. Instead of a simple "fill the low spots" approach, we implemented a local-inertial 2D shallow-water solver in Python, accelerated with Numba. Local-inertial formulations drop the convective acceleration term from the full shallow-water equations, which keeps the physics that matters for urban flooding (flow routing, ponding, and backwater) while being fast enough to run many rainfall scenarios. That speed is what lets us precompute scenario layers rather than simulate on demand.
Validation. We validated against 2015 Chennai flood reports and compared the model to a naive elevation-only baseline ("low ground floods"). The solver outperformed the baseline in matching reported flooded areas. The solver achieved an 82% hit rate against 2015 reports, outperforming the elevation-only baseline of 48%. We're upfront that it is a 30 m DEM model, so it's best at showing which streets and zones are at risk and relative severity, not centimeter-exact depths on every lane.

What we learned
1. Precompute what you can; keep the live path boring. Running physics at request time would have been a reliability risk on the exact night people need the app. Scheduled computation plus static delivery meant very little could break.
2. Ground your AI or don't ship it. A flood assistant that hallucinates a depth is worse than no assistant. Tool-grounded answers via Strands gave us traceable, consistent outputs.
3. Validate early, even crudely. Comparing against a naive baseline in the first day told us whether the solver was earning its complexity.
4. Design for the person, not the dataset. "Park here" beats "0.42 m inundation" every time.

What's next
- Higher-resolution terrain and drainage data to improve street-level accuracy where the 30 m DEM is coarse.
- Live ground truth from citizen reports and sensors to correct the forecast in real time.
- More channels: SMS, WhatsApp, and regional-language alerts so the warning reaches people who aren't checking email.
- More cities facing the same monsoon problem.
Floods can't be stopped by an app, but a few hours of accurate, street-level warning can mean a car moved in time, a hospital route avoided, or a family that never had to wade through a flooded underpass.
If you're building something in the climate resilience space on AWS, we'd love to compare notes. Drop a comment or reach out.
Team HighGround - Environmental Hacks, Bharat Builds Tour (AWS)
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article