mirror of
https://github.com/LucasKalil-Programador/world-2026-hub.git
synced 2026-07-04 17:41:28 -03:00
Append the Stage A entry to project-memory.md, refresh project-map.md (app.js/stats.js descriptions + optional data layers + branch note), and add the A-J stage tracker to TODO.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
106 lines
5.3 KiB
Markdown
106 lines
5.3 KiB
Markdown
# 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)
|
||
- [ ] Fill `thirdPlaceAssignment` in `bracket-config.json` after group stage ends (~2026-06-27; slot → allowed-groups table in project-memory)
|
||
- [ ] Update `results.json` as the tournament progresses (results updated through match id 17 on 2026-06-16)
|
||
- [ ] Real stadium photos + team flag SVGs in `assets/images/` (10 new-team flags created 2026-06-12 in placeholder style)
|
||
- [ ] **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 + `DATA_VERSION`).
|
||
|
||
---
|
||
|
||
## 7. Stats final screen — `feature/stats-final-screen` (post-Cup release)
|
||
|
||
Full build of `.agents/stats-screen-plan.md` on a feature branch, merged to `master` at the end of
|
||
the Cup. One approval gate before each stage. A–F are buildable from today's data; G/H/I are
|
||
data-blocked (graceful-degradation shell lets the UI land dark until JSON arrives).
|
||
|
||
### 🟢 OPTIONAL (release feature)
|
||
- [x] ~~Stage 0 — branch `feature/stats-final-screen` off `master`~~
|
||
- [x] ~~Stage A — degradation engine + fault-tolerant `loadData` + sticky scrollspy sub-nav + media fallback~~ (2026-06-16)
|
||
- [ ] Stage B — verdict hero (gated on FINAL finished; aggregate-hero fallback) + goals-by-round chart
|
||
- [ ] Stage C — final ranking 1–48 (phase-reached chain), favorite-row highlight, team record cards
|
||
- [ ] Stage D — auto record-cards + "format-48 debuts" band
|
||
- [ ] Stage E — 104-match results archive (accordion by phase, row → modal)
|
||
- [ ] Stage F — team comparator (diverging bars)
|
||
- [ ] Stage G — Layer 2 cheap data (attendance, `cards`→{y,r} migration, decidedIn, coords) — **SCHEDULE LATE**
|
||
- [ ] Stage H — Layer 3 players (`players.json` + `player-events.json` + `awards.json`)
|
||
- [ ] Stage I — Layer 4 editorial (`curiosities.json` + `all-time-baselines.json`)
|
||
- [ ] Stage J — polish (responsive/a11y audit, perf, Lighthouse, `DATA_VERSION` bump, README/i18n)
|
||
|
||
---
|
||
|
||
## 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
|
||
```
|