AI Interview Coach
Paste a real job posting, then take a live voice interview against an AI that plays the interviewer.
- Role
- Solo: design, full-stack, AI
- Year
- 2026
- Type
- AI & Agents
- Status
- Completed
The problem
Interview practice is usually generic, but the questions that matter come from the actual posting, the actual company and the people who will be in the room.
What I did
Solo: design, the full-stack build, and the AI work — job analysis, the live voice loop, the coaching tips and the scored report.
Result
A finished product you can run: paste a posting, take a live voice interview, and get a 0–100 report saved to your session history.
- Web app
- Complete and running locally; source on GitHub, not publicly deployed
- 0
- AI providers: Groq for the live call, Claude for the analysis
- 0–100
- score with strengths, improvements and next steps
- 0–15
- questions generated from the posting and your own CV
- 0
- API routes for CV upload, the live call and the report
Watch it run · sound on
On desktop






Overview
A SaaS for interview prep that works from the actual job. You paste a posting and optionally upload your CV, and Claude builds an intelligence report on the role, the company and the people interviewing you.
Then you talk to it. A voice interview runs against an AI playing that interviewer, with Groq streaming the replies fast enough to feel like a conversation and a coaching tip after every answer. When the call ends you get a scored report with specific advice, saved to your session history.
How it fits together
Browser
- Next.js 16 + React 19Built solo
Landing, auth, job analysis, the live call room and reports.
Next.js server
- proxy.ts
JWT route guard on every request.
- Server ActionsBuilt solo
Auth, job analysis and call setup.
- API routesBuilt solo
/resume/upload, /call/transcribe, /call/respond, /call/report.
AI & data
- Anthropic Claude
Job analysis and post-call reports.
- Groq
Whisper speech-to-text and streaming Llama for the live interview.
- PostgreSQL + Prisma
Users, CVs, analyses, calls, transcripts, reports.
How it flows
- 1
Give it the job
Server ActionJob title, description or URL, interview stage, interviewer names and an optional CV.
- 2
Intelligence report
ClaudeRanked topics, company profile, interviewer personas, practice questions and readiness insights.
- 3
Live voice interview
GroqHold to talk: Whisper transcribes, Llama answers as the interviewer, and the browser speaks the reply.
- 4
Coaching as you go
APIEach answer gets a quick tip in the transcript without slowing the call.
- 5
Scored report
ClaudeA 0–100 score with strengths, improvements and next steps, saved to your sessions.
What I built
- 01Job analysis with Claude returns ranked interview topics, a company profile, interviewer personas, 10–15 tailored questions and readiness insights, validated with Zod.
- 02Optional job-post URL: the page is fetched, stripped and added as extra context for the analysis.
- 03Low-latency voice loop: Groq Llama streams the interviewer's reply token by token while the browser speaks it, and Groq Whisper transcribes the candidate's answer.
- 04A non-blocking coaching tip appears after every answer (STAR, specificity, results), so feedback arrives during the call.
- 05Post-call reports score 0–100 with strengths, improvements, detected frameworks and communication notes, all stored in session history.
- 06CV parsing for PDF, DOCX and TXT stores extracted text only (no binaries) and threads it through analysis and the interview without extra queries.
- 07Auth.js v5 email/password auth with a JWT route guard, Prisma + PostgreSQL, and Docker for local development.
Challenges I solved
01A voice interview feels broken if the interviewer takes seconds to answer.
Solution · The live call runs on Groq (Whisper and Llama) and streams the reply word by word while the browser speaks it. Claude, which is slower but deeper, is used for the analysis and the final report.
02Coaching tips could slow the conversation down.
Solution · Tips come from a separate background request, so the interviewer's next turn never waits for them.
03CVs arrive as PDF, DOCX or TXT and are heavy to store.
Solution · They're parsed on the server and only the text is kept, then passed through the analysis and the call without extra database queries.
04The AI has to return data the interface can render, every time.
Solution · Analysis and report responses are validated with Zod before they're saved.
What I learned
- Choosing models by job: fast models for conversation, stronger models for judgment.
- Streaming and real-time interfaces in Next.js.
- Auth.js v5, Prisma and a proper route guard on the newest Next.js.