Inspiration

Every interview prep tool I'd tried does the same thing: you answer a question, it grades you once, and that's it. Real interviews don't work like that. A good interviewer listens to what you actually say and pushes back if something doesn't add up — a specific claim you never explained, a result with no real mechanism behind it. I wanted to build something that does that: an AI that decides whether to probe deeper based on what you actually said, not a script that asks the same follow-up regardless of how you answered.

What it does

You paste a job description (or skip it) and get six tailored interview questions. You record your answer out loud — no typing. An AI evaluates it on three things: how specific it is, whether it actually answers the question, and whether it's structured like a real STAR answer. If the answer is strong, it moves on and shows you a rewritten, stronger version of what you said. If it's weak, or if you mentioned something specific without explaining it, the AI asks a real follow-up question targeting exactly that gap. At the end you get a summary of your scores and your weakest area.

How I built it

The frontend is plain HTML/CSS/JS — no framework, just the browser's MediaRecorder and Web Audio APIs for recording, plus a local silence check before anything gets uploaded. The backend is Node/Express. Audio gets transcribed through Gemini's multimodal endpoint, and the transcript goes into a two-agent pipeline built on Google's Agent Development Kit — one agent scores the answer and decides if a follow-up is warranted, another rewrites the answer using only the facts actually stated. There's also a full independent fallback path that can take over if the agent layer has any issue, since this had to survive being demoed live in front of people.

Challenges I ran into

The one that actually scared me: partway through migrating to ADK, scores looked completely normal but had nothing to do with what people were saying — every answer got the same kind of generic feedback back. I didn't guess at the prompt. I logged the exact payload being sent to Gemini and found the transcript was never actually being injected into the instructions — a missing template variable, so the model was evaluating basically nothing and making up plausible-sounding feedback. Fixed it, then rebuilt three test transcripts (a strong one, a weak one, and a deliberately tricky one that mentions a real problem but never explains how it was solved) to actually verify the fix instead of assuming it worked.

What I learned

That an "agent" isn't really about calling an LLM — it's about whether the system's next action actually depends on what the model decided. My first version always asked exactly one follow-up no matter what the answer was. That's a script wearing an agent's clothes. The real fix wasn't adding more AI, it was giving the model an actual decision to make, building explicit thresholds around it, and then checking that decision against test cases specifically designed to break it.

What's next

Persistent session history so people can see their scores improve across multiple sessions, and eventually a real-time conversational follow-up loop instead of a discrete evaluate-then-ask cycle.

Built With

Share this project:

Updates