skip to content
voiceflow
back to work

/work · voiceflow

VoiceFlow.

System-level voice-to-text that turns speech into polished writing in any app.

year · 2025role · designed, built, shippedtags · AI, Desktop, Systemsread · ~1 minlive

§01 · architecture

How it moves the data.

§02 · problem

Voice input on desktop is broken. System dictation produces transcripts the writer disowns. Per-app integrations make the universal case impossible. Power users who think faster than they type have no good option.

§03 · approach

A system-level desktop app. Hold a hotkey, speak, release — polished text appears at your cursor in any application. Two-stage AI pipeline: Whisper for raw transcription, then gpt-oss for intelligent cleanup that removes filler words while preserving intent.

§04 · decisions

What was chosen.
What was rejected.

d/01
Rust native key listener for global hotkey
Electron globalShortcut

Electron's globalShortcut becomes unreliable when the app loses focus. Rust intercepts at the OS layer (IOKit on macOS, Win32 API on Windows), capturing 100% of hotkey presses regardless of which app is in front.

d/02
Two-stage pipeline (Whisper → gpt-oss)
Single end-to-end model

Whisper is excellent at transcription but outputs verbatim speech, fillers and all. gpt-oss handles contextual cleanup — it knows when 'like' is a filler vs. meaningful. Separating concerns lets each stage be tuned independently.

d/03
macOS Accessibility-based text injection
Clipboard paste simulation

Simulating a paste (copy, then Cmd+V) works in any text field, but it overwrites the user's clipboard and can race with clipboard managers. The macOS Accessibility APIs insert text at the cursor directly, so injection is safe in any focused field and the clipboard is never touched.

§05 · tradeoffs

What this costs.

  • t/01

    Electron adds ~150–200MB memory overhead vs. a native app. The cost of one codebase running on macOS, Windows, and Linux is paid once in RAM.

  • t/02

    API-based Whisper adds ~500ms latency vs. a local whisper.cpp model. The latency buys consistently better accuracy on technical vocabulary and accents — non-negotiable for the writing use case.

  • t/03

    Accessibility-based injection needs an explicit macOS Accessibility permission grant. One-time setup friction, in exchange for text insertion that never touches the user's clipboard.

§06 · impact

What this returned.

3–4×
typing-speed improvement
<1s
end-to-end latency
3
platforms supported

§07 · stack

ElectronRustWhisper-1TypeScriptReactNode.jsgpt-oss-120b
~1 min read