1
0 Comments

Voice Tables by Inithouse: voice-first database MVP: the pipeline failures that killed our adoption

We built Voice Tables as a database you talk to instead of type into. Whisper for transcription, LLM function calling for structured data extraction, real-time tables underneath. The pitch was simple: say "add a row with client name John, project website redesign, budget twelve thousand" and watch it appear in your table.

The pitch worked. The pipeline didn't. Here's what broke, why, and what we changed.

The pipeline: Whisper to structured data in three hops

The voice-to-data flow has three stages:

  1. Browser captures audio via MediaRecorder API, ships it to our edge function
  2. Whisper transcribes the audio to text
  3. An LLM with function calling parses the transcript into a structured row insert

Each stage has its own failure mode. We found all of them.

Failure 1: mid-command language switching tanks transcription accuracy

Our early users were mostly Czech and Slovak. They'd start a command in English ("add a new row") and then switch to Czech for the actual data ("klient Novak, projekt redesign webu"). Makes sense: the UI is English, their data is local.

Whisper handles this poorly. When you set language to English, Czech segments come back garbled. When you set it to Czech, the English command prefix gets mangled. Auto-detect picks one language per audio chunk and sticks with it, so the switch mid-sentence produces a transcript that's half-correct at best.

The downstream LLM then tries to parse a broken transcript into structured fields. "klient Novak" becomes "client Nov" or gets dropped entirely. The user sees a malformed row, deletes it, and tries typing instead. After two or three rounds of this, they stop using voice altogether.

Root cause: Whisper's language model is monolingual per inference call. Mixed-language audio within a single utterance is an unsupported edge case, not a bug.

What we tried: We split audio at silence gaps and ran each segment through language detection before Whisper. This helped for clean pauses but failed for natural speech where the language switch happens mid-sentence with no gap.

What actually worked: We moved to a two-pass approach. First pass: transcribe with auto-detect, accept the messy output. Second pass: send the raw transcript to the LLM with explicit instructions to handle mixed-language input and infer the intended fields. The LLM turned out to be much better at understanding "klient Nov redesign webu budget 12k" than Whisper was at transcribing it cleanly. Accuracy went from roughly 40% to about 85% on mixed-language commands.

Failure 2: mic permission UX creates a 60% drop-off before first command

This one was embarrassing because it's not a pipeline problem at all. It's a browser UX problem.

When a user first clicks the mic button, the browser shows a permission dialog. On Chrome, it's a small bar at the top. On Safari, it's a modal. On Firefox, it's a dropdown that's easy to miss. About 60% of first-time users who clicked the mic button never completed a voice command. We assumed the pipeline was broken. It wasn't: they just didn't grant mic permission and didn't try again.

Root cause: The permission prompt appears with zero context. The user clicks a mic icon, gets a system dialog asking "allow microphone access," and hesitates. There's no explanation of what will happen, no preview, no "here's what it sounds like when it works."

What we changed: We added a pre-permission explainer: a small overlay that shows before we trigger the browser prompt. It explains what will happen ("we'll listen for your command and add it to the table"), shows a 3-second demo GIF, and has a clear "allow mic" button. Drop-off on the permission step went from 60% down to about 30%. Still high, but the users who get through now know what they're doing.

Failure 3: solo voice users churn 3x faster than collaborative ones

We expected voice to be a solo productivity feature: you're at your desk, you talk to your database, rows appear. But our retention data told a different story.

Users who created a workspace alone and used voice had a 7-day retention of about 12%. Users in shared workspaces (two or more collaborators) retained at roughly 35%. That's a 3x gap.

Our hypothesis: voice input feels weird when you're alone at a computer. You're essentially talking to yourself. In a shared workspace, there's social permission to use voice because someone else is also in the tool, even if they're not in the same room. The product feels more like a meeting tool than a lonely database.

What we'd do differently: We should have built voice-first for the collaborative use case from day one. Field workers calling in data to a shared sheet. Sales teams logging notes after calls into a team pipeline. The solo "talk to your spreadsheet" pitch sounds great in a demo but feels unnatural in practice. Our solutions pages now lean hard into team-oriented scenarios: craftsmen logging job site data, sales reps updating CRM after meetings, event planners coordinating on the go.

The decision tree: when voice, when typing

After three months of watching usage patterns, we built an internal framework for when voice input makes sense and when it doesn't:

Voice works when: the user's hands are occupied (field work, driving), the data is short and structured (one row, 3-5 fields), the language is consistent within a single command, and there's social context (team workspace, shared screen).

Typing wins when: the data is long-form (notes, descriptions), the user is in a quiet office alone, fields require precise formatting (dates, currencies, formulas), or the user needs to reference existing data while entering new data.

We stopped pushing voice as the primary input and repositioned it as one of three input modes: voice, chat, and direct cell editing. Voice is prominent but not dominant. The mic button is there, but we don't force an onboarding flow that starts with "try saying something."

What we'd build differently next time

Three things, in order of impact:

First, test the mic permission flow before building anything else. We spent weeks on Whisper accuracy when 60% of users never even got to Whisper. The browser permission UX is the real first gate, and we treated it as somebody else's problem.

Second, build for teams first. Solo voice-to-database is a solution looking for a problem. Team voice-to-shared-data is an actual workflow people already do (they just use WhatsApp and then manually transcribe). Start with the collaborative case and let solo use be a side effect.

Third, accept that voice will always be one input mode, never the only one. We named the product Voice Tables. That's a positioning trap. Users expect voice to be the whole thing. When it's flaky, the whole product feels flaky. If we were starting over, we'd call it something that doesn't promise voice-first and let voice be a surprise feature that delights instead of a core promise that disappoints.

The pipeline is better now. Mixed-language accuracy is around 85%. Permission drop-off is down to 30%. Retention for team users is climbing. But the biggest lesson isn't technical: it's that the hardest part of voice-first isn't speech recognition. It's convincing a person sitting alone at their computer that talking out loud is a reasonable thing to do.

Try Voice Tables if you want to see where we landed.

on June 28, 2026
Trending on Indie Hackers
I Was Picking the Wrong SaaS Tools for Two Years. Here's the Mistake I Finally Figured Out. User Avatar 116 comments Drop your landing page URL. I'll use Ferguson to tell you why visitors might be leaving User Avatar 66 comments Most early-stage SaaS companies miss churn signals — here’s how to catch them early User Avatar 31 comments Why Remote Teams Stop Talking (And Don't Even Notice It) User Avatar 23 comments How I Run a 1.7M Product Search Engine at 66ms on a $0 Hosting Budget User Avatar 19 comments I thought picking a voice for my app would take a day. It rebuilt everything. User Avatar 18 comments