Three Bidets, Three Jobs
What today's contest grind taught us about all three Bidet AI surfaces
Preface
Bidet AI exists in three forms today, and they aren't the same product wearing three faces — they're three products doing three different jobs for three different versions of you. The mistake is treating them like a fleet that should converge. They shouldn't. They should diverge harder.
Here's the state of each as of tonight, what today's contest-version pain taught us, and what each version actually needs.
1. URL Bidet — *bidetai.thebarnetts.info*
What it is. FastAPI + vanilla JS web app running on Apex. Whisper (cloud) for transcription, Gemini for cleaning. Four outputs today: raw, clean, forai, analysis. Bridged to TP3 — every dump lands in bidet_brain_dumps and the audio + four text files land in C:\Users\Breezy\honest-answers\dumps\.
The proof-of-life that matters. April 14, you used it live in front of 6th graders, two consecutive 40-minute periods, room of teenagers, real acoustic environment. It worked. Multi-voice, classroom noise, 40 min non-stop. That's the only version of Bidet that has cleared a real-world stress test.
What it's uniquely good at. Long-form, multi-speaker, dirty audio. Cloud Whisper has seen a billion hours of teacher voices and classrooms; Moonshine-Tiny has seen approximately none. Cloud Gemini has 1M-token context; Gemma 4 E4B on a phone has 2K. The URL version cleanly handles the things the phone version can't even pretend to.
Where it's weak. It lives behind a URL you have to navigate to. Not in your pocket. No share sheet. The "Clean Students" tab you spec'd back in April still isn't built. Whisper transcripts have their own artifact class (filler-word survival, run-on sentences) that Gemini fixes inconsistently. And it requires the laptop or a browser on the phone — friction every time.
2. Desktop Bidet — *Honest Answers / pair recorder ecosystem*
What it is. Two things you call "desktop Bidet" that aren't the same thing:
a) Honest Answers app at C:\Users\Breez\Documents\Claude\Projects\Honest Answers\ — the original desktop voice-dump app. Whisper + Gemini pipeline. Three output versions, one-click copy. Bridged to TP3. You said in April: "absolutely loving it."
b) Pair Recorder daemon at C:\Users\Breez\bidet_pair_recorder\ — a sidecar that runs in your system tray, records mic continuously, and grabs the last ~60 sec of audio + the focused textarea's text when you hit Ctrl+Shift+T. Output goes to pairs/ + .txt. Purpose: build training data for a future Whisper-mark fine-tune in your voice.
What it's uniquely good at. Honest Answers is your patio app — sit down, dump, get cleaned output, paste into wherever you're writing. The pair recorder is your training-data flywheel — every Win+H voice typing session you do across the day silently produces a forward-looking labeled pair. Neither replaces the others; they're complementary.
Where it's weak. Honest Answers is desktop-only — you're at the laptop, you have time to sit. Doesn't follow you. The pair recorder vetoed its v0.1 dialog (you said "fuck all that" about copy-paste); v0.1.5 needs the Windows UI Automation read of the focused textarea to be zero-friction, and that's still a TODO. And the desktop app's "Honest Answers" name lives in a world before the Bidet brand consolidated — at minimum, it's mis-shelved relative to the rest.
3. Phone Bidet — *bidet-phone moonshine flavor (the contest version)*
What it is. Android app, Pixel 8 Pro target, 100% on-device. sherpa-onnx Moonshine-Tiny for transcription. Gemma 4 E4B on Tensor G3 CPU for cleaning. Two outputs today (Clean for me / Clean for others), third "Clean for judges" tab queued. Per-chunk pre-cleaning during recording (v18.5+). Foreground-service-protected cleaning that survives screen-off (v18.6). Post-Moonshine sanitizer that strips music notes / Thai trailers / "uh uh uh" loops / "card card card" loops / bathroom-ghost lines (v18.6).
What it's uniquely good at. It's in your pocket. Always. That's the entire thesis. The phone is in your hand 95% of your waking day, and what you talk into it never leaves. The privacy + ubiquity combination doesn't exist on the laptop or the URL.
Where it's weak. Tonight's pain points are still the floor:
• Moonshine-Tiny hallucinates even after the sanitizer (mishears like "Pixar" for "fix it", "Bidet AI" → "the day AI", "8 million" for latitude readings, "Stirting" for "starting")
• E4B cleaning is slow — even with per-chunk pre-cleaning, the cold prefill is ~30-60 sec, and decoding 2K output on Tensor G3 CPU takes minutes
• Cross-chunk coherence is lost when we chunk RAW > 2400 chars to fit the engine's 2048-token context
• You can't fix the model mid-contest — switching from Moonshine to Distil-Whisper-Small or from E4B to a smaller cleaner means a new build, new test cycles, new transcription quality unknowns
The contest version is a constrained demo of a real architecture, not the product Bidet AI should grow into.
What today taught us, applied to all three
1. Transcription quality is the floor. Cleaning can't recover what STT fabricates.
The phone version proved this loudest because Moonshine-Tiny is the worst STT in the family. But it's true for all three. Whisper's "I'm just going to go to the bathroom" hallucination during silence shows up in URL/desktop runs too — same root cause, different frequency. The sanitizer pattern (post-STT, pre-cleaning) belongs in URL and Desktop Bidet too, applied to Whisper's specific artifact classes (silence-fill phrases, repeated-token attacks, BOM markers, music-note runs).
2. Per-chunk pre-cleaning amortizes the cost during recording, not after stop.
We built this for the phone because the phone has no choice — on-device cleaning is slow. But the SAME pattern wins on URL and Desktop: as soon as Whisper returns chunk N, fire the Gemini cleaning for that chunk in the background. By the time the user stops recording, 95% of cleaning is already done. Tap "Clean for others" → output appears in seconds because most of it's already on disk.
URL Bidet today is monolithic: stop recording, wait for the whole-transcript pass through Gemini. Pre-chunk cleaning would cut that wait by an order of magnitude on long sessions (classroom lectures especially).
3. The three-output abstraction is the right primitive.
Clean for me, Clean for others, Clean for judges — same RAW, different (prompt, audience) tuples. This works everywhere. URL Bidet today has four overlapping outputs (raw/clean/forai/analysis) where the distinctions blur. Collapse them to the same three-tab model. The phone got it right by accident because the screen is small enough that you can't fit four chips.
Add a "Clean for Students" preset on the URL version (your April spec, still relevant) — same mechanic, fourth audience template, ships as a saved prompt without code changes.
4. Brand voice is non-negotiable across surfaces.
The Claude Design experiment tonight showed what happens without it — Claude built a satirical B2B-AI smart-toilet pitch because nothing in the brief anchored to your voice. The tagline "Take a brain dump. AI cleans up your mess." needs to be the first line a user sees on every Bidet surface. URL homepage. Desktop app's window title. Phone splash. They should feel like one thing, even though under the hood they're three.
5. The Nixon line is the ace that travels.
"Tell me the story of Nixon from Peace with Honor to Watergate, and let him go."
This line lands harder than any feature description we could write. It's the equity moment that explains why Bidet exists for kids with LDs, not just for teachers writing report cards. Put it on the URL homepage. Put it in the desktop app's welcome flow. Keep it as the closer of every contest writeup. It's the only sentence that explains the wider lens.
6. On-device is a contest constraint, not a permanent religion.
Post-contest, hybrid is fine. Phone version should grow a Settings → Use cloud cleaning toggle. Default off (privacy first). On = Gemini Flash or Claude Haiku via API; 30-second cleaning that's better than minutes of on-device E4B. URL Bidet stays cloud-only. Desktop Bidet stays cloud-only. The phone offers the choice.
The contest version stays 100% on-device because that's the deliverable. Don't conflate "what the contest requires" with "what Bidet AI is for the next decade."
Per-version recommendations
URL Bidet — priorities, in order
1. Pre-chunk cleaning during recording. Same architecture as v18.5 ChunkCleaner, but with Gemini Flash on the cleaning side and Whisper on the STT side. By stop-of-recording, almost everything is already cleaned. Sub-5-sec tap-to-result.
2. Whisper artifact sanitizer. Mirror the phone's TranscriptSanitizer but with Whisper's artifact classes (silence-fill phrases, repeat-token attacks, BOM markers, music-note runs, "Thanks for watching" YouTube-corpus ghost). Pure Python, drop into the Apex pipeline.
3. Build the "Clean for Students" tab from your April spec. The brief is already written down. It's a saved prompt, not a code change — should be a day of work.
4. Three-tab consolidation. Collapse raw/clean/forai/analysis into raw + the three Clean modes. Less UI surface, sharper mental model.
5. Brand voice lock. Hero line on the homepage. Tagline in the page title. Match the warm-amber-on-dark visual system of reports.thebarnetts.info so all your web surfaces look like one property.
Desktop Bidet — priorities, in order
1. Rename the Honest Answers folder. It's a Bidet app. Move it. `C:\Users\Breez\Documents\Bidet\` with `desktop-app/` and `pair-recorder/` subdirs. Update the desktop shortcut. Five minutes of work; significant mental-model clarity.
2. Finish the pair-recorder UIA read. Replace the dialog (still vetoed) with a Windows UI Automation read of the focused textarea on `Ctrl+Shift+T`. This is the one missing piece for the training-data flywheel to actually run silently. Once it does, every Win+H session you do builds the corpus for Whisper-mark v0.3.
3. Pre-chunk cleaning here too. Same pattern. Whisper returns chunk → Gemini cleans → ready on stop. Patio sessions get instant cleaned output instead of the "Generating…" wait.
4. Wire desktop Bidet's outputs into the same TP3 schema as URL Bidet. Today they both write to `bidet_brain_dumps` but with different field shapes. Normalize so you can search across surfaces.
5. One-click "Send to phone" — pipe a cleaned desktop dump to Bidet phone's History via a deep-link / file drop. Useful for "I dumped this at the laptop; I want to refer to it on the phone tomorrow during class."
Phone Bidet — what to fix BEFORE 5/18
1. Test v18.6's two fixes. The next brain dump tonight is the validation: (a) does the sanitizer noticeably clean the RAW, (b) does Clean-for-others survive screen-off / backgrounding via the new FGS path. Both fixes shipped at ~7 PM ET — un-validated for now.
2. Ship "Clean for judges" tab (v18.7). The contest-writeup prompt is already written and lives at reports.thebarnetts.info/r/2026-05-10-bidet-contest-prompt.html. Wire it as `SupportAxis.JUDGES`, bundle the prompt as an asset, render a third chip. Mostly UI work + a Room migration for the new cache column (or skip the column and persist to file).
3. Better STT for the demo recording. For the contest video specifically — don't depend on the recording-of-the-moment having clean transcription. Pre-record 5-10 takes, pick the one Moonshine handled cleanest, that's your demo clip. Engineering effort: 0.
4. Post-contest: replace Moonshine-Tiny. Distil-Whisper-Small via sherpa-onnx is ~3x slower but ~10x fewer hallucinations. Wall-clock cost goes from ~3s/chunk to ~8s/chunk — still under the 30-sec chunk arrival rate so the pipeline keeps up.
5. Post-contest: hybrid cleaning toggle. Settings → "Use cloud cleaning" → routes the Gemma call to Gemini Flash via API. 30-sec cleaning instead of minutes. User opts in.
Phone Bidet — what to DEFER until after 5/18
• The Moonshine-to-Distil-Whisper swap. Risk of breaking the contest pipeline > value of cleaner RAW for the demo.
• Reworking the cleaning model. E4B is the contest's required model family; we live with its decode speed.
• The desktop-to-phone deep-link. Nice to have. Not contest-blocking.
• Engine context budget experiments. We tested 8192 today — it backfired. Don't reopen that until we have a smaller model or faster hardware.
The bigger picture — three jobs, not one
When all three are working as they should:
URL Bidet is the classroom version. You stand at the front of the room, your laptop or phone-browser open, you teach for 40 min, you press stop, you click Clean for Students, you email the result to the kids who missed class. It survives multi-speaker dirty audio because Whisper has heard a billion hours of classrooms.
Desktop Bidet is the patio version. You sit down with a glass of water, you talk for 20 min about whatever's tangled up in your head that night, you click Clean for me, you read the bullets, you sleep better. Lower-stakes, longer-form, single-speaker. Whisper + Gemini cloud because there's no reason to make it harder than that.
Phone Bidet is the pocket version. You're walking to the parking lot. A thought you want to remember hits you. You record 90 seconds. By the time you reach your car, Clean for me is already populated because the per-chunk pre-cleaner ran while you walked. You read the bullets, you forget about it, you trust it's saved. It's 100% on-device because what you said walking to your car shouldn't go to a cloud.
Three surfaces. Three jobs. One brand. Take a brain dump. AI cleans up your mess. It works in every situation because the situations are different.
Written 2026-05-10 evening, after a day of grinding on the phone version specifically. Cross-checking against the brain dumps you recorded today (1:27 PM, 2:12 PM, 4:59 PM, 7:40 PM, 8:17 PM) — the through-line in your own voice is consistent across them: brain dump as a tool, AI as the cleanup, equity as the wider lens. The three product surfaces are different deployment targets for the same idea you've been chewing on all year.