Data sources & pipeline
The dashboard combines two live Polymarket feeds with a set of static forecast and observation files produced by the ingestion pipeline.
Two kinds of input
Everything on screen comes from one of two places: live data fetched from Polymarket through the server's proxy, and static files served from the deployment that were written by the ingestion jobs.
Live: Polymarket
| Feed | Used for | Endpoint (via proxy) |
|---|---|---|
| Gamma events | The list of open weather markets, ranked by liquidity | /api/gamma/events?closed=false&tag_slug=weather&order=liquidity |
| CLOB order book | Live depth for a selected bucket | /api/clob/book?token_id=… |
Both are proxied server-side so the browser never calls Polymarket directly — this avoids CORS problems and lets the server reach the API even when the browser's region is blocked. See Routes & API reference.
Static: forecast & observation files
These JSON files are read from the site root. The dashboard tolerates missing ones — if a file is absent it falls back or simply shows no data for that panel — so you can add feeds over time.
| File | Contents | Produced by (original pipeline) |
|---|---|---|
forecasts.json | Per-airport model forecast: daily temperature, exceedance percentiles, predictability index | mb_fetch_forecasts.py, every 5 min |
actuals.json | Live METAR observations (meteoblue hourlyQcMetar) | mb_actuals, every 5 min |
actuals_noaa.json | Secondary observation feed (NOAA) | NOAA ingestion, every 5 min |
ensemble.json | Per-member GFS + ECMWF temperature traces (14 days) for the hourly chart | mb_ensemble, every 4 hours |
Per-continent variants
For large deployments each file may be split per continent — e.g.
forecasts_europe.json. The dashboard tries the per-continent file first and
falls back to the global file (slicing it client-side) if the split one is not present.
Either layout works.
Shape of forecasts.json
{
"fetched_at": "2026-06-12T13:20:02Z",
"airports": {
"EGLC": { /* per-day forecast, percentiles, predictability */ },
"LFPB": { ... }
},
"errors": {}
}
Airports are keyed by ICAO code. The bundled file ships with 59 airports.
Underlying providers
- meteoblue — model temperature, exceedance percentiles and the predictability index, by airport coordinate.
- METAR — standardised airport weather reports, via meteoblue's
hourlyQcMetar, with a NOAA secondary feed. - Polymarket — the markets themselves, prices, liquidity and order books.
fetched_at; if it looks stale, check the jobs
that generate the files on your ingestion host.