Inspiration

Behavioral interviews are hard for students applying to technical internships, especially when English is not their first language. Most practice tools give you a list of questions, a generic tip like "use STAR", or a score. None of them recreates the hard part: an interviewer who follows up on what you just said.

The most common weakness in real answers is specific. People say "we worked on it" and "it worked well", so the interviewer never hears what they did or how they knew it worked.

What it does

A timed mock interview, hands-free

  • Set up your role, company, job description and resume (extracted locally), and the skills you want to improve.
  • Enter the interview room and choose 5, 15 or 30 minutes.
  • Maya, a voice interviewer, asks questions out loud and follows up on what you actually said. Turn-taking is automatic: no Record or Next buttons.
  • An optional mirrored self-view makes it feel like a video call. The video never leaves your screen.
  • No coaching during the interview, just like the real thing.

A debrief that quotes your own words

  • A summary, what to keep doing, and the top priorities.
  • Each answer, with an exact quote from your transcript, how to improve it, and a clearer version to fact-check.
  • Why Maya asked that: for each follow-up, it shows You said (your words), Still unclear (what your answer left open), and So Maya asked (her actual question).
  • Every quote is checked against the real transcript, so evidence cannot be invented. No scores, and no accent, personality or hiring judgments.

Pressure Replay

  • Pick one moment from the debrief and replay it in a 90-second voice session.
  • Maya repeats the original question, then changes one condition, so you have to reason instead of recite.
  • The comparison shows your before and retry quotes side by side, whether you resolved the open question, and what is still worth asking. It can honestly say "not yet".

A self-hosted MCP server

  • 7 MCP tools over Streamable HTTP, spec 2025-11-25, including deterministic wording checks that need no API key.
  • The check tools also render as an MCP Apps card (SEP-1865).
  • A scripted terminal agent shows the same practice loop an assistant like Alexa+ could run by voice.

How we built it

  • Voice interview: a Python WebSocket bridge to the Gemini Live API. The browser streams 16 kHz microphone audio through an AudioWorklet and plays Maya's native audio. The server enforces the time limit, bounds the audio, captures transcripts, and stores no raw audio.
  • Feedback: Gemini generateContent with JSON schemas for the debrief, the follow-up explanations and the replay comparison. Every quote passes an exact-substring check against the transcript.
  • MCP: FastMCP from the official Python SDK, mounted on FastAPI, with agent instructions, read-only tool annotations and an MCP Apps view. The web app is itself an MCP client of these tools.
  • Maya: an animated SVG whose mouth follows her real audio output, and who looks at you and nods while you speak.
  • Privacy: loopback-only server, explicit consent before anything is sent to Google, the API key stays on the server, and the camera stays local.
  • Tests: 76 Python tests and 11 JavaScript suites, with providers mocked and real local MCP integration.

Challenges we ran into

  • Making practice feel like an interview. Early versions coached after every answer. Real interviews don't, so we moved all feedback to the end and built a focused room with nothing to click.
  • Streaming audio both ways in the browser: resampling, gap-free playback, stopping Maya's audio when you interrupt, and releasing the microphone on every exit path.
  • Trustworthy feedback. Model feedback can sound confident and be wrong. Quote checking, deterministic checks and clear labels keep it honest.
  • Provider limits. Transient 503s and Search-grounding 429s led us to add careful, bounded retries, and to keep the core loop independent of web research.

Accomplishments that we're proud of

  • A hands-free, timed mock interview with real follow-ups, verified with a physical microphone.
  • "Why Maya asked that": feedback that teaches why a polished-sounding answer still gets a follow-up.
  • A replay loop that shows whether your retry actually fixed the problem, using your own words, without fake scores.

What we learned

  • Useful interview feedback is about specificity. Pointing at "we worked on the database" teaches more than any score.
  • Realism matters more than features. Removing per-answer coaching made practice feel like an interview.
  • Agent-facing tools need instructions and honest annotations, not just function signatures.

What's next for Rehearsal

  • Test full 15- and 30-minute sessions with real candidates, including non-native speakers.
  • Connect the MCP tools to Alexa+ when developer access is available.
  • Add technical walk-through and system-design interview types.

Honest status

  • Verified with a physical microphone: the live voice interview and webcam self-view.
  • Verified with test data: the debrief and Pressure Replay.
  • Not tested: the full 30-minute sessions.
  • Not verified live: company research (Google Search grounding returned quota errors).
  • Not integrated: this is a self-hosted MCP server plus a web simulation; it has not been connected to Alexa+ itself.

Demo: https://youtu.be/jYg5wq5HX_E · Code: https://github.com/mtcd001-tech/rehearsal

Built With

Share this project:

Updates

Submission history