I Built Rehearse to Sell: A Voice-First, Local-First AI Interview Coach
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle What I Built I built Rehearse , a voice-first and local-first AI interviewer. You know how you read a list of "Top 50 Interview Questions," think "I could answer that," and then completely freeze when you actual

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission 💸
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
I built Rehearse, a voice-first and local-first AI interviewer.
You know how you read a list of "Top 50 Interview Questions," think "I could answer that," and then completely freeze when you actually have to speak out loud? That is the exact problem this solves.
ChatGPT doesn't help here. If you ask it to practice with you, it gives you a giant essay, says "Great job!", and never pushes back. A real interview is a conversation. Rehearse actually talks to you (using voice), cuts you off if you ramble, and forces you to answer the hard follow-up questions. At the end, it grades you out of 10 and tells you how a better candidate would have answered.
I didn't want this to just be for software engineers. You can type "Marketing," "Nursing," or "Sales," and the AI changes its tone and questions to match that field. And if you pick "Stress Test" mode, it acts like a genuinely hostile interviewer.
The stack is FastAPI, HTMX, and Gemma. I used the browser's built-in microphone and text-to-speech so it works instantly without saving audio files to a server.
The hardest part wasn't the code, it was stopping the AI from being too nice. I had to write a very strict set of rules for the prompt. It is explicitly banned from saying things like "Great answer" or "I understand." If you say "we built a system," it is instructed to interrupt you and ask, "What did you specifically do?"
I also ran into a hilarious bug. Gemma on Google's API is a "thinking" model. Instead of just asking the question, it would write out its entire internal thought process: "Wait, the prompt says no meta-text. Let's try asking this..."
Because my app reads the text out loud, it was literally speaking the AI's internal self-doubt to the user. I had to write a Python script that scans the AI's output bottom-up, ignores the monologue, and grabs only the final question.
Interviewing is vulnerable. You are anxious, alone, and talking to a screen. If this used a closed API, it would mean sending your awkward voice recordings to a giant tech company's server.
Because it uses open-source AI, this app can run 100% locally. If you run it with Ollama, nothing leaves your laptop.
To make the app demoable as a live link (since free hosting can't run a 4GB model), I built a fallback: it tries the local Ollama server first, and if you don't have it running, it uses the Google API. This local-first setup is only possible because open models are finally small enough to run on normal laptops.
I tested this on a friend preparing for MBA interviews.
She typed in a real consulting job description. Her first answer was a rambling 3-minute story about a college project. The AI instantly interrupted her (in voice) and asked, "You mentioned an increase in engagement. What was the specific metric before and after?" She froze, laughed, and said, "Wow, this is actually stressful."
Would she pay for it? She said she wouldn't pay monthly, but she would happily pay $5 for a "7-day sprint" pass right before placement season.
What did she ask for next? She wanted to upload her resume so the AI could ask questions about her specific internships. (Adding that to the roadmap for improvement).