mancala/docs/specs/game-history/tasks.md
Halit Aksoy a65662f695 feat(frontend): show ongoing, live, popular and recent games on the home page
- Banner for the user's game in progress with a Continue button
- Live games as cards with the real board, updated over WebSocket; the
  most watched finished games when nothing is live
- The user's last 3 games, from their side of the board, with the result
  as they would say it
- The lobby offers to continue the game in progress when a new one is
  refused
- Spectators register once connected and identified, and again after a
  reconnect, so they are counted
- The backend includes games that ended but are not saved yet in /game/:id
  and the lists
2026-10-16 00:27:06 +03:00

2.0 KiB

Game history and live games: tasks

Work through the tasks in order; each ends with its tests passing and a commit. Tick a task when it is committed.

  • 1. Infrastructure: postgres service with init script for the keycloak and mancala databases (replacing keycloak-db), valkey service, backend DATABASE_URL / VALKEY_URL, .env variables, README.
  • 2. Core types and history helpers: PlayerSummary, MoveRecord, summaries, GameRecord, TURN_TIMEOUT_MS, new channels, offlineSince; getInitialBoard, getBoardAfterMove, describeMove, createGameAtMove with unit tests; localized strings.
  • 3. Backend fixes: remove spectators on disconnect, remove finished games from memory, send the connection info once at game start.
  • 4. Postgres repository: pool, migration runner, games and game_players, PostgresGameHistoryRepository (save, get, recent for user, popular), integration tests.
  • 5. Valkey store: live game snapshots and restore, pending saves, cache; integration tests.
  • 6. Game lifecycle: start and move times, spectator counters, outcomes (completed, left, timeout, inactive), timeout watcher, offlineSince, rejecting a new game while playing, saving with retry, restore on startup; unit tests.
  • 7. API: public ids, Bearer auth middleware, /games/me/active, /games/me, /games/popular, /game/:id for finished games, live games channel with throttled push; tests.
  • 8. Board size: --board-unit in BoardView, PitView, StoreView, StoneView; width prop.
  • 9. Home page: ActiveGameBanner, LiveGamesSection with live updates, RecentGamesSection; lobby rejection message.
  • 10. Live game history: MoveList, review mode with ReviewBanner and keyboard, timeout countdown.
  • 11. Replay: ReplayView with controls, speed, timeline, ?move=, own-side orientation, duration.
  • 12. End to end and docs: Chrome tests from design.md, README and TODO.md updates.