Growing up
Where the rivers decide the year.
What nobody has is the one thing that would change the night itself, which is knowing whether this rain is the one.
ModelEarth scores flood risk for five Odisha cities every thirty minutes, and publishes the replay, so a district can check the engine before it trusts an alert.
Advisory only · does not override IMD, CWC or OSDMA
It started with a river that everyone in the state can name, and a warning that has never quite arrived in time.
The models had seen it. The satellites had seen it.
A super cyclone crossed the coast and took thousands of lives. Nothing about the physics was unknown that night.
What did not happen was the warning reaching the house.
The forecast was issued. It stopped at the district. Everyone who grew up here after that grew up with the same fact in the background.
The rivers still rise on a schedule everyone knows.
The Mahanadi does not surprise anyone. The year is planned around it: when to plant, when to move the animals, when to sleep lightly.
One family, one more day.
Everything else on this site is instrumentation for that sentence.
Growing up
What nobody has is the one thing that would change the night itself, which is knowing whether this rain is the one.
The decision
The honest reason this exists is small and unheroic: it is the one problem where the skills were already in hand. Ingestion, a rule engine, an API, a dashboard. Not a moral awakening, just the recognition that the gap was distribution and distribution is software.
So it began as evenings and weekends against public data, with no plan for it to be a company.
The first honest score
The first real lesson was not a modelling lesson. It was that the public river network, on the day we started ingesting it, had a feed stalled 84 days, five sensors reading the same number for months, and one station reporting minus 834 metres.
Everything the company is now was decided in that week. Not a bigger model. A discipline about which feed lies and when.
The number we gave up
Our labeller had been snapping flood events to the nearest city within 120 km. In Odisha that crosses whole basins, and it meant our 99.3% was measured on the wrong rivers. One of 143 validated positives was actually Mahanadi.
We could have quietly fixed it. Instead we published the audit, the replacement number, and the precision problem it exposed underneath. If there is a single thing that separates this from every other deck in the category, it is that week.
August 2026
The engine scores Bhubaneswar, Cuttack, Puri, Sambalpur and Rourkela every thirty minutes. The ML runs beside it in shadow and has never moved a user-facing score. There is no signed MoU and no paying customer.
That is the whole position, stated the way we would want it stated back to us.
Six hours of rain upstream, and the river is still inside its banks.
The engine has been scoring this location every thirty minutes since May.
The gauge at Akhuapada passes its danger level.
18.45 metres against 18.33. The rule stops decaying yesterday’s rain.
Someone has to wake a town.
A score, three reasons, the closest past event, and one action. Small enough to read at three.
The warning has to arrive before the water does.
Forty-eight hours of lead is about two days of usable road. That is the entire margin, and it is why the engine runs on the dry days too.
Four moments in one August, on one stretch of the Mahanadi. No jargon, just what the engine sees, and when. Most of the year nothing happens, and that is what makes the one day legible.
01 · May
The bank is exposed, the gauge reads under a metre. The engine still runs every thirty minutes and still writes a score, because the only way a HIGH means anything is to have watched all the days it stayed LOW.
Score
0.06LOW
02 · 18 August
Heavy, but heavy is normal here in August, and that is the whole problem. So the number is not compared to a national threshold. It is compared to this location’s own wet-day p95, worked out from thirty years of records: 2.1 times a normal heavy day.
Score
0.41MEDIUM
03 · 19 August
18.45 metres against a danger level of 18.33. The rule stops decaying the previous days’ rainfall, because during an active flood the water has not gone anywhere. If that gauge were stale, stuck, or published against a different datum, the level would be shown but would count for nothing.
Score
0.72HIGH
04 · 03:14
A score on its own is not a decision. What lands on the officer’s screen is the score, the three reasons behind it, the closest event in the historical record, and one suggested action, small enough to read at three, complete enough to defend at nine.
Through the recession that followed, fourteen of eighteen location-days scored LOW while 13.44 lakh people were still displaced, because the engine reads rainfall, and the rain had stopped. Warning and flood state are not the same problem, and we had been treating them as one.
That is why river gauges are now on the risk path, and why this sits at the end of the story instead of in a footnote. Ten of the twelve location-days we missed in that window would have been caught by the fix.