On air

World Cup 26

Live match centre and tournament tracker

Status
On air
Stack
Next.js, Fastify, WebSockets
Data
Public ESPN feed, no key

The app, running

A live summary read from the same public feed as the real match centre.

The board is temporarily unavailableThe World Cup feed didn't respond just now. Nothing here is faked, so this fills back in on its own.

World Cup 26 is a live match centre and tournament tracker for the 2026 FIFA World Cup: every fixture, every group table, the full knockout bracket, team and player pages, and a match centre that follows games as they happen.

It runs on a free, public ESPN feed. No API key, no paid data deal. That constraint shaped the whole project: the feed is undocumented, quirky and occasionally wrong in interesting ways, so the app's first job is reading it honestly. Pass percentages arrive pre-rounded, so the app computes them from raw counts. The match clock arrives in seconds. Team colours come from what the team actually wore, not their brand palette. Each of those discoveries is written up in the devlog.

What it shows

During a match, the centre carries the score and running clock, line-ups on a pitch board in real jersey colours, a shot map plotted from real pitch coordinates found in the feed, goal and card events on an event spine, kick-by-kick shootout strips, possession and passing panels, and momentum. Anything the feed does not genuinely provide is either derived transparently and labelled as an estimate, or left out. There are no fabricated statistics: when a match has no stats yet, the panel says so instead of showing an invented 50/50.

Around the matches sit the tournament structures: group standings computed from results, a knockout bracket that fills in as ties are decided, schedules in your local time, and per-team tournament records.

The honest-data rule

The project's one law is that nothing on screen is faked. Derived numbers are badged as estimates. Delayed feeds show their last known state rather than a guessed current one. If the upstream source is down, the page says exactly that. This rule turned out to be a feature: it forced the app to understand its data source deeply instead of papering over it.

The rebuild that shipped

The site on air today is the second-generation build, live since early July 2026: a full visual rebuild plus the data unlocks that came out of re-reading the raw feed end to end - the shot map, the shootout strips, the event spine. It was followed the same week by a production hardening pass (payload firewalls, honest pre-match states, colour-vision-safe encodings). The devlog stories about the shot map and the radial bracket come straight from that work.