AyoubBenziza
2fce63530b
feat(quiz): show per-player answer status during the round
...
- voteAck now carries `voted` (playerIds who validated) — never their answer,
so no leak; the count/total stay for the progress text
- PlayerCards show a green "Prêt" check for players who answered and a
pulsing "en attente" dot for those who haven't, during in_round only
- score stays visible on the cards alongside the status
- engine test updated for the new voteAck shape
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 10:30:03 +02:00
AyoubBenziza
5cc9113b8c
feat(quiz): quiz game mode end-to-end (server mode + playable client UI)
...
Server:
- quiz mode (GameRound): in-memory FR question bank (mcq + truefalse),
per-room anti-repeat, first-vote lock, score = base + speed bonus ∝ time
left; registered via registerRound, loaded at startup
- shared: typed quiz payloads (QuizQuestionPayload / reveal truth / result)
- tests: quiz scoring, vote lock, bounds, reveal (bun test)
Client:
- room store handles round:start / voteAck / reveal / game:end
- RoomPage dispatches by status: lobby (host start controls) → quiz view
(question, countdown, vote, reveal + scoreboard) → game-end view
- replaces standalone lobby page
Roadmap V1 step 4. Verified end-to-end over the wire (start→vote→reveal→
score→next round→game:end, no answer leaked, anti-repeat works).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 15:43:17 +02:00
AyoubBenziza
9ed3b8a4cb
feat(server): generic game engine — GameRound interface + orchestration loop
...
- game/round.ts: GameRound contract (start/submitAnswer/reveal/score) +
RoundContext + RoomGameController (decouples room from engine)
- game/registry.ts: register/createRound — adding a mode = one registerRound
- game/engine.ts: server-authoritative orchestration. Per round:
start → broadcast round:start → wait (timer OR all eligible voted) →
reveal → apply score deltas → score:update; then game:end. DJ counts as
eligible voter; round ends on first condition met.
- handlers: game:start (host-only, validates rounds/modes) + round:vote
wired to the engine
- shared: add game:start client event
- engine.test.ts: covers both end conditions + voteAck (bun test)
- turbo/root: add test task
Roadmap V1 step 3. No UI yet — concrete quiz mode + client come in step 4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 15:29:49 +02:00