-
-
Explain what you just learned out loud. Quack listens quietly and asks one sharp question only when your understanding breaks.
-
The moment you say something wrong ("Messi plays basketball"), Quack cuts in mid-sentence with a question instead of the answer.
-
It holds you to it. Wrong answer gets a second sharp question; when you self-correct, one word ("Correct.") and it goes quiet again.
-
Every session ends with a breakdown: what you nailed, what you repaired, what's still shaky, and what to review next.
Quack — Silent when you're right, stops you when you're wrong.
Silent when you're right, stops you when you're wrong.
Inspiration
I always felt like I understood something until I had to explain it out loud. I graduated a few months ago and hit this constantly. I'd read a concept, feel like I had it, then freeze the second someone asked me to walk them through it. That's the illusion of understanding, and the classic fix is the Feynman technique: explain a topic in plain words and your gaps expose themselves. But when I did it alone, nobody caught the parts I glossed over. So I built Quack to be the listener that catches them.
What it does
You pick a topic, then explain it out loud as if you're teaching it. Quack stays completely silent while your reasoning is sound. No "mhm," no encouragement, nothing. The moment you say something factually wrong, skip a step, or hand-wave with filler, it cuts in mid-sentence with one sharp question that exposes the gap. It never hands you the answer. It makes you find it. When you correct yourself, it gives a one-word confirmation and goes quiet again. At the end, you get a recap: what you nailed, what you self-corrected, what's still shaky, and what to review next.
How I built it
I built the whole thing with Codex and GPT-5.6, in a single session, in about a day. Two design decisions make it more than a chatbot with a prompt.
First, I made silence an explicit action instead of a hope. Rather than prompting the model to "please stay quiet" and hoping it complies, I gave it a wait_for_user tool it deliberately calls to do nothing. That turns silence into a real choice the model makes, which is why it holds instead of drifting back into chatty assistant mode.
Second, I added a parallel channel to force mid-speech interruption. The voice model (GPT-Realtime-2.1) only responds at the end of a turn, so on its own it can't cut you off mid-sentence. So I run a second, transcription-only connection in parallel. It streams what I'm saying as text, and GPT-5.6 checks each complete claim against a ground-truth brief the moment it's spoken. When a claim is wrong, it forces an immediate interrupt instead of waiting for me to pause.
I use GPT-5.6 for the reasoning at three points. It writes a structured ground-truth brief (key facts and likely misconceptions) before each session, runs the live contradiction check during, and writes the recap after. I used Codex to scaffold the FastAPI backend, the React frontend, the dual-WebRTC architecture, and every tuning pass on the interrupt behavior.
Challenges I ran into
The hardest part was restraint: getting it to shut up. Voice models are trained to be helpful and chatty, so it kept affirming me, filling pauses, and asking follow-up questions when I was already right. Getting true silence took many rounds of tuning. The second challenge was latency versus patience. Interrupts need to fire fast, but the model also has to tolerate the long thinking pauses that happen when I explain something hard, and those two goals fight each other. The parallel error-detection channel was how I resolved it. I also fought a series of race conditions where the interrupt channel and normal turn detection would both fire, producing duplicate responses.
Accomplishments that I'm proud of
I got a voice model to stay genuinely silent, which sounds trivial but was the hardest thing in the project. Every voice assistant I've used wants to fill the air, and Quack doesn't. It sits quietly while I think and only speaks when it has a real reason to.
I'm proud that it interrupts mid-sentence rather than waiting for me to finish. Building the parallel transcription-and-classification channel to make that work was the most technically involved part, and it does something a plain prompt to a voice assistant simply can't.
And I'm proud that it's a finished product, not a proof of concept. It has a real flow from setup to live session to a recap that reflects what I actually said, including a "You repaired" section that tracks where I corrected myself. It looks and feels like something I'd actually use to study.
What I learned
The interesting problems in voice AI aren't about making the model talk. They're about making it not talk at the right moments. The whole product lives in the silence.
Built With
- codex
- fastapi
- gpt-5.6
- gpt-realtime-2.1
- openai-realtime-api
- python
- react
- speech-to-speech
- typescript
- vite
- voice-ai
- webrtc
Log in or sign up for Devpost to join the conversation.