A competitive multiplayer interview game where players battle through behavioural questions, follow-ups, and technical challenges to prove their skills.
CodeJam25/
├── frontend/ # React + TypeScript + Vite
│ ├── src/
│ │ ├── pages/
│ │ │ ├── onboarding/ # Landing, lobby creation/join
│ │ │ └── game-phase/ # Tutorial, rounds, scoring
│ │ ├── components/
│ │ ├── hooks/
│ │ └── styles/
│ └── package.json
├── backend/ # FastAPI + WebSocket
│ ├── app/
│ │ ├── llm/ # AI question generation
│ │ └── main.py
│ └── requirements.txt
└── README.md
- Node.js 18+ (for frontend)
- Python 3.11+ (for backend)
- npm or yarn
cd frontend
npm install
npm run devFrontend runs on http://localhost:5173
cd backend
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
python main.pyBackend runs on http://localhost:8000
-
Landing Page (
/landingor/landing-v1)- Purple "?" button (top-left): View tutorial in standalone mode
- Blue "Start Game" button: Create a lobby
-
Lobby Creation (
/lobby-creation)- Enter player name and job title
- System generates unique lobby code
- Navigate to waiting room
-
Lobby Waiting Room (
/lobby-waiting)- Share lobby code with opponent
- Second player joins via
/lobby-join/:lobbyId - Host starts game when ready
-
Tutorial (
/tutorial)- In Lobby Context: Auto-plays tutorial slides (5 steps), auto-advances every second, then navigates to Round Start Counter
- Standalone (from Landing): Manual navigation with "Next" and "Back to Main Menu" buttons
-
Round Start Counter (
/round-start-counter/:type)- 60-second synchronized countdown
- Displays round type (behavioural/technical)
- Auto-navigates to first question
-
Behavioural Round
- Question Display (
/behavioural-question): 30s to read question, auto-navigates to answer phase - Answer Phase (
/behavioural-answer): 60s to type answer - Follow-up Question: Cycle repeats with AI-generated follow-up
- After both questions answered, navigate to
/current-score
- Question Display (
-
Technical Round (Planned)
- Theory questions (
/technical-theory) - Practical challenges (
/technical-practical)
- Theory questions (
-
Quick Fire Round (
/quickfire-round)- 10 rapid-fire questions
- Speed and accuracy scoring
-
Scoring & Results (
/current-score)- AI evaluates answers
- Displays round scores
- Transitions to next round or winner screen
-
Winner Screen (
/win-lose)- Final scores
- Declared winner
- Navigate to
http://localhost:5173/landing-v1 - Click purple "?" button in top-left
- Expected: Tutorial loads with manual "Next" and "Back to Main Menu" buttons
- Click "Next" to advance through slides
- Click "Back to Main Menu" to return to landing page
- Pass Criteria: No auto-advance, no navigation to round start, can return to landing
- Navigate to
http://localhost:5173/landing-v1 - Click "Start Game" button
- Enter player details, create lobby
- Have second player join via lobby code
- Host clicks "Start Game"
- Expected: Tutorial auto-plays through 5 slides, advances every ~1 second
- After final slide, auto-navigates to
/round-start-counter/behavioural - Pass Criteria: Auto-advance works, navigates to round start, no manual controls visible
- Complete lobby setup and tutorial (Test 2)
- Wait for 60s countdown on Round Start Counter
- Expected: Auto-navigate to
/behavioural-question - Question displays for 30s, then auto-navigates to
/behavioural-answer - Type answer within 60s, click "Submit"
- Expected: Shows "Waiting for other players..." if opponent hasn't submitted
- Once both submit, navigate to follow-up question
- After follow-up answered, navigate to
/current-score - Pass Criteria: Timers sync, navigation works, wait states handled
- Open two browser windows
- Create lobby in Window 1, join from Window 2
- Start game from Window 1
- Expected: Both windows show tutorial simultaneously
- Tutorial advances in sync
- Both navigate to round start at same time
- Pass Criteria: All timers and transitions synchronized across clients
- Navigate to
http://localhost:5173/landing-v1 - Expected:
- Yellow sticky note with "HIRE OR FIRE" (green/orange letters)
- Black "INTERVIEW BATTLE" subtitle
- Blue "Start Game" button
- Purple "?" tutorial button (80x80px square, giant "?")
- No emojis visible
- Thick black borders and hard shadows
- Pass Criteria: Matches design spec, no layout issues on desktop/mobile
- ✅ Landing page redesign (LandingV1)
- ✅ Lobby creation and joining
- ✅ WebSocket real-time synchronization
- ✅ Tutorial (standalone + in-lobby modes)
- ✅ Round Start Counter with countdown
- ✅ Behavioural Question & Answer flow
- ✅ Question/Answer timer synchronization
- ✅ Follow-up question handling
- 🚧 Technical rounds (planned)
- 🚧 Quick Fire round (UI exists, integration pending)
- 🚧 AI scoring integration
- 🚧 Analytics dashboard
All pages use a consistent design language:
- Classes:
game-bg,game-paper,game-title,game-label-text,game-sharp,game-shadow-hard-lg,game-block-blue/green/yellow - Colors: Green (#138a36), Orange (#ff6600), Blue (CSS var), Purple (#9966ff), Yellow (#ffe63b)
- Borders: Thick (6-10px), black (#000)
- Shadows: Hard drop shadows (8-12px offsets)
- useLobby: Lobby ID, player ID, lobby details
- useGameSync: Game state, timers, submitted players, phase tracking
- useGameFlow: Submit answers, navigation helpers
- useLobbyWebSocket: Real-time updates, synchronization
| Route | Component | Purpose |
|---|---|---|
/landing |
Landing | Original landing page |
/landing-v1 |
LandingV1 | Redesigned landing (new) |
/lobby-creation |
LobbyCreation | Create new lobby |
/lobby-join/:lobbyId? |
LobbyJoin | Join existing lobby |
/lobby-waiting |
LobbyWaitingRoomPage | Pre-game waiting room |
/tutorial |
Tutorial | Game instructions |
/round-start-counter/:type |
RoundStartCounter | Countdown before rounds |
/behavioural-question |
BehaviouralQuestion | Display question (30s) |
/behavioural-answer |
BehaviouralAnswer | Answer input (60s) |
/technical-theory |
TechnicalTheory | Theory questions |
/technical-practical |
TechnicalPractical | Practical challenges |
/quickfire-round |
QuickFireRound | Rapid-fire questions |
/current-score |
CurrentScore | Round scoring |
/win-lose |
WinLose | Final results |
/analytics |
Analytics | Game analytics |
- Tutorial WebSocket messages may not be fully implemented on backend
- Technical rounds UI not yet implemented
- AI scoring integration pending
- Mobile responsiveness needs testing on all pages
- Create feature branch from
main - Make changes and test locally
- Open PR with description of changes
- Ensure no lint/compile errors before merging
CodeJam25 - Internal Project