Inspiration Every CS student hits the same wall: they've ground LeetCode for weeks, but the moment they sit in a real interview, they freeze. The pressure of being judged by a human, performing under time constraints, and verbalizing their thought process out loud is a completely different skill — one that almost no one practices in a realistic setting. Mock interviews with peers are inconsistent and hard to schedule. Platforms like Pramp are passive and asynchronous. Hiring rates are brutal, and the feedback loop between "I thought I did okay" and a rejection email is soul-crushing.

The deeper problem isn't preparation — it's practice fidelity. There's no tool that gives you a real interviewer, evaluates how you actually talk through your code, and tells you what went wrong while it's still fresh.

We built MockPrep to close that gap.

What it does MockPrep is a real-time AI mock interview platform that simulates the full technical interview experience — voice-to-voice, in your browser, with an AI interviewer that actually pushes back.

Users choose a company preset (Stripe, Amazon, Anthropic, Meta, TikTok), select a problem type and difficulty, and jump into a live interview. The AI interviewer — drawn from a state machine of 10 distinct interviewer personalities, from collaborative to adversarial — guides them through the problem via voice, asks follow-up questions, probes edge cases, and reacts to what the user says in real time.

A Shadow LLM watches the code editor simultaneously, tracking logical correctness, complexity, and structure in parallel with the conversation. After the session, Playback V2 replays the full interview with a two-stage AI coaching layer: one model audits performance objectively, and a persona layer delivers feedback in the style of the interviewer the user just faced. Users see exactly where their thinking broke down, what they should have said, and how to fix it.

How we built it MockPrep is a full-stack platform built from scratch over several months of parallel development alongside a full-time course load.

The backend is a Spring Boot / Java monolith (~20,000 lines) handling session orchestration, user auth, problem management, and the real-time audio pipeline. The frontend is React / TypeScript with a custom code editor, live voice UI, and session playback.

The voice pipeline is the technical core. We use Deepgram for STT with custom VAD breath detection and RMS noise calibration, Cartesia for TTS, and a Redis speculative execution pipeline we built from scratch to get end-to-end latency from ~3 seconds down to under 300ms — the difference between feeling like a conversation and feeling like a chatbot.

The AI layer runs GPT-4.1-mini for real-time interview dialogue, with a Shadow LLM (Qwen3) watching the code editor independently. Post-session evaluation uses a two-stage pipeline: DeepSeek R1 as a strict auditor for objective scoring, followed by Qwen3 adopting the interviewer persona for coaching delivery. The problem bank covers 225 NeetCode and OOP problems.

Challenges we ran into Latency is brutal. Getting a voice AI pipeline that feels natural required rearchitecting the entire audio stack. The Redis speculative execution layer — where we pre-warm the LLM response while STT is still finalizing — was a multi-week engineering investment that fundamentally changed the experience.

Two models doing two jobs simultaneously. Keeping the interviewer LLM and the Shadow LLM from interfering with each other, while both react to the same session state, required careful isolation and prompt engineering.

Evaluation that doesn't feel like a rubric. Early versions of our post-session feedback read like a grading sheet. Getting DeepSeek R1's analytical output to flow through Qwen3's persona layer — so feedback feels like something a human interviewer would actually say — took serious iteration on the two-stage pipeline.

Building alone while taking Calc III and Physics. MockPrep reached 17+ major iterations while being built solo, without dropping a semester's worth of science coursework.

Accomplishments we're proud of Getting latency under 300ms on a voice AI pipeline with STT → LLM → TTS in sequence is something we didn't think was achievable in a browser-based app. The speculative execution approach is genuinely novel for this use case.

Shipping a product good enough to pitch at the Zero to One Startup-athon at UW — and having it run live, end-to-end, in front of an audience — was a milestone we didn't take for granted.

The 10-personality interviewer state machine means no two sessions feel the same. Getting an AI to be authentically adversarial without being hostile, or genuinely collaborative without being a pushover, is harder than it sounds.

What we learned Real-time voice AI is not a feature — it's an infrastructure problem. Everything else (prompts, UI, UX) is downstream of whether the audio pipeline feels human. We learned to treat latency as a product requirement, not an engineering afterthought.

We also learned that AI evaluation is a UX problem as much as a model problem. Users don't want to be scored — they want to understand, in plain language, what they should do differently. That insight shaped the entire Playback V2 architecture.

What's next for MockPrep MockPrep's current roadmap centers on three expansions: a bug squash round format (fix broken code under interviewer pressure), multi-stage implementation rounds (design → code → optimize in sequence), and a company-specific coaching mode calibrated to each preset's real interview bar.

The longer play is enterprise. Students are Stage 1 — we prove the product works and build the data flywheel. Stage 2 is selling to companies as a screening and calibration tool, where the same evaluation pipeline that coaches candidates can assess candidates on behalf of hiring teams.

The infrastructure is already built. Now it's about distribution.

Built With

Share this project:

Updates

Submission history