diff --git a/packages/client/src/routes/play.$roomCode.bingo.tsx b/packages/client/src/routes/play.$roomCode.bingo.tsx
new file mode 100644
index 0000000..55e1c64
--- /dev/null
+++ b/packages/client/src/routes/play.$roomCode.bingo.tsx
@@ -0,0 +1,15 @@
+import { createFileRoute } from "@tanstack/react-router"
+import { useRoomStore } from "@/stores/room-store"
+import { BingoTab } from "@/components/bingo-tab"
+
+export const Route = createFileRoute("/play/$roomCode/bingo")({
+ component: PlayBingo,
+})
+
+function PlayBingo() {
+ const { room, gameState, send } = useRoomStore()
+
+ if (!room || !gameState) return null
+
+ return
+}
diff --git a/packages/client/src/routes/play.$roomCode.board.tsx b/packages/client/src/routes/play.$roomCode.board.tsx
new file mode 100644
index 0000000..fc16fdc
--- /dev/null
+++ b/packages/client/src/routes/play.$roomCode.board.tsx
@@ -0,0 +1,15 @@
+import { createFileRoute } from "@tanstack/react-router"
+import { useRoomStore } from "@/stores/room-store"
+import { BoardTab } from "@/components/board-tab"
+
+export const Route = createFileRoute("/play/$roomCode/board")({
+ component: PlayBoard,
+})
+
+function PlayBoard() {
+ const { room, gameState } = useRoomStore()
+
+ if (!room || !gameState) return null
+
+ return
+}
diff --git a/packages/client/src/routes/play.$roomCode.game.tsx b/packages/client/src/routes/play.$roomCode.game.tsx
new file mode 100644
index 0000000..916463a
--- /dev/null
+++ b/packages/client/src/routes/play.$roomCode.game.tsx
@@ -0,0 +1,15 @@
+import { createFileRoute } from "@tanstack/react-router"
+import { useRoomStore } from "@/stores/room-store"
+import { GameTab } from "@/components/game-tab"
+
+export const Route = createFileRoute("/play/$roomCode/game")({
+ component: PlayGame,
+})
+
+function PlayGame() {
+ const { room, gameState, send } = useRoomStore()
+
+ if (!room || !gameState) return null
+
+ return
+}
diff --git a/packages/client/src/routes/play.$roomCode.index.tsx b/packages/client/src/routes/play.$roomCode.index.tsx
new file mode 100644
index 0000000..e1881a6
--- /dev/null
+++ b/packages/client/src/routes/play.$roomCode.index.tsx
@@ -0,0 +1,7 @@
+import { createFileRoute, redirect } from "@tanstack/react-router"
+
+export const Route = createFileRoute("/play/$roomCode/")({
+ beforeLoad: ({ params }) => {
+ throw redirect({ to: "/play/$roomCode/game", params })
+ },
+})
diff --git a/packages/client/src/routes/play.$roomCode.tsx b/packages/client/src/routes/play.$roomCode.tsx
index fd6b00f..ce27ee0 100644
--- a/packages/client/src/routes/play.$roomCode.tsx
+++ b/packages/client/src/routes/play.$roomCode.tsx
@@ -2,25 +2,19 @@ import { useEffect, useRef, useState } from "react"
import { createFileRoute } from "@tanstack/react-router"
import { useWebSocket } from "@/hooks/use-websocket"
import { useRoomStore } from "@/stores/room-store"
-import { PlayerList } from "@/components/player-list"
-import { PredictionsForm } from "@/components/predictions-form"
-import { JuryVoting } from "@/components/jury-voting"
-import { BingoCard } from "@/components/bingo-card"
-import { Leaderboard } from "@/components/leaderboard"
-import { QuizBuzzer } from "@/components/quiz-buzzer"
-import { RoomHeader } from "@/components/room-header"
+import { RoomLayout } from "@/components/room-layout"
+import { BottomNav } from "@/components/bottom-nav"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
-import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
export const Route = createFileRoute("/play/$roomCode")({
- component: PlayerView,
+ component: PlayLayout,
})
-function PlayerView() {
+function PlayLayout() {
const { roomCode } = Route.useParams()
const { send } = useWebSocket(roomCode)
- const { room, mySessionId, connectionStatus, gameState } = useRoomStore()
+ const { room, mySessionId, connectionStatus } = useRoomStore()
const joinSentRef = useRef(false)
const [manualName, setManualName] = useState("")
@@ -85,91 +79,9 @@ function PlayerView() {
}
return (
-
-
-
- {gameState && (room.currentAct === "lobby" || room.currentAct === "pre-show") && (
-
-
- send({ type: "submit_prediction", ...prediction })
- }
- />
-
- )}
-
- {gameState && room.currentAct === "live-event" && (
-
-
- Jury
- Bingo
-
-
- {gameState.currentJuryRound ? (
- send({ type: "submit_jury_vote", rating })}
- />
- ) : (
-
- Waiting for host to open voting...
-
- )}
-
-
- {gameState.myBingoCard ? (
- send({ type: "tap_bingo_square", tropeId })}
- />
- ) : (
-
- No bingo card yet
-
- )}
-
-
- )}
-
- {gameState && (room.currentAct === "scoring" || room.currentAct === "ended") && gameState.myPrediction && (
-
{}}
- />
- )}
-
- {gameState && room.currentAct === "scoring" && gameState.currentQuizQuestion && (
- send({ type: "buzz" })}
- />
- )}
-
- {gameState && room.currentAct === "scoring" && (
-
- )}
-
- {room.currentAct === "ended" && (
-
-
The party has ended. Thanks for playing!
- {gameState &&
}
-
- )}
-
-
-
-
+ <>
+
+
+ >
)
}