Fan Park. 48 nations, 104 matches. A World Cup dashboard in your colours, live by matchday two.
Client
Fan Park
Year
2026
Scope of Work
I don't follow football. I wanted to build the thing a fan would keep open at 3am during a World Cup, and make it feel like broadcast, not a spreadsheet. Fan Park is a personal FIFA World Cup 2026 dashboard: live scores in IST, all 12 group tables, the full 104-match schedule, a projected knockout bracket, the Golden Boot, hand-written storylines, and a shareable Fan Passport. It went live on 12 June 2026, day two of the tournament.
The brief
Pick your nation and the page floods in its colours. Standings are computed in the browser from fixture results on FIFA's 2026 tiebreak order, so there is no standings scrape to break. A self-contained Cloudflare Worker proxies the live feed behind a 60-second edge cache with zero KV writes on the hot path, and a four-hourly cron re-bakes results into the fixtures file. Vanilla HTML, CSS and ES modules, no build step.
The first skin was a copy of The Pavilion. A day after launch it got its own identity, The Wallchart, over eleven same-day versions while the site stayed live: the tunnel onboarding, the Road to the Final, goal toasts, and a scenario engine that brute-forces every remaining group result. The detail is in the screens below.
One thing I'd do differently: give it its own identity before launch night. Forking a sibling's skin bought the launch, and paying off that debt cost a full day.

Onboarding is the tunnel. Step one prints your name on a shirt.
Two steps, one focal point each. Your name goes on a squad jersey with a number, the way a kit printer does it: short names print big, long names shrink to fit, nothing spills off the shirt. No account, no email. Your name and nation never leave your browser.

Pick a nation and the flag drops across the whole viewport like a tifo.
Forty-eight tiles grouped A to L, each a real flag. Choosing one unfurls that flag as a clip-path banner and floods the dashboard in the kit colours, with the text colour computed from luminance so Argentina's sky blue reads as clearly as Germany's black. Switch Nation opens with your team already on the stage.

A dashboard that reads like a matchday programme, in your colours.
The Wallchart identity: chalk-poster paper with a 3% mowing-stripe texture, pitch-green chrome, ink scoreboard plates, solid offset print shadows, hard corners, and two typefaces, Archivo and Chivo Mono. Its ancestry is Lance Wyman's Mexico 68 geometry, pitch chalk lines and stadium scoreboards. Built over eleven same-day versions after launch, without the site going down.

Your name chalked on grass, your passport number on the plate.
The masthead carries the greeting, the nation's dispatch line, group position, points, played and form, plus Download Passport and Switch Nation. The ticker underneath runs like the LED perimeter board. Everything on it comes from the same fixtures file the tables are computed from, so nothing on the mast can disagree with the table below it.

All twelve group tables, computed in the browser, on the real 2026 tiebreak order.
No standings scrape. The tables are computed from fixture results plus the live merge, so there is nothing to break when a source page changes. FIFA reordered the tiebreakers for 2026, head-to-head now before goal difference, so the sort was rewritten and unit-tested against a case where the old and new orders disagree. Qualification chips stay conservative until the maths is certain.

The Road to the Final, drawn as a passing move across a chalk pitch.
Two findings made it possible: the feed's knockout placeholders carry ordinal names, so a nation's whole path is traceable, and the live feed carries per-goal detail the app had been discarding. The Road draws every stop from the group games to the final, pencils in likely opponents from tonight's tables, and answers the pub question, who do we get, with both possible flags.

The full bracket, projected until the field locked, then real.
Rendered from the real Round-of-32 pairing template, filled with projected qualifiers from the live tables until the draw locked on 28 June, every projected entrant visibly ghosted. Once results came in, the same tree carried the scores from the round of 32 to the final.

The Golden Boot, with the leader wearing the actual boot.
Scraped from Wikipedia's goalscorers section through a Cloudflare Worker, cached in KV for 30 minutes with stale-on-error. Flags on every scorer, a gold glyph on the race leader. One of two API routes; the other proxies the live scoreboard behind a 60-second edge cache with zero KV writes on the hot path.

The schedule, filtered to your nation, in IST.
All 104 matches, with a toggle between your team and everything. Upcoming fixtures say Tonight 21:30 instead of asking you to do timezone maths; finished ones show the result with the loser dimmed. A four-hourly GitHub Actions cron re-bakes results into the fixtures file and redeploys, so first paint is always fresh even before the live merge runs.

Fan Park Intel: storylines written by hand, not scraped.
Six short pieces per nation, checked against the record before they went in: the Azteca hosting a third World Cup, Ochoa at 40, Ronaldo at 41, the 48-team format explained, IST alarm times for the group games. The feeds carry the numbers; the intel carries the reasons to care.

The Fan Passport, the part people share.
A 1080 by 1920 canvas poster: your name, serial, photo, flag plate and nation colours on pitch texture, rendered in the browser from the same data as the page, so it never goes stale. Two more posters share the engine, the Wallchart with all twelve tables auto-filled, and Share your Road. It is the same plumbing that carried The Pavilion across Instagram during the IPL.

















