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
$ cat brief.md# In short
- 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
$ stats --summary# In numbers
- 2
- AI providers: Groq for the live call, Claude for the analysis
- 0–100
- score with strengths, improvements and next steps
- 10–15
- questions generated from the posting and your own CV
- 6
- API routes for CV upload, the live call and the report
$ ./demo --play# Watch it run (with sound)
$ ls desktop/# On desktop






$ cat README.md# 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.
$ tree architecture/# How it fits together
Browser
Next.js 16 + React 19
Built solo
Landing, auth, job analysis, the live call room and reports.
Next.js server
proxy.ts
JWT route guard on every request.
Server Actions
Built solo
Auth, job analysis and call setup.
API routes
Built 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.
$ cat flow.log# How it flows
- 1.
Give it the job · Server Action
Job title, description or URL, interview stage, interviewer names and an optional CV.
- 2.
Intelligence report · Claude
Ranked topics, company profile, interviewer personas, practice questions and readiness insights.
- 3.
Live voice interview · Groq
Hold to talk: Whisper transcribes, Llama answers as the interviewer, and the browser speaks the reply.
- 4.
Coaching as you go · API
Each answer gets a quick tip in the transcript without slowing the call.
- 5.
Scored report · Claude
A 0–100 score with strengths, improvements and next steps, saved to your sessions.
$ git log --author=amar# What I built
- Job analysis with Claude returns ranked interview topics, a company profile, interviewer personas, 10–15 tailored questions and readiness insights, validated with Zod.
- Optional job-post URL: the page is fetched, stripped and added as extra context for the analysis.
- Low-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.
- A non-blocking coaching tip appears after every answer (STAR, specificity, results), so feedback arrives during the call.
- Post-call reports score 0–100 with strengths, improvements, detected frameworks and communication notes, all stored in session history.
- CV parsing for PDF, DOCX and TXT stores extracted text only (no binaries) and threads it through analysis and the interview without extra queries.
- Auth.js v5 email/password auth with a JWT route guard, Prisma + PostgreSQL, and Docker for local development.
$ cat fixed-bugs.md# Challenges I solved
A voice interview feels broken if the interviewer takes seconds to answer.
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.
Coaching tips could slow the conversation down.
Tips come from a separate background request, so the interviewer's next turn never waits for them.
CVs arrive as PDF, DOCX or TXT and are heavy to store.
They're parsed on the server and only the text is kept, then passed through the analysis and the call without extra database queries.
The AI has to return data the interface can render, every time.
Analysis and report responses are validated with Zod before they're saved.
$ cat learned.txt# 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.
$ cat package.json# Stack
Next.js 16 · React 19 · TypeScript · Prisma · PostgreSQL · Auth.js · Claude · Groq · Tailwind · shadcn/ui