A generic valley is a screensaver. Your valley is evidence.
Every flood platform demo opens with terrain. Almost all of it is invented, and everyone in the room knows it, so the visual carries no weight at all. It is treated as wallpaper and skipped.
The moment the terrain is the actual basin, the hero stops being decoration and starts doing the same job as the replay: it is a claim that can be checked. An officer can look at where we put Cuttack and tell us if we are wrong.
Five cities, every thirty minutes, wet or dry.
A rule engine an engineer wrote and a district can argue with. Rainfall against each location’s own thirty-year threshold, yesterday’s rain that stops decaying during an active flood, and a river term that only counts when the gauge is genuinely live, or when the state’s daily bulletin is fresh (pilot reaches), and which can raise the call on its own when the river is near its mark.
The position, October 2026 - stated the way we would want it stated back to us
14 of 15 river-over-danger spells flagged two days ahead.
The 2026 monsoon on the Baitarani, scored end to end. Fifteen times a river crossed its danger mark on the four reaches we watch. With rainfall forecasts plus the state’s own daily gauge bulletin we flagged 14 of 15 two days ahead, and were HIGH or above on all 27 days a river already stood above danger (a nowcast, not a forecast). n = 15 spells · forecasts as issued, 2 Jun-5 Oct 2026 · unmodified engine.
What production actually ran, rainfall only: 9 of 15.
And LOW on 6 of those 27 above-danger days: Jajpur on 26-27 September with the river at 1.06× danger. That miss is why the river term now exists.
The cost: MEDIUM on about 80% of monsoon days.
Akhuapada sat within 10% of danger for half the season, so Bhadrak and Jajpur read MEDIUM on about 80% of monsoon days. MEDIUM is a river watch; HIGH is the action bar.
13 of 13 floods flagged two days before the river crossed its danger level.
Baitarani, 2024 to 2026, scored on the forecast as it was issued, against Odisha’s own published gauge record. n = 13. Thirteen floods is a small sample: the 95% lower bound sits near 77% recall, so this is not a claim of perfect accuracy and we do not state it as a percentage. The Baitarani gauges are shadow, not among the five cities that alert, so this is a measurement of the engine and not a description of the running product.
Across all 13 gauges: 51% of floods caught, at 6.6% precision.
Roughly fourteen false alarms for every true flood. Rainfall alone is not a statewide alerting product. It works on the Baitarani, a slow-response basin where two days of forecast rain actually reaches the gauge. It does not work everywhere, and the average hides both facts. This is why the number beside it is believable.
cities alerting: Bhubaneswar, Cuttack, Puri, Sambalpur, Rourkela
scoring cycle, every day of the year, wet or dry
daily flood bulletins archived, 2023 to 2026 (129 days of 2026, 125 parsed). The label is Odisha's own published gauge record: did the river cross its danger mark. Not our judgement, not an academic dataset.
location-days scored LOW while people were still displaced
of our own flood labels were fabricated by a parser bug. Some bulletins print the time as 1200 rather than 12:00, and we read it as a water level: 1200 m against an 8 m danger mark. We found it, fixed it, and re-ran everything.
Advisory pilot for the Baitarani districts.
30 days, no fee, scorecard agreed before day 1 and published on day 30. Jajpur · Bhadrak · Keonjhar (Anandapur) · Mayurbhanj (Baripada).
The ML model runs beside the engine in shadow and cannot alter a user-facing score. Heat has no live mode in the code at all. There is no signed MoU and no paying customer.
The trust gate is not passed, and the hero does not pretend otherwise.
The flood engine alerts on five cities. The ML model runs beside it in shadow and cannot alter a user-facing score. Heat has no live mode in the code at all. There is no signed MoU and no paying customer.
In production, driving user-facing alerts.
Measured on history. Never quoted as live accuracy.
Computed and published, structurally unable to alert.
The engine was wrong, and here is the write-up.
Every claim on this site carries one of those labels. Read the evidence before you believe the thesis, including the numbers that went against us.
The only metric that matters: one family, one more day
Name a flood. We will fly it and replay it.
Pick an event your district remembers. We run the unmodified engine on the forecast as it was issued that week, over the ground it actually happened on, and you see exactly when it would have fired, or that it would not have.
District pilot
One district, one monsoon, and a standing invitation to tell us every time we were wrong.
Replay request
Name an event your district remembers. We run the unmodified engine on the forecast exactly as it was issued that week.
Investors
We are raising a pre-seed. The engine already runs in production. What it lacks is reach, so the raise buys an ML engineer and a partnerships lead.