# 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 - [x] ~~Step 0 β€” Project memory: `.agents/` + auto-memory pointer + `git init`~~ - [x] ~~Step 1 β€” File structure + mock data (48 teams, 12 groups, 104 matches UTC, ~30 stadiums, `bracket-config.json` with null third-place slots, mixed results)~~ - [x] ~~Step 2 β€” Base layout: SPA shell, header + nav, hero (next match + countdown), dashboard cards, `style.css` palette, `app.js` loadData/routing, `storage.js`, `i18n.js` (EN/PT toggle)~~ --- ## 2. Core views ### πŸ”΄ BLOCKER - [x] ~~Step 3 β€” Match schedule: list, filters (date/group/phase/team/stadium), search, sort~~ - [x] ~~Step 4 β€” Group standings computed from results (3/1/0, GD, GF)~~ - [x] ~~Step 5 β€” Stadiums page (cards + matches held)~~ - [x] ~~Step 6 β€” Match detail modal (result, penalties, future-stats placeholder, ARIA)~~ --- ## 3. Bracket ### πŸ”΄ BLOCKER - [x] ~~Step 7 β€” Static bracket: R32 from config, sequential pairing to FINAL, placeholders, `resolveBracketTeams()`~~ - [x] ~~Step 8 β€” Interactions: hover path highlight, animations, wheel/pinch zoom, drag/pan~~ - [x] ~~Step 9 β€” Simulation mode: pick winner + score, propagate rounds, `wc2026_simulation`, reset~~ --- ## 4. Polish & docs ### πŸ”΄ BLOCKER - [x] ~~Step 10 β€” Responsiveness (≀767 / 768–1439 / 1440+), accessibility (ARIA, keyboard, focus, contrast), entry animations~~ ### 🟑 IMPORTANT - [x] ~~Step 11 β€” README (deploy guide, JSON maintenance, `bracket-config.json` how-to) + spec Β§18 acceptance checklist~~ (done after step 12, at user request) --- ## 5. Extra features (complement spec Β§6–10) ### 🟑 IMPORTANT - [x] ~~Step 12a β€” Favorites + "My Matches" filter (`toggleFavorite`, `getFavoriteMatches`, highlights)~~ - [x] ~~Step 12b β€” Timezone toggle "Local / Stadium time" (`wc2026_prefs.timeMode`)~~ - [x] ~~Step 12c β€” `.ics` export (`calendar.js`, CRLF, UTC, 2h duration)~~ ### 🟒 OPTIONAL - [x] ~~Step 12d β€” Bracket challenge score card (`calculateChallengeScore`)~~ - [x] ~~Step 12e β€” Share/import prediction via `?prediction=` base64 link~~ --- ## 6. Post-launch (real data) ### 🟑 IMPORTANT - [x] ~~Replace mock `data/*.json` with real World Cup 2026 data~~ (2026-06-12 β€” full migration + smoke test; see project-memory) - [x] ~~Fill `thirdPlaceAssignment` in `bracket-config.json` after group stage ends~~ (2026-06-28 β€” all 8 slots filled from FIFA's official combination table for thirds B,D,E,F,I,J,K,L β†’ `{1:D,2:F,3:B,4:I,5:E,6:K,7:J,8:L}`; R32 verified vs official bracket) - [ ] Update `results.json` as the tournament progresses (R32 in progress β€” results through match id 76 on 2026-06-30: R32 ids 73–76 finished [74 GER 1–1 PAR pen 3–4, 75 NED 1–1 MAR pen 2–3]; ids 77–88 next) - [x] ~~Real stadium photos + team flag SVGs in `assets/images/`~~ (flag SVGs added 2026-06-18; stadium photos optional) - [ ] **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 - [x] ~~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 excluir `data/*.json` do 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) - [x] ~~Stage 0 β€” branch `feature/stats-final-screen` off `master`~~ - [x] ~~Stage A β€” degradation engine + fault-tolerant `loadData` + sticky scrollspy sub-nav + media fallback~~ - [x] ~~Stage B β€” verdict hero (gated on FINAL finished; aggregate-hero fallback) + goals-by-round chart~~ - [x] ~~Stage C β€” final ranking 1–48 (phase-reached chain), favorite-row highlight, team record cards~~ - [x] ~~Stage D β€” auto record-cards + "format-48 debuts" band~~ - [x] ~~Stage E β€” in-tab results archive~~ β€” **SKIPPED (Option B):** kept the "See all matches β†’ Matches" link; the Matches tab already covers browsing. - [x] ~~Stage F β€” team comparator (diverging bars)~~ β€” teams only; the Teams/Players toggle is deferred to Stage H per graceful degradation. - [x] ~~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 final `DATA_VERSION` bump is moot β€” `DATA_VERSION` removed 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 for `modal.js` + `stats.js` `aggregateTeams`, add a backward-compatible reader; `decidedIn`; backfill `stats`), `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 daily `results.json` refreshes.** - [ ] **Stage H β€” Layer 3 players.** `players.json` + `player-events.json` + `awards.json` (+ optional `keeper-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. --- ## 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 ```