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>
19 lines
544 B
TypeScript
19 lines
544 B
TypeScript
import { Route, Switch } from "wouter"
|
|
import { HomePage } from "@/pages/home"
|
|
import { RoomPage } from "@/pages/room"
|
|
|
|
export function App() {
|
|
return (
|
|
<Switch>
|
|
<Route path="/" component={HomePage} />
|
|
<Route path="/room/:code">
|
|
{(params) => <RoomPage code={params.code.toUpperCase()} />}
|
|
</Route>
|
|
<Route>
|
|
<div className="flex min-h-svh items-center justify-center p-6">
|
|
<p className="text-muted-foreground text-sm">Page introuvable.</p>
|
|
</div>
|
|
</Route>
|
|
</Switch>
|
|
)
|
|
}
|