AyoubBenziza
|
98e06b8206
|
feat(blindtest): YouTube blindtest mode with neutral DJ + synced playback
Server:
- BlindtestRound (GameRound): neutral DJ pick (never the contributor),
per-mode scoring (title_artist fuzzy / who_added / mixed), reveal exposes
title/artist/submittedBy; contributor doesn't score on own track
- track submission: blindtest:submitTrack validates via YouTube oEmbed
(exists + embeddable) and captures title/artist; per-player quota; dedup
- DJ media relay: media:control (DJ only) → media:sync broadcast (engine)
- per-room shuffled track pool; submissions count in room snapshot
- shared: blindtest payloads, gameType/tracksPerPlayer in settings
- tests: DJ neutrality, scoring per mode, fuzzy match, youtube id extraction
Client:
- YouTube IFrame player (hidden behind a spinning disc — audio only, no
title leak), DJ transport (play/pause/restart), non-DJ follows media:sync
with latency compensation
- lobby: game-type switch (Quiz/Blindtest), blindtest config + per-player
track submission UI
- vote forms per mode; reveal card with title/artist/who-added
Roadmap V1 step 6 (highest technical risk). Server flow verified end-to-end
over the wire (submit→start→DJ relay→vote→reveal→score).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-10 13:02:28 +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
|
56115b5a9f
|
feat(shared,server): scaffold @nerdware/shared types + Fastify/Socket.IO server
- packages/shared (@nerdware/shared): domain model (Room, Player, Settings,
Round, votes, scores) + fully typed Socket.IO events, consumed as source
- apps/server (@nerdware/server): Fastify boot + /health, typed Socket.IO
attached to the HTTP server, env config, graceful shutdown
- gitignore: allow .env.example to be committed
Roadmap V1 step 1. Room logic (room:create/join) comes next.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-08 14:55:52 +02:00 |
|