A voice-based interview practice app. Talk to an AI interviewer in real time, then get structured written feedback on your performance.
Built on the OpenAI Realtime API for the live interview, and GPT-5.1 for post-interview grading.
- Paste a job description, pick an interview type (behavioral, technical, system design, etc.), style, and duration.
- Click start — the app opens a WebRTC session with the Realtime API and an AI interviewer begins a live voice conversation.
- When time runs out, the full transcript is graded by GPT-5.1 against the job description and you get structured feedback (strengths, weaknesses, suggestions, a score).
- Retry the same interview, start a new one, or export the transcript.
No database — sessions are ephemeral and live entirely in the browser.
The Realtime API bills per minute of audio in and out, and its not cheap. A typical interview might run from 15 to 50 cents depending on length. See OpenAI pricing for current rates. If you're cost-conscious, setting a monthly usage cap in your OpenAI billing dashboard is a good idea.
Prereqs:
- Node.js 20+
- An OpenAI API key with access to the Realtime API (and some credit loaded)
git clone https://github.com/<you>/realtime-interview-practice.git
cd realtime-interview-practice
npm install
cp .env.example .env.local
# edit .env.local and paste your OPENAI_API_KEY
npm run devOpen http://localhost:3000. Grant microphone permission when prompted.
- Next.js 16 + React 19 + TypeScript
- OpenAI Realtime API over WebRTC for the live voice interview (server VAD)
- OpenAI GPT-5.1 with structured outputs for grading
- Tailwind CSS v4 for styling
A single OPENAI_API_KEY powers both the Realtime session and the grader.
Optional video interviewer: set HEYGEN_API_KEY (plus HEYGEN_SANDBOX=true for
free dev sessions) to render a lip-synced HeyGen LiveAvatar
instead of the orb. Avatars are mapped per interview type in the heygen session
route; HEYGEN_AVATAR_ID overrides the map with a single avatar. Without a key,
the app runs voice-only.
npm run dev # Turbopack dev server
npm run build # production build
npm run lint # ESLintThere's a transcript-grading smoke test at scripts/test-grade.sh — run the dev server first, then execute the script to hit /api/grade with a fake transcript.
Issues and PRs welcome. This started as a personal project; if you find it useful or want to extend it, feel free to open an issue first to discuss.
MIT — see LICENSE.

