Skip to content
sysout.dev

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 AudioRecord capture 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

Local Processing

  • Local LLM cleanup pass via LiteRT-LM is planned after Whisper quality validation

  • Current output: locally stored raw transcript; structured cleanup output is a later pass

Output

  • Save transcript locally

  • Copy / plain-text export (planned after the core local pipeline)

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.

Next Step

Technical design doc.