AI-powered interview coaching platform. A 3D avatar conducts mock interviews using real-time voice — your mic audio is streamed via WebRTC to a Node.js backend that runs speech-to-text (Whisper), generates responses (GPT-4o-mini), and speaks back via text-to-speech, all while driving lip-sync visemes on the avatar.
- Node.js >= 18 (tested on v25)
- npm (comes with Node)
- An OpenAI API key (optional for basic testing — the backend falls back to a test mode without one, but STT/LLM/TTS won't work)
case.ly/
frontend/ # Next.js app — 3D avatar + WebRTC client
backend/ # Express + WebSocket signaling + WebRTC server
cd backend
npm installCreate a .env file in backend/:
OPENAI_API_KEY=sk-your-key-here
If you skip this, the backend will still start but will use placeholder responses instead of real STT/LLM/TTS.
Start the server:
npm run devThis runs on http://localhost:3001 (WebSocket at ws://localhost:3001/ws). You can change the port with the PORT env var.
cd frontend
npm install
npm run devThis runs on http://localhost:3000 by default (Next.js dev server).
- Open http://localhost:3000/interview in your browser
- Click Start interview — your browser will ask for microphone permission
- Speak naturally — after 3 seconds of speech followed by 3 seconds of silence, the backend will:
- Transcribe your speech (Whisper)
- Generate a coaching response (GPT-4o-mini)
- Speak it back (TTS) while the avatar lip-syncs
- The cycle repeats — speak again after the avatar finishes
- Click Disconnect to end the session
- Click Download recording to save a
.webmfile of your mic audio
| Variable | Where | Required | Description |
|---|---|---|---|
OPENAI_API_KEY |
backend/.env |
No (but needed for real AI) | OpenAI API key for Whisper, GPT-4o-mini, and TTS |
PORT |
backend/.env |
No | Backend port (default: 3001) |
| Command | Description |
|---|---|
npm run dev |
Start with nodemon (auto-restart on changes) |
npm start |
Start without auto-restart |
npm run run |
Install deps + start |
| Command | Description |
|---|---|
npm run dev |
Next.js dev server with hot reload |
npm run build |
Production build |
npm start |
Serve production build |
npm run lint |
Run ESLint |
- Backend
npm installfails onwrtc— This project uses@roamhq/wrtc(a maintained fork). If you see errors about the originalwrtcpackage, make surepackage.jsonlists@roamhq/wrtc, notwrtc. - No audio response from avatar — Check that
OPENAI_API_KEYis set inbackend/.env. Without it the backend runs in test mode (visemes only, no audio). - WebSocket connection refused — Make sure the backend is running on port 3001 before opening the frontend.
- Microphone not working — Ensure you're accessing the frontend over
localhost(not a raw IP), as browsers require a secure context forgetUserMedia.