AI-powered system design interview practice platform
Loadout is an open-source platform that simulates system design interviews. Practice with Flint, an AI interviewer that guides you through real interview scenarios while you draw architecture diagrams in real-time.
- π€ Voice-based AI Interviewer: Natural conversation powered by OpenAI's Realtime API
- π¨ Real-time Diagramming: Draw system architecture with Excalidraw integration
- π Structured Interview Flow: 4 stages covering the complete system design process
- Functional Requirements
- Non-Functional Requirements
- API Design
- System Architecture
- β±οΈ Timed Sessions: 30-minute sessions that simulate real interview pressure
Note: Loadout currently only supports one interview question: "Design Instagram". More questions coming soon!
- Node.js 18+
- npm or pnpm
- OpenAI API key (with Realtime API access)
-
Clone the repository
git clone https://github.com/VC444/loadout.git cd loadout -
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env.local
Edit
.env.localwith your API keys (see Environment Variables) -
Start the development server
npm run dev
Create a .env.local file with the following variables:
| Variable | Description |
|---|---|
NEXT_PUBLIC_OPENAI_API_KEY |
OpenAI API key with Realtime access |
See .env.example for a complete template with instructions.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend β
β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββ β
β β Interview UI β β Excalidraw β β Zustand β β
β β (Next.js) ββββ€ (Diagrams) ββββ€ (State) β β
β ββββββββββ¬ββββββββββ βββββββββββββββββββ βββββββββββββββ β
βββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Voice Agent β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β OpenAI Realtime API β β
β β β’ Voice input/output β β
β β β’ get_excalidraw tool (inspects diagrams) β β
β β β’ Interview flow control β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backend β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β API Routes (Next.js) β β
β β β’ /api/realtime - OpenAI session setup β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| File | Purpose |
|---|---|
utils/voice-agent/prompt.ts |
AI interviewer personality and instructions |
utils/voice-agent/voice-agent.ts |
OpenAI Realtime API session management |
app/interview/page.tsx |
Main interview interface |
utils/zustand/store.ts |
Global state for diagrams and session |
βββ app/ # Next.js App Router
β βββ api/ # API routes
β β βββ realtime/ # OpenAI session setup
β βββ interview/ # Interview pages
β βββ ...
βββ components/ # React components
β βββ ui/ # shadcn/ui components
βββ lib/ # Utilities
βββ utils/
βββ voice-agent/ # AI interviewer logic
βββ zustand/ # State management
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS + shadcn/ui
- AI: OpenAI Realtime API
- Diagrams: Excalidraw
- State: Zustand
# Start dev server (with Turbopack)
npm run dev
# Build for production
npm run build
# Start production server
npm start
# Run linting
npm run lintContributions are welcome! Please read the Contributing Guide for details on how to get started.
This project is licensed under the MIT License - see the LICENSE file for details.
- OpenAI for the Realtime API
- Excalidraw for the amazing diagramming tool
- Vercel for Next.js and hosting
- All contributors who help improve this project
Made with β€οΈ for system design interview preparation