How oddvar112/02162-software-engineering-2-fall-2026 works
RoboRally is a Next.js browser game with Supabase-backed authentication and lobby browsing, plus a separate in-memory programming-phase demo. The demo workflow is: open the board, fetch shared state, choose and submit a five-card program, resolve movement, then display and replay execution frames. The graph preserves the documented lobby and authentication branches and separates game rules from the board renderer. The demo engine and major UI calls are shown in excerpts or the source index; unsampled lobby and integration details are kept limited to documented or indexed relationships.
Main entry points: server.ts Supabase clients · page.tsx Home page · game-state-view.tsx Game state view · list-lobbies.tsx Lobby listing
Components 29
App entry
- Home page
app/page.tsx - Lobby browse page
app/lobbies/page.tsx - Lobby room page
app/lobbies/[lobbyId]/page.tsx - Demo game page
app/game/page.tsx - Match page
app/games/[gameId]/page.tsx
Identity
- Auth pages
app/auth/login/page.tsx - Auth forms
components/auth/login-form.tsx - Session controls
components/auth/auth-button.tsx - Auth confirmation
app/auth/confirm/route.ts - Route rules
lib/routes.ts
Lobby experience
- Lobby listing
components/lobbies/list-lobbies.tsx - Create lobby
components/lobbies/create-lobby-button.tsx - Lobby membership
components/lobbies/leave-lobby-button.tsx - Lobby room view
components/lobbies/lobby-content.tsx - Lobby realtime
components/lobbies/lobby-realtime.tsx
Demo gameplay
- Game state view
components/game/game-state-view.tsx - Game state API
app/api/game-state/route.ts - Program editor
components/game/program-editor.tsx - Playback hook
components/game/use-game-playback.ts - 3D board renderer
components/game/board/game-board.tsx - Robot model
components/game/board/robot-model.tsx - Program resolution
lib/game/programming.ts - Mock game state
lib/game/mock-game-state.ts - Board model
lib/game/game-model.ts - Board validation
lib/board.ts
Shared platform
- Supabase clients
lib/supabase/server.ts - Browser client
lib/supabase/client.ts - Supabase
Other components
- Player
Connections 36
- Player → Home page: opens
app/page.tsx - Home page → Create lobby: offers creation
app/page.tsx - Home page → Lobby browse page: links to browse
app/page.tsx - Home page → Demo game page: links to demo
app/page.tsx - Home page → Session controls: shows session
app/page.tsx - Player → Auth pages: signs in
app/auth/login/page.tsx - Auth pages → Auth forms: renders
app/auth/login/page.tsx - Auth forms → Browser client: authenticates
components/auth/login-form.tsx - Session controls → Supabase clients: checks claims
components/auth/auth-button.tsx - Auth confirmation → Supabase clients: confirms session
app/auth/confirm/route.ts - Auth confirmation → Route rules: uses return paths
app/auth/confirm/route.ts - Player → Lobby browse page: browses
app/lobbies/page.tsx - Lobby browse page → Lobby listing: renders
app/lobbies/page.tsx - Lobby listing → Supabase clients: reads lobbies
components/lobbies/list-lobbies.tsx - Lobby listing → Lobby membership: offers leave
components/lobbies/list-lobbies.tsx - Lobby listing → Lobby room page: joins room
- Lobby room page → Lobby room view: renders
app/lobbies/[lobbyId]/page.tsx - Lobby room view → Supabase clients: reads room
components/lobbies/lobby-content.tsx - Lobby room view → Lobby membership: offers leave
components/lobbies/lobby-content.tsx - Lobby room view → Lobby realtime: uses updates
components/lobbies/lobby-content.tsx - Create lobby → Browser client: creates lobby
components/lobbies/create-lobby-button.tsx - Demo game page → Game state view: renders
app/game/page.tsx - Game state view → Game state API: fetches state
components/game/game-state-view.tsx - Game state view → Program editor: renders
components/game/game-state-view.tsx - Game state view → Playback hook: uses playback
components/game/game-state-view.tsx - Game state view → 3D board renderer: renders board
components/game/game-state-view.tsx - Game state API → Program resolution: submits programs
app/api/game-state/route.ts - Game state API → Board model: loads model
app/api/game-state/route.ts - Program resolution → Mock game state: creates state
lib/game/programming.ts - Mock game state → Board model: builds from
lib/game/mock-game-state.ts - Mock game state → Board validation: uses board data
lib/game/mock-game-state.ts - 3D board renderer → Robot model: renders robots
components/game/board/game-board.tsx - Player → Match page: opens match
app/games/[gameId]/page.tsx - Match page → Supabase clients: checks server session
- Supabase clients → Supabase: connects
lib/supabase/server.ts - Browser client → Supabase: connects
lib/supabase/client.ts