duoyj logoduoyj · Case Study

Cup26Map: one map for a 104-match tournament.

Cup26Map is an independent web app for the 2026 World Cup schedule. It connects matches, host cities, venues, teams, time zones, travel paths, and knockout scenarios so the tournament reads as a map, not just a long fixture table.

Independent fan-made project by duoyj. Not affiliated with, endorsed by, sponsored by, or associated with FIFA, the 2026 FIFA World Cup™, or official tournament organizers.

Cup26Map interface overview

104

Matches represented: 72 group-stage games and 32 knockout fixtures.

16

Host cities across the United States, Mexico, and Canada.

48

Teams organized by group, city, date, and possible tournament path.

39

Days of tournament scheduling compressed into one map interface.

Project snapshot

A tournament schedule rebuilt around place.

Type
Interactive event map / schedule explorer / fan travel planning aid
Scope
2026 World Cup schedule, 16 host cities, 48 teams, group stage, knockout venue scenarios, local time conversion, city and team views
Role
Product concept, information architecture, map UX, data modeling, frontend build, responsive interaction design, SEO setup, and launch materials
Core use case
Answer who plays where, on which day, in which local time, and what that means geographically.
Stack
Next.js 16, React 19, TypeScript, Leaflet, React Leaflet, Tailwind CSS, static JSON data, URL-synchronized state, Vitest tests
Status
Live at cup26map.com
Early signal
After tracking was fixed, Cloudflare Web Analytics showed roughly 400 real visits per day at the start of the knockout stage, after bots and crawlers were excluded. Promotion was limited mostly to one Reddit post in r/IMadeThis, which reached about 36k views and 35 upvotes.
interactive mapevent schedulespatial storytellingtimezone UXtravel pathspublic web app
Problem → Solution

The schedule was available. The geography was hard to read.

A large international tournament is also a geography problem: cities, dates, teams, venues, time zones, travel routes, and bracket scenarios all interact.

Problem

Official schedules and sports pages usually show matches as lists: date, time, team, venue. That works when someone needs one fixture. It is weaker when they want to understand how the whole tournament moves.

For fans, travelers, local hosts, and curious viewers, the useful questions are spatial and comparative: Which matches happen in this city? Where does this team go next? How far apart are the venues? What changes if the team finishes first, second, or third?

The gap is simple: a table tells you the fixtures; a map shows how the tournament moves.

Solution

Cup26Map puts the tournament on a North America map and lets users enter from match day, city, team, or timezone.

The map, city and match-day sidebar, team schedule panel, and optional flight paths work together. A user can scan one date, open a city, follow a team's group-stage route, or inspect possible knockout paths.

The product turns one long fixture table into a spatial system people can move through.
Interface model

A three-panel layout built around the map.

The interface is map-centered, but not map-only. Sidebars hold the structured schedule details; the map carries geography, venue distribution, and travel relationships.

CUP26MAP

16 Cities · 48 Teams · 39 Days · One Map

NOW / NEXT · 4 matches

NED vs SWE

13:00 · Houston · LIVE

GER vs CIV

16:00 · Toronto

Toronto
Houston
Monterrey
Kansas City
Product decisions

Design choices that made the schedule explorable.

The useful part is the connection between layers: time to place, team to route, city to venue, group stage to knockout uncertainty.

01

Map as the primary model

The map is not decoration. Geography is the interface, with city markers, match labels, and path overlays showing where the tournament happens.

02

Four ways to enter the data

Users can start from timezone, match day, city, or team, depending on the question they have: today's matches, Toronto's schedule, Canada's route, or kickoff time at home.

03

Sidebars for detail, map for context

The left sidebar carries city and match-day schedules; the right sidebar carries team schedules. The map keeps the geography visible while details stay readable.

04

Team travel paths

Selected teams are drawn across host cities with curved paths and directional markers, so the journey is visible instead of buried in separate fixtures.

05

Knockout scenarios as scenarios

Before results are known, the knockout bracket is uncertain. Cup26Map shows first-, second-, and third-place path options instead of pretending there is one fixed route.

06

Shareable state

Selections sync with URL parameters, so a specific team, city, day, and timezone view can be copied, shared, and reopened.

07

Now / Next layer

A live and upcoming match stack tells users what is happening soon while the map keeps the larger tournament context in view.

08

Responsive interaction

The layout adapts for mobile and compact screens, where sidebars, dropdowns, and map controls need different behavior than desktop.

09

Legal clarity

The footer and public copy clearly state that the project is independent and unofficial, which matters for a fan-made tool around a trademark-sensitive event.

Technical approach

Static data, derived paths, URL state, and a map-heavy frontend.

This is not just a visual mockup. It is a data-backed Next.js app with separate data models, utility functions, tests, and route-aware UI behavior.

System outline

FrameworkNext.js 16 with React 19 and TypeScript, using the App Router and dynamic map loading so Leaflet stays out of server rendering.
Map layerLeaflet and React Leaflet with CartoDB light tiles, custom controls, city markers, match labels, and SVG overlays.
Data modelStatic JSON for cities, teams, group-stage matches, knockout venues, and distance data, backed by TypeScript interfaces for City, Team, Match, and KnockoutVenue.
State modelURL-synchronized state for selected team, city, day, and timezone, so sharing and browser-back behavior are part of the product model.
Path logicGroup-stage team paths and knockout scenarios are derived from match data and bracket rules, then rendered as SVG overlays on the map.
QualityVitest and React Testing Library are configured, with tests for date formatting, URL state, scores, default selection, match status, slugs, and path calculations.

Implementation details that matter

  • Data repository abstraction: `JsonMatchRepository` reads local JSON today, while keeping the data access layer ready for an API or database later.
  • Knockout bracket generation: R32 participants come from knockout venue data, and later rounds are traced through winner tokens such as `W73 → W90 → W97 → W101 → F_104`.
  • Timezone conversion: match times are formatted against an IANA timezone, so users can read kickoff times in their chosen local context.
  • Default selection logic: during the tournament window, the app can open on the next relevant match day instead of a generic starting state.
  • Map view control: selecting teams, cities, and days adjusts the map view and highlighted cities, reducing manual panning and zooming.
  • Score update workflow: the repo includes a CLI script for finding match IDs and updating scores during tournament-time maintenance.
  • SEO structure: metadata, Open Graph image, structured data, city and team landing pages, and keyword targeting support search discovery.
Information architecture

The main design problem was deciding what belongs together.

Cup26Map works by connecting layers that are often split across separate schedule pages:

  • Schedule layer: match date, kickoff time, group/stage, opponents, and venue.
  • Geographic layer: host city, country, stadium, and regional distribution across North America.
  • Team layer: group-stage matches, likely travel sequence, and possible knockout path.
  • Time layer: local kickoff time converted into the user’s chosen timezone.
  • Scenario layer: tournament paths that depend on group placement and bracket rules.

The bet is that a mega-event schedule becomes easier to understand when these layers appear together. The map is the organizing surface, not a backdrop.

Launch reality & constraints

Strong portfolio evidence, with an early real-usage signal.

Cup26Map is useful portfolio work because it shows complex event mapping, schedule data modeling, spatial storytelling, and interactive map UX in one product.

After an analytics configuration issue was fixed, Cloudflare Web Analytics showed roughly 400 real visits per day at the start of the knockout stage, after bots and crawlers were excluded. The complex group-stage planning use case had mostly passed by then.

The promotion behind that signal was modest: mainly one post in Reddit's r/IMadeThis, which reached about 36k views and 35 upvotes. That is not proof of monetization or long-term retention, but it does show the project found real use under limited promotion.

The honest reading is stronger than before, but still bounded. Cup26Map is a capability case study, a reusable event-map pattern, and now an early usage signal. Repeatable distribution and direct monetization remain separate questions.

High

portfolio value as complex event information architecture

Short

event window: value increases as the tournament approaches

≈400/day

real visits at the start of the knockout stage, after bots and crawlers were excluded

Open

direct monetization and repeatable distribution are still open questions

Reusable

pattern for conferences, festivals, sports events, heritage routes, and public programs

What this demonstrates

Why Cup26Map belongs in the portfolio.

Even while monetization and repeatable distribution remain open questions, Cup26Map shows useful skills for spatial web work, public data tools, event mapping, and civic or cultural information products.

Complex information architecture

Teams, dates, cities, venues, groups, stages, time zones, and bracket paths are organized into one navigable system.

Spatial UX and map interaction

Geography, view control, labels, sidebars, and path overlays make the event's complexity visible.

Data modeling and transformation

Static schedule data and bracket rules become derived views, URL states, and scenario paths.

Scenario thinking

Known group-stage fixtures stay separate from hypothetical knockout routes, preserving uncertainty instead of hiding it.

Event-map product pattern

The same pattern can fit conferences, festivals, public programs, heritage tours, multi-city sports events, or grant-funded cultural maps.

Public web product execution

The project has a live domain, SEO metadata, responsive layout, shareable views, video guide, support link, and legal disclaimer.

Lessons & next steps

The strongest frame is an event-map engine, not a one-off fan site.

Cup26Map’s immediate topic is the 2026 World Cup. The broader capability is more general: turning large, distributed, time-sensitive public events into usable spatial interfaces.

That gives the project two jobs: serve as a public fan tool during the tournament window, and serve as a reusable portfolio case for spatial web work.

  1. 1Case-study first: treat the project as evidence of complex event information design, even while traffic is still early.
  2. 2SEO and timing: monitor Search Console and revisit promotion closer to the tournament, when search intent should be more active.
  3. 3Data story angle: publish one or two focused data stories, such as which teams travel the most or which cities host the densest schedule; find the fun facts in the video walkthrough.
  4. 4Reusable engine: describe the underlying pattern as a multi-city event map engine: schedule data, places, routes, scenarios, and shareable filters.
  5. 5Keep legal boundaries clear: keep fan-made and unaffiliated wording visible on all public-facing pages.
  6. 6Avoid overbuilding: avoid heavy features unless they clarify the event. The project's value is compression and orientation.
Work with me

Need to explain a multi-location event or public dataset?

I am open to selected collaborations on event maps, civic and cultural mapping, open-data tools, and spatial web prototypes.