$ cd ../projects

AI Interview Coach

Paste a real job posting, then take a live voice interview against an AI that plays the interviewer.

Source code

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)

the AI interviewer asks the first question, out loud
the transcript builds while coaching tips appear

$ ls desktop/# On desktop

AI Interview Coach: Landing page
Landing page
AI Interview Coach: Job analysis: topics, interviewer style, culture
Job analysis: topics, interviewer style, culture
AI Interview Coach: Live voice interview
Live voice interview
AI Interview Coach: How it works
How it works
AI Interview Coach: Features
Features
AI Interview Coach: Sign up
Sign up

$ 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. 1.

    Give it the job · Server Action

    Job title, description or URL, interview stage, interviewer names and an optional CV.

  2. 2.

    Intelligence report · Claude

    Ranked topics, company profile, interviewer personas, practice questions and readiness insights.

  3. 3.

    Live voice interview · Groq

    Hold to talk: Whisper transcribes, Llama answers as the interviewer, and the browser speaks the reply.

  4. 4.

    Coaching as you go · API

    Each answer gets a quick tip in the transcript without slowing the call.

  5. 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

  1. 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.

  2. Coaching tips could slow the conversation down.

    Tips come from a separate background request, so the interviewer's next turn never waits for them.

  3. 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.

  4. 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

# Next project in the logAAFAS: AI Financial Adviser