पाऊस

Colophon · how it works

An honest machine for one question

पाऊस answers a single question — will it rain at your spot in the next couple of hours — and tries to answer it well, cheaply, and without pretending to be more than it is. Here is the whole machine: the architecture, the data, the model, and the line between what it can claim and what it can't.

01 The architecture

Free, even at zero users

There is no server. The page you're reading is plain HTML and CSS; one small script runs in your browser, calls the weather API directly, and applies a handful of numbers. Nothing runs on a backend per visit — no database answering queries, no API key, no credit card.

Because the work happens in the browser and the data feed is free, the running cost is the same at zero users as at a million: nothing. The site is served as static files from a CDN; the forecast comes keyless from Open-Meteo. That's the entire bill.

server
none · static CDN
API key
none required
compute
your browser
cost
$0 at any scale
forecast fetch
keyless Open-Meteo

02 The data

Two streams, kept deliberately apart

The input is forecast. From Open-Meteo we read two models:best_match — its tuned multi-model blend, our primary feed — and ecmwf_ifs025, ECMWF's flagship operational physics model, Europe's gold standard, kept as the benchmark we measure ourselves against. Alongside them rides the single strongest 0–2 hour clue: how much rain actually fell in the last three hours.

The answer key is not forecast. It's METAR — the real sky reports filed at Mumbai airport (VABB, Chhatrapati Shivaji) by trained observers and instruments, free and keyless. We read the present-weather code — RA and DZ mean rain; mist, haze and fog don't — into a plain yes-or-no: did it rain this hour?

This separation is the whole point. We never grade a forecast against another forecast — that would make "we're accurate" a tautology. The label is an independent ground observation, so the correction we learn from it is honest rather than circular.

forecast
Open-Meteo best_match
benchmark
ECMWF-IFS · ecmwf_ifs025
top feature
rain, last 3 h
ground truth
METAR · VABB airport
rain tokens
RA · DZ
forecast vs label
independent

03 The model

A few numbers, applied in your browser

The model is a calibrated logistic classifier. Five inputs — the two forecasts, the hour of day (as sine and cosine), and the recent rain — go in; one corrected probability of rain comes out. That's all of it.

It's trained offline and exported to model.json: a few kilobytes of weights and an intercept. The browser applies them with one line of arithmetic — sigmoid(w·x + b). No machine-learning engine runs on the live path, no GPU, no inference server. The "AI" is already reduced to multiplication and addition before it ever reaches you.

And it sharpens itself, for free. An hourly job on GitHub Actions logs each forecast next to what METAR later observed — a growing diary (log.csv, versioned in Git). A daily job retrains on that diary. A fresh model only replaces the live one if it beats both the current champion and the raw forecast on a time-ordered holdout — a walk-forward test with no peeking at the future. So the served model can only improve or hold; it can't quietly regress.

model
logistic · 5 features
served as
sigmoid(w·x + b)
file
model.json · few KB
logging
hourly · Actions cron
retrain
daily · eval-gated
promotion
beats champion + raw

04 The claims

What it does — and doesn't — claim

Honesty here means stating the bar, not boasting a number. The eval gate refuses to ship a model that doesn't clear the obvious baselines on a fair, time-ordered holdout — and is equally clear about the league it isn't playing in.

What it's built to beat

  • Persistence — "same as the last hour."
  • Climatology — the seasonal base rate.
  • The raw forecast, including raw ECMWF-IFS, on its own rain call.
  • On the measures that matter for a yes/no call: calibration (Brier score) and false-alarm rate — the forecast's wrong rain warnings.

What it doesn't claim

  • To out-predict frontier AI weather models (GraphCast, AIFS and the like) at their own game.
  • To use live radar — there's none on the free path. This is a calibrated correction of a public forecast for one city.
  • Any number you can't check: the live model's real scorecard is computed on logged outcomes, not asserted here.

· The model serving you right now

Everything above is carried by one small file, model.json. Its version and last-retrain date are stamped inside it; the full scorecard — Brier score against the raw forecast and against climatology, on real logged outcomes — lives on the Scoreboard.

version
last retrained