Forecasting · documentation
↗ Open dashboard
Data & methodology

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

FeedUsed forEndpoint (via proxy)
Gamma eventsThe list of open weather markets, ranked by liquidity /api/gamma/events?closed=false&tag_slug=weather&order=liquidity
CLOB order bookLive 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.

FileContentsProduced by (original pipeline)
forecasts.jsonPer-airport model forecast: daily temperature, exceedance percentiles, predictability indexmb_fetch_forecasts.py, every 5 min
actuals.jsonLive METAR observations (meteoblue hourlyQcMetar)mb_actuals, every 5 min
actuals_noaa.jsonSecondary observation feed (NOAA)NOAA ingestion, every 5 min
ensemble.jsonPer-member GFS + ECMWF temperature traces (14 days) for the hourly chartmb_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

Freshness Static files are only as current as the last pipeline run that wrote them. The dashboard shows each forecast file's own fetched_at; if it looks stale, check the jobs that generate the files on your ingestion host.
Forecasting dashboard documentation · Meteo Bulgaria EOOD · 2026