⚽ 48 teams · 16 cities · 104 matches

World Cup 2026 Dashboard

Follow the 2026 FIFA World Cup in one place — a live bracket and group tables, three interactive maps, match-day weather, a live score ticker, a Golden Boot tracker, and a form-aware Elo prediction engine — with a steerable projected bracket and an AI pundit panel — all shown in your device's local time.

🇨🇦 Canada  ·  🇺🇸 United States  ·  🇲🇽 Mexico  —  Jun 11 – Jul 19, 2026

What's inside

Built with Flask + vanilla JS and Leaflet — no heavy front-end framework.

🗂️

Live bracket

Round of 32 → Final in FIFA's two-pathway layout, with feeder group tables alongside. Slots resolve as results land.

📊

Group tables

All 12 groups with live points, GF/GD and full FIFA tiebreakers — top-2 and in-contention thirds highlighted.

🗺️

Daily map

A day slider lights up each day's venues with country-flag pins and click-through match detail.

🧭

Follow-a-team map

Trace any team's journey with date-gradient pins, gradient path lines, directional arrows and per-match kickoff weather.

🌦️

Match-day weather

Live radar, isobars and advisories; temperature + precipitation forecasts; historical conditions for past games. °F/°C toggle and a national heat map.

🔴

Live score ticker

When a match is in progress, the live score — and the minute of play as of the last check — shows up on every page, refreshed every 5 minutes.

🎲

Prediction engine

An Elo Monte-Carlo simulator — with form-adjusting ratings and a Dixon–Coles draw model — projects title odds, qualification odds and a single consistent projected bracket, depth-selectable from R32 to the Final.

🕹️

Interactive bracket

Steer the projected knockouts: click any team to force it through, and the bracket re-walks every slot it feeds — play out your own what-if run, then reset in one tap.

👟

Golden Boot tracker

The top-scorer race — penalties count, own goals don't — with a projected whole-goal range of additional goals scaled by how far each striker's team is simulated to go.

📈

Form tracker

Team ratings start from a prior and adapt to in-tournament results — a live board of the biggest risers and fallers.

📐

Transparent methodology

Every projection is explained: an in-app popup documents the Elo, Poisson goals, draw correction and Monte-Carlo — assumptions and limits included.

🎙️

AI pundit panel

A MiroFish-inspired panel of Claude personas debates the race, grounded in the model's numbers — with built-in cost controls.

How it was built

The dashboard grew in self-contained rounds, each shipped onto the live deployment.

Stage 0 · Foundation

Flask + SQLite skeleton

Schedule, teams, groups and venues seeded from openfootball; a 15-minute cron pulls scores, recomputes standings and resolves the bracket. Bracket, groups and daily map go live.

Stage 1 · Live data

football-data.org key

Live score enrichment wired into the updater, keeping the keyless fallback intact.

Stage 2 · Maps

Flag pins on the daily map

Pins show the two competing nations' flags; time, stadium and stage on click.

Stage 3 · Maps

Follow-a-team map

Pick teams from a checklist and plot their matches, color-coded by date.

Stage 4 · Maps

Team-map polish

Gradient path lines, directional arrows and whole-pin date coloring.

Stage 5 · Weather

Radar, isobars & advisories

Live conditions for today's games, forecasts ahead, and historical weather for matches already played.

Stage 6 · Weather

Temperature controls

°F/°C toggle, a national temperature heat map, a numeric legend, plus humidity and dewpoint.

Stage 7 · Live

Site-wide score ticker

In-progress scores surface on every page.

Stage 8 · Predictions

Elo Monte-Carlo engine

Thousands of simulations project title odds and a likely bracket, with an Actual/Projected toggle and depth selector.

Stage 9 · AI

MiroFish-inspired pundit panel

Claude personas debate the race, grounded in the stats, with daily/monthly caps and a reserve to protect the shared key.

Stage 10 · Rigor

Consistent bracket & open methodology

The projected bracket became internally consistent — no team in two places at once — with a popup documenting the whole model for review.

Stage 11 · Predictions

Calibrated, living ratings

A Dixon–Coles draw correction for realism, and dynamic Elo that adapts to results — surfaced as a Form tracker of risers and fallers.

Stage 12 · Polish

Local time for every visitor

Kickoff times and the "today" schedule now follow each device's own timezone.

Stage 13 · Predictions

Steerable projected bracket

In Projected mode, click any team to force it through its match — the bracket re-walks every slot it feeds, so you can play out what-if runs. Resolved Round-of-32 teams are pickable too, with a lock badge and a one-tap "Reset picks". Per-slot confidence stays the honest simulation marginal.

Stage 14 · Predictions

Golden Boot tracker

A top-scorer race off the keyless goals feed — penalties count, own goals don't — flagging everyone within two of the lead as in contention. Each contender gets a projected whole-goal range of additional goals, scaled by how deep their team is simulated to go. Re-rank by current goals or projected finish.

Stage 15 · Maps

Kickoff weather on the team map

The follow-a-team map now shows each match's kickoff weather too — actual conditions for games played, forecast for those upcoming — sharing one formatter with the daily map.

Stage 16 · Live

Faster refresh & minute of play

Live scores refresh every 5 minutes, and the ticker shows the minute of play as of the most recent check — football-data's own minute when present, otherwise estimated from kickoff.

Tech stack

Lightweight by design, running directly on a DigitalOcean droplet.

Python · Flask SQLite gunicorn + pm2 nginx subpath Leaflet + OpenStreetMap Vanilla JS Open-Meteo · RainViewer · NWS football-data.org Anthropic Claude API

Live scores via football-data.org (free tier, slightly delayed) with a keyless openfootball fallback. Elo ratings start from an early-2026 snapshot and update from in-tournament results. AI pundit takes are model-grounded commentary — entertainment, not predictions of record.