KeyTrace is a web app for practicing coding interviews. Users solve problems in a shared, browser-based code editor, problems can be solved either alone, with a friend or with a tutor that act as an interviewer. Every Keystroke is recorded, so after a session is done, the user can retrace their steps and watch exactly how they solved their problem to find their weaknesses, just like how athletes review game footage.
- Create a session room and share it with a link
- Live shared code editor with real-time cursors
- Built-in practice problems, or add your own
- Run code in a secure sandbox with shared output
- Every keystroke recorded with timestamps
- Replay sessions with play, pause, speed control and scrubbing
- User accounts and saved session history
- Countdown timer
- Built-in KeyTrace AI that analyzes performance
- Session breakdown: time spent reading, coding, and debugging
- paste detection for large blocks of code
- room chat
- Frontend: React, TypeScript, Monaco Editor
- Backend: Java, Spring Boot, WebSockets
- Database: PostgreSQL
- Code Execution: Docker (sandboxed containers)
- Testing: JUnit, Testcontainers, Playwright
- CI/CD: GitHub Actions
- Deployment: AWS (planned)
- Real-time shared editor (Spring Boot WebSockets + React/Monaco)
- Rooms with shareable links
- "New Room" button with random room IDs
- Late joiners receive current code
- Keystroke recording with timestamps
- Session replay with timeline slider, play/pause and scrubbing
- End session (ends for everyone in the room, switches to replay)
- Structured JSON messages with a
typefield - Live player count
- Refactor room state into a
Roomclass - Rooms kept after everyone leaves, so sessions can be replayed
- Session modes: Solo, Interview, Group
- Player limits per mode (room full / room not found)
- Home screen to choose a mode
- Host role via host token (only the host can end the session)
- Unit tests (JUnit + Mockito) for room and handler logic
- GitHub Actions CI
- PostgreSQL persistence (rooms and recordings survive restarts)
- Refactor: split room logic into a
RoomServiceand organize code into packages - Integration tests against a real PostgreSQL database with Testcontainers
- Run code in a sandboxed Docker container
- Problem panel with built-in practice problems
- User accounts (login)
- Saved session history
- Host linked to the logged-in creator (guests can still join by link)
- Interviewer and candidate roles
- Private interviewer notes
- Session timer
- Playwright tests for the main flows (create room, host vs participant, live sync, ending a session, running code)
- Run Playwright tests in GitHub Actions
- Deploy to AWS
- Store edits as changes instead of full snapshots (smaller recordings)
- Backend endpoint to fetch a single moment via binary search (for long sessions)
- Conflict-free concurrent editing (sync engine) and live cursors
- Session insights: time spent, longest pauses, paste detection
- Room chat