Skip to content
Mahanadi · Odisha · dawn

The water always comes.

The question is whether anyone saw it in time.

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.

Sambalpur · Mahanadi

Forty-eight hours before the road goes.

Open Flood Ops

Advisory only · does not override IMD, CWC or OSDMA

The journey

It did not start as a company.

It started with a river that everyone in the state can name, and a warning that has never quite arrived in time.

October 1999

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.

The last step

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.

Twenty-seven years

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.

The only metric that matters

One family, one more day.

Everything else on this site is instrumentation for that sentence.

  1. 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.

  2. The decision

    An engineer's version of doing something about it.

    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.

  3. The first honest score

    Zero of twelve gauges were telling the truth.

    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.

  4. The number we gave up

    We retired our best headline on purpose.

    Published anyway

    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.

  5. August 2026

    Five cities, one person, no capital.

    Live

    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.

22:40

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.

01:15

The gauge at Akhuapada passes its danger level.

18.45 metres against 18.33. The rule stops decaying yesterday’s rain.

03:14

Someone has to wake a town.

A score, three reasons, the closest past event, and one action. Small enough to read at three.

The only deadline

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.

01 · Explained simply

How a flood warning actually gets made.

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.

0:000:00
Monsoon night · Mahanadi
01 · Four beats, one August
  1. 01 · May

    The river sits low

    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.

    Rain
    4 mm
    River
    0.9 m

    Score

    0.06LOW

  2. 02 · 18 August

    104 mm falls in a day

    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.

    Rain
    104 mm · 2.1× p95
    Source
    IMD + AWS + OW

    Score

    0.41MEDIUM

  3. 03 · 19 August

    The gauge goes above danger

    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.

    River
    18.45 m / DL 18.33
    Gauge
    live

    Score

    0.72HIGH

  4. 04 · 03:14

    Someone has to wake a town

    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.

    Onsets caught
    6 / 6 @ 48 h
    Lead
    ~2 days of road
Miss

And the part that didn’t work: once the water was already there, we went quiet.

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.

02 · What the journey has not reached yet

The honest end of the story is that it has not happened yet.

No district has run a monsoon on this. No farmer has been enrolled through a programme. The trust gate that would let the model out of shadow is open, and the streak is currently zero.

A journey page that ended in triumph would be the easiest thing to write and the fastest way to lose the room.

Cities alerting in production
0
Districts running a full monsoon on it
0
Farmers enrolled through a programme
0
Paying customers
0
People building it
0

And then, eventually

Flood is one hazard in one state. The engine underneath does not know that.

Heat already runs on it. Cyclone and drought would run on it. The same shape works anywhere the data is thin and somebody has to decide tonight, which is most of the places that flood.

We are not building that yet, and we will not talk about it as though we are.

Not on the roadmap. Not in the next ninety days. Stated once, here, and nowhere else on this site.