Document wallchart center-out geometry engine, radial orbit layout with flag tokens on rings, rounds pager infrastructure, view toggle persistence, and art direction (stadium-night, escalating heat). Note retirement of CSS equal-height connector invariant. Update TODO with Step 4 (champion celebration + polish + v1.1.0 version bump).
8.2 KiB
TODO — World Cup 2026 Hub
Checklist of what needs to be done. Organized by build step (approved plan, one approval gate per step).
Use checkboxes to track progress. Items marked 🔴 BLOCKER prevent release; 🟡 IMPORTANT must be done but don't block; 🟢 OPTIONAL can be deferred.
1. Foundation
🔴 BLOCKER
Step 0 — Project memory:.agents/+ auto-memory pointer +git init- ~
Step 1 — File structure + mock data (48 teams, 12 groups, 104 matches UTC,30 stadiums,bracket-config.jsonwith null third-place slots, mixed results) Step 2 — Base layout: SPA shell, header + nav, hero (next match + countdown), dashboard cards,style.csspalette,app.jsloadData/routing,storage.js,i18n.js(EN/PT toggle)
2. Core views
🔴 BLOCKER
Step 3 — Match schedule: list, filters (date/group/phase/team/stadium), search, sortStep 4 — Group standings computed from results (3/1/0, GD, GF)Step 5 — Stadiums page (cards + matches held)Step 6 — Match detail modal (result, penalties, future-stats placeholder, ARIA)
3. Bracket
🔴 BLOCKER
Step 7 — Static bracket: R32 from config, sequential pairing to FINAL, placeholders,resolveBracketTeams()Step 8 — Interactions: hover path highlight, animations, wheel/pinch zoom, drag/panStep 9 — Simulation mode: pick winner + score, propagate rounds,wc2026_simulation, reset
4. Polish & docs
🔴 BLOCKER
Step 10 — Responsiveness (≤767 / 768–1439 / 1440+), accessibility (ARIA, keyboard, focus, contrast), entry animations
🟡 IMPORTANT
Step 11 — README (deploy guide, JSON maintenance,(done after step 12, at user request)bracket-config.jsonhow-to) + spec §18 acceptance checklist
5. Extra features (complement spec §6–10)
🟡 IMPORTANT
Step 12a — Favorites + "My Matches" filter (toggleFavorite,getFavoriteMatches, highlights)Step 12b — Timezone toggle "Local / Stadium time" (wc2026_prefs.timeMode)Step 12c —.icsexport (calendar.js, CRLF, UTC, 2h duration)
🟢 OPTIONAL
Step 12d — Bracket challenge score card (calculateChallengeScore)Step 12e — Share/import prediction via?prediction=base64 link
6. Post-launch (real data)
🟡 IMPORTANT
Replace mock(2026-06-12 — full migration + smoke test; see project-memory)data/*.jsonwith real World Cup 2026 dataFill(2026-06-28 — all 8 slots filled from FIFA's official combination table for thirds B,D,E,F,I,J,K,L →thirdPlaceAssignmentinbracket-config.jsonafter group stage ends{1:D,2:F,3:B,4:I,5:E,6:K,7:J,8:L}; R32 verified vs official bracket)- Update
results.jsonas the tournament progresses (R32 in progress — results through match id 82 on 2026-07-02: R32 ids 73–82 finished [74 GER 1–1 PAR pen 3–4, 75 NED 1–1 MAR pen 2–3, 77 FRA 3–0 SWE, 78 CIV 1–2 NOR, 79 MEX 2–0 ECU, 80 ENG 2–1 COD, 81 USA 2–0 BIH, 82 BEL 3–2 SEN AET]; ids 83–88 next) Real stadium photos + team flag SVGs in(flag SVGs added 2026-06-18; stadium photos optional)assets/images/- Pós-Copa: estado final da home. Quando a Final encerrar, o hero fica vazio (por design atual). Criar um estado pós-torneio (campeão/epílogo) na home — ver entrada "Hero cronômetro inteligente (2026-06-15)" em project-memory; provavelmente converge com a aba Stats (
stats-screen-plan.md).
🟢 OPTIONAL
PWA Tier 1 — instalável (manifest + ícones + meta tags; 2026-06-16). Atende todos os critérios de aceitação da issue.- PWA Tier 2 — service worker + offline (deferido; ver
.agents/issues.md→ "PWA Tier 2". DEVE excluirdata/*.jsondo cache p/ não quebrar o live-refresh).
7. Stats final screen — feature/stats-final-screen
Build of .agents/stats-screen-plan.md, stage by stage with an approval gate each. The pure-UI
build (A–F, minus skipped E) + a release polish (J round 1) was merged to master on 2026-06-17
and is live. The screen renders fully with today's data and auto-lights the post-Cup sections (verdict,
champion path, debuts champion) once the final lands. The data-layer stages (G/H/I) + a second polish
(J round 2) remain for when their data arrives near/after the Cup.
✅ Shipped to master (2026-06-17)
Stage 0 — branchfeature/stats-final-screenoffmasterStage A — degradation engine + fault-tolerantloadData+ sticky scrollspy sub-nav + media fallbackStage B — verdict hero (gated on FINAL finished; aggregate-hero fallback) + goals-by-round chartStage C — final ranking 1–48 (phase-reached chain), favorite-row highlight, team record cardsStage D — auto record-cards + "format-48 debuts" bandStage E — in-tab results archive— SKIPPED (Option B): kept the "See all matches → Matches" link; the Matches tab already covers browsing.Stage F — team comparator (diverging bars)— teams only; the Teams/Players toggle is deferred to Stage H per graceful degradation.Stage J (round 1, release polish) — a11y/responsive/i18n/README audit on A–F— passed clean (no code fixes). Lighthouse still pending an actual deploy (the once-planned finalDATA_VERSIONbump is moot —DATA_VERSIONremoved 2026-06-18).
🔭 Future (data layers + 2nd polish — near/after the Cup)
- Stage G — Layer 2 cheap data. Extend
results.json(attendance,cards→{y,r} migration — breaking formodal.js+stats.jsaggregateTeams, add a backward-compatible reader;decidedIn; backfillstats),teams.json(ranking/wcDebut/confederation),stadiums.json(lat/lng). Light up records: attendance, discipline/fair-play, ranking upsets, confederation performance, distance. SCHEDULE LATE — conflicts with master's dailyresults.jsonrefreshes. - Stage H — Layer 3 players.
players.json+player-events.json+awards.json(+ optionalkeeper-stats.json). Top-scorers podium, assists/cards/saves chips, awards block, Squad of the Tournament, Teams/Players toggle in the comparator (the deferred half of Stage F), goal-time records. Relative photo paths (gotcha #7). - Stage I — Layer 4 editorial.
curiosities.json(bilingual EN+PT) +all-time-baselines.json; editorial record-cards + "this Cup vs history" panel. - Stage J (round 2) — polish over the NEW G/H/I features. Repeat the audit on the added sections (a11y/responsive/perf, Lighthouse, EN/PT review) + README refresh.
8. Bracket redesign (2026-07-03, spec settled via /grill-me — see project-memory)
Two switchable chart layouts (wallchart default + radial) + mobile round pager; stadium-night art direction; built directly on master, one approval gate per step.
Step 1 — Foundation + wallchart: center-out layout engine ((2026-07-03)computeWallchartLayout()), SVG connectors + path highlight, stadium-night backdrop, tiered cards with microlines, fit-to-chart zoom (fit = "100%"), sim/challenge/share preservedStep 2 — Mobile round pager (default ≤767px) + view-toggle infrastructure(2026-07-03; reworked same day per user feedback: button navigation only — scroll-snap swiping removed — and max 2 columns on desktop)Step 3 — Radial layout (second chart view on the toggle)(2026-07-03; redesigned to the user's reference image: circular flag tokens on rings + trophy center = "orbit" view, gold real / dashed-blue sim route lines, tooltips for names/scores)- Step 4 — Champion celebration (gold real / blue sim), polish pass (a11y/i18n/reduced-motion),
APP_VERSION→ v1.1.0, README note
Quick final checklist
[x] All 104 matches load from JSON
[x] Standings + bracket fully derived from results.json
[x] Simulation works and survives reload (localStorage)
[x] GitHub Pages ready (all paths relative — verified; actual deploy pending)
[x] Mobile: bracket scroll + zoom + drag
[x] JS < 300KB (74 KB measured) [ ] Lighthouse > 90 (run after deploy)
[x] EN/PT toggle covers every UI string