Speech Capture App — Scope & Product Doc
Problem Statement
No existing Android tool reliably supports long-form voice capture for app walkthroughs, feature ideas, and bug descriptions — without losing content mid-recording, requiring constant screen attention, or introducing friction like ads, unclear premium tiers, or hard time caps.
Alternatives Explored
| Tool | Why it falls short |
|---|---|
Gboard Voice Typing |
Requires an active on-screen input field, no background/persistent recording, silently drops speech during pauses |
Speechnotes |
Cluttered UX, distracting ads, confusing premium tiers |
AudioPen |
Clean free tier, but capped at 2 minutes per recording |
Windows Voice Recorder |
Has the desired persistent/reliable workflow — but no native Android equivalent exists |
Goals
-
Persistent, reliable long-form recording that survives pauses and backgrounding
-
No ads, no time caps, minimal UI
-
Fully offline / local-first after the one-time local-model download — no cloud STT or cloud LLM dependency (avoids pricing/rate-limit management)
-
Local LLM cleanup pass — turn messy dictation into structured text (bug report / feature note / walkthrough doc)
-
Reusable local-LLM capability — same module usable by Homey
-
Built as a standalone app on Kotlin Multiplatform (KMP) — Android is the primary/first target, with iOS and desktop as future targets
Non-Goals (MVP)
-
Custom styling / theming
-
Third-party integrations (cloud storage sync, sharing, etc.)
-
Multi-language support
-
Custom vocabulary / prompt tuning
-
Multiple export formats
-
Any UI polish beyond functional
-
iOS and desktop builds (KMP keeps these possible later, but MVP ships Android only)
MVP Scope
Capture
-
Single-button start/stop (Jetpack Compose)
-
Foreground service (
FOREGROUND_SERVICE_MICROPHONE) — recording continues while backgrounded / navigating other apps -
Continuous
AudioRecordcapture into local WAV chunks; after Stop, local Whisper (whisper.cpp) transcribes those chunks in order — avoids the restart-boundary word loss of `SpeechRecognizer’s silence-restart loop
Success Criteria
-
Records continuously for 15–20+ minutes with no dropped audio across pauses
-
Survives backgrounding, screen-off, and app-switching without losing the session
-
Cleanup pass produces usable structured text without heavy manual editing, for a typical dictated walkthrough or bug report
-
Zero ads, zero recording-length cap, zero network dependency for the core record → transcribe → clean path
Decided: Module + Standalone App
-
Shared local-LLM module — LiteRT-LM cleanup capability built as a standalone local library, consumed by both this app and Homey.
-
Capture UI ships as its own standalone app, not folded into Homey.
-
Platform strategy: Kotlin Multiplatform. Android is the primary/first target; iOS and desktop are future targets, not part of MVP scope.