- end screen: wider container (max-w-4xl), podium/awards stay centered, and the
two long sections (musiques + récap des manches) sit side-by-side on desktop
- back-office: 2-column layout (form | questions list) on desktop, wider
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Mixed settings fix:
- RoundConfig carries a `pool` hint (quiz | image) per quiz round; lobby shows
a separate count for each selected sub-mode (Quiz, Images) and the blindtest
config — not just the quiz one
- server pool composes the queue per round's pool (quiz formats vs image_reveal),
in order; verified e2e (2 quiz + 2 images honored)
Awards:
- "⚡ Le plus rapide" — derived client-side from the speed bonus baked into
quiz/image points (points above the 100 base on correct answers)
Desktop restyle:
- room page gets an ambient halo background and a responsive container
(lobby max-w-3xl with a 2-column players|settings grid, game/end max-w-lg)
- game/end views widened to max-w-lg
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- FunStats: award badges from the recap data — 🎯 Sans-faute, 🧠 Le cerveau
(most correct), 🦹 Roi de la tromperie (blindtest decoy points), 🪨 Le boulet
(0 correct). Shown with player avatars.
- "Copier les résultats" button: copies ranking + per-round answers to clipboard
- avatars next to each player in the round-by-round recap
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- per round, answers sorted by points (then correct first)
- the local player's line is bolded with "(toi)"
- per-round "✓ X" badge showing how many got it right
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- shared: RoundRecap gains answers[] (RoundPlayerAnswer: text + correct)
- server: quiz/blindtest recap() build per-player answers (choice text / free
text / blindtest guess formatted by mode), with correctness
- client: recap lists each player's answer per round, green/red by correctness,
with their points when they scored
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- shared: RoundRecap (+ scorers); game:end carries recap[]
- server: GameRound.recap(ctx) per mode (quiz: prompt + correct answer +
image; blindtest: "title — artist" + addedBy + links); engine accumulates a
history per round (with that round's scorers from the score deltas) and sends
it at game:end
- client: GameEndView shows a collapsible "Récapitulatif des manches" — each
round's label, answer, media thumbnail (image/youtube) and who scored
- engine test dummy round implements recap
Verified e2e: game:end recap lists every round with answer + scorers.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- lib/sound: plays src/assets/sounds/victory.{mp3,ogg,wav} if present,
auto-detected via import.meta.glob; no-op when absent
- played alongside the confetti when the end screen appears
- README documenting where to drop the file
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
canvas-confetti burst (center pop + side jets) fired once when the game-end
screen appears.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add @icons-pack/react-simple-icons for brand logos lucide doesn't provide.
End-screen track recap now uses official SiSpotify (green) and SiYoutube (red)
icons instead of generic ones. Lucide stays for UI icons.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
From the blindtest tracks revealed at game end:
- per-track Spotify search link (green button) built from "title artist"
- "Playlist" button copies the whole tracklist ("title — artist" per line)
to the clipboard for pasting into Spotify
- YouTube open link kept alongside
Pure client-side, derived from the tracks already sent in game:end.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- game:end now carries the played blindtest tracks (title/artist/youtubeId/
url/submittedByName); the end screen lists them as cards with a YouTube
open link so players can recover/export the songs
- who_added vote no longer lets you pick yourself (filtered out)
- home page: animated halo, floating geek emojis, springy gradient title,
hover/tap on buttons (Framer Motion) + Lucide icons
- lobby settings get Lucide icons (game type, quiz, blindtest mode, tracks,
start)
Verified e2e: game:end includes the track list with links.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Return to lobby (replay without recreating the room):
- lobby:return (host): reset to lobby, scores to 0, keep players + tracks
- client: end screen has "Rejouer" (host) + "Quitter"; store clears transient
game state whenever the room goes back to lobby
Contributor has nothing to input:
- round:start carries a private `mine: true` to the contributor only (via
RoundStart.secretPlayerId targeted emit); they're excluded from eligible
voters. Client shows a "fais-les se tromper" card instead of the vote form.
Editable track submission:
- submitTrack ack returns trackId + youtubeId; new blindtest:removeTrack
- lobby shows submitted tracks as cards (YouTube thumbnail + title) with delete
Verified e2e (3 players): add/remove, private mine flag, return-to-lobby reset.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- GameEndView: top-3 podium — 2nd left, champion center (taller), 3rd right,
with gold/silver/bronze pedestals, staggered rise-in (climax on the champion),
crown + pulsing gold glow kept on #1; ranks 4+ listed below
- bigger avatars where they read too small: lobby (size-7→11) and in-game
player cards (size-9→14, slightly wider cards)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Avatar component using DiceBear 9.x lorelei, seeded by the player name
(stable, recognizable across screens)
- shown in the lobby list, the in-game player cards (gold ring on leader),
and the final leaderboard (large on the winner, small on runners-up)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- dedicated winner card: gold border, gold gradient, pulsing gold glow,
spring scale-in, and a Crown that drops & bounces in (Framer Motion)
- champion label + big gold score; runners-up listed below from rank 2
- drop the generic Scoreboard component (now unused)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>