Inspiration
You prepare for months. Then you sit down, your mind knows the answer⦠and you freeze, because you've never once said it out loud to another person.
What it does
An AI that sits across from you like a real interviewer, every night, until the room stops being scary. π€ AI Mock Interviews β a real, talking interview with follow-ups and honest feedback on what you said and how you said it.
π§βπ« AI Tutor β stuck on a concept? It explains in plain language until it actually clicks.
π Question Bank β real questions across SQL Β· System Design Β· DBMS Β· CS Fundamentals Β· DSA.
How we built it
A Turborepo monorepo β apps/web (Next.js frontend) Β· apps/api (Node backend) Β· packages/db, packages/shared. Powered by Supabase (Postgres), MongoDB (question bank), Redis, and Groq (LLM).
Challenges we ran into
hardest problem wasn't calling an LLM - it was stopping it from rambling, skipping sections, or never wrapping up. We ended up building a server-side state machine that owns stage transitions and time budgets, with the model only controlling what to say inside a stage, never when to move on. Getting the turn-taking latency (streaming STT β LLM β TTS) to feel conversational instead of walkie-talkie-ish took a lot of tuning around silence thresholds and end-of-turn detection.
Judge0 was the bottleneck we didn't expect. Under any real load it rate-limits hard, so naive "one request per test case" judging fell over immediately. We had to batch test cases, prioritize submit over run in the queue, and add exponential backoff β and still design the whole thing as an async job instead of a synchronous HTTP call, which touched almost every part of the coding-question flow.
Accomplishments that we're proud of
A genuinely live AI interviewer, not a chat wrapper - it interrupts, digs into your resume, forces you to move on when you stall, and runs your code against real hidden tests mid-conversation. That's the thing we set out to prove was possible and it works. A full code-judging pipeline across multiple languages with sample-vs-hidden tests, per-language wrapper generation, and a queue resilient to the judge service's own rate limits - built to survive real concurrent load, not just a happy-path demo.
What we learned
An LLM can't be the clock. The single biggest lesson from building the interview engine: never let the model own pacing, scoring math, or "when are we done." Every place we did trust it (early prototypes let the model decide when to move stages) produced interviews that either dragged forever or ended in 90 seconds. The fix was always the same pattern server-side state machine decides, LLM just narrates and once we internalized that, it generalized cleanly to the recruiter-screening pacing engine and the rubric scoring too. Voice AI is a systems problem before it's a prompting problem. Getting the interviewer to feel human had almost nothing to do with prompt wording and everything to do with turn-detection latency, heartbeats, and graceful reconnects. A great prompt on a laggy pipeline still feels robotic; a mediocre prompt on a tight one feels alive.
What's next for MOCKR
Expert Interviews and Contests so we prepare our users for OA as well and bring the whole hiring process preparation journey to our platform.
Log in or sign up for Devpost to join the conversation.