A free, open fan-made companion to the 2026 World Cup — now its archive: all 104 matches, kept in full, with no ads and no sign-up.
What's inside
- The Wrap: the tournament's story told from the data - the headline numbers, Spain's road (they never trailed), the final and that ten-goal bronze final, when the goals came, the comebacks and upsets, the honours board, and the prediction model's own scorecard, replayed blind
- All 104 matches with kickoff times on your local clock, final scores and a one-tap calendar export of the schedule as it was
- Browse all 48 nations: squads (tap a player for their profile - photo, age, height, weight, club, caps, match log and a Match stats block from FIFA's physical data), form, matches, a playing-style read and a World Cup penalty shoot-out record for each, and make one your favourite so the whole app takes on its colours and projected route to the final
- Compare any two players or any two teams head-to-head - form, strength, playing style and pedigree, with the model's odds if the two teams met
- Every match carries a win probability and a predicted scoreline from a transparent model, which flags the factors moving the call when they stand out
- Open any match for the full picture as it stood: the team-coloured scoreboard, the goal timeline, line-ups on a formation pitch, stats grouped by attack & defence, match stars, the archived commentary, the match report, and FIFA's official deep analysis (expected goals, per-player distance, top speed & sprints, phases of play) - plus what the model predicted before kickoff
- The settled Bracket: the full knockout tree from the round of 32 to the final, with the final group tables and the best-third race a tap away
- The complete record book in Stats: the Golden Boot, team and physical leaderboards (distance, sprints, top speed); the Goals section (when goals were scored, the full shot map, where they crossed the line); all-time World Cup records with 2026's entries in place; and the final FIFA World Ranking
- The tournament's closing headlines, plus install as an app, offline support, light & dark, an optional animated background, and a quick search (⌘K) for any team, player or match
The prediction model
Win probabilities came from a Dixon-Coles scoring model. Each side carried a strength rating: an Elo that updated after every result and leaned on official expected goals, not just the final score. That got refined by an attack-versus-defence read of how the two teams actually played, by home advantage for the host nations, and, late in the groups, by what each side still needed to qualify. It was tuned to football's history, never to this tournament's own results. After the final it was replayed blind across all 104 matches — every prediction recomputed from pre-match information only — and the scorecard, misses included, lives in the Wrap tab.
How it works
It's a single static page with no app server. While the tournament ran, your browser read FIFA's public match feed directly for the live score, minute, timeline and line-ups, with automated jobs baking everything slower into plain JSON. Now that the final is played, the site is a finished archive: every dataset is baked, the jobs are retired, and the page makes no live calls at all. Times still convert to your device's clock automatically.
Your privacy
No tracking, no cookies, no accounts. Analytics are off by default. Your team, timezone and saved predictions stay on your device.
Sources & credits
Schedule from openfootball (public domain); live scores, line-ups, stats, reports & commentary from FIFA and ESPN; deep-analysis metrics from FIFA's post-match Enhanced Football Intelligence; squads from official FIFA squad lists; headlines from leading football desks (Guardian, BBC, ESPN, France 24, Al Jazeera, DW); country flags are bundled SVGs (flagcdn); country outlines from Natural Earth (public domain) and populations from the World Bank; historical World Cup results (the head-to-head records) from the open jfjelstul/worldcup dataset, cross-checked match-for-match against martj42/international-results; background music is royalty-free. Football data and team names belong to their respective owners.
Open & free
An open, no-build project. View the source on GitHub ↗. Spotted a bug or have an idea? Open an issue ↗.
How this was built the technical story▾
No build step
The whole app is one index.html, one styles.css and one app.js - plain HTML, CSS and JavaScript, no framework, no bundler, no server. Edit a file, refresh the page. It loads as a single static page from a CDN, so it's quick anywhere and trivial to host.
The data pipeline
Two paths, split by how fast the data moved. Live scores came straight from FIFA to your browser: the public match feed (calendar + per-match object) was read directly, so a goal, the minute, the timeline and line-ups updated in real time with no server in the loop. Everything slower was baked server-side - on a schedule GitHub Actions pulled from public sources (openfootball for the schedule, FIFA and ESPN for stats, reports and commentary, FIFA's post-match Enhanced Football Intelligence PDFs for the deep analysis) into plain JSON committed to the repo. With the tournament over, the schedules are retired and that baked JSON is the site - the live path simply switched off.
Built to work offline
A service worker caches the shell so it keeps working on a plane or a dodgy connection, while staying network-first for code and scores - so you get fresh data when you're online and never get stuck on a stale build.
Built in the open
Shipped iteratively, one small build at a time - you're on build -. Written by hand with an AI pair-programmer, every change reviewed and verified in a live preview before it went out.
An unofficial fan project, not affiliated with, endorsed by, or sponsored by FIFA or any football body. “World Cup” and related marks belong to their owners.
Tip: press ⌘K or / to search teams, players & matches, and tap any team to make it yours.