Skip to main content
Auto-memory
Retell + Twilio
MCP ecosystem
Founder Pres.
Obsidian + QMD
Review pass
Claude / Codex
Convex
75K+ sold
SwiftUI CloudKit
Next.js + Vercel
1,350+ locations
Shopify
Session notes
Founder
MCP forks
<60s response
Operator chapters
Founder & CEO
121+ skills
Six figures raised
Founder office
back to grid
Projects2026

Whispa

A local-first macOS dictation app. Hold a hotkey, speak into any app, and the words land as text. Transcription and cleanup run on-device, with no account, no telemetry, and no audio leaving the Mac.

On-device
transcription + cleanup
System-wide
dictate into any app
Local-only
no account, no telemetry
Two ASR routes
FluidAudio · MLX
§01The workLive system

A local-first Mac app for one job: speak into any app and get clean text, without sending audio anywhere.

Whispa
SwiftUI · on-device ASR

A local dictation surface for the whole Mac.

Whispa turns push-to-talk speech into clean, inserted text without a cloud service: capture, transcription, cleanup, and insertion all run on the machine.

Whispa's current Home view with on-device dictation controls, a live waveform panel, readiness checks, and monthly usage totals.
Whispa's Insights dashboard with dictation counts, WPM, a 30-day activity heatmap, top apps, and most-corrected terms.
Whispa's current Settings Appearance tab with Forest, Tide, Violet, Ember, Graphite, and Light interface themes.
The workHome. Start dictation, open the assistant, and check the local engine before speaking. / Insights. Dictation count, speed, top apps, and correction history are calculated on the Mac. / Settings. Six themes recolor the whole app, and the choice stays on the Mac.
§02The pipelineEnd-to-end flow
01

Capture

Hold the global hotkey and speak into whatever app is in front. AVAudioEngine records the audio locally; nothing uploads.

push-to-talk · any app
02

Transcribe

On-device ASR turns speech into text. FluidAudio runs on the Neural Engine, with an MLX worker as the fallback route.

FluidAudio · MLX
03

Clean up

A local model fixes punctuation, dictionary terms, and code tokens, and validates risky edits before any text is inserted.

local model · validated
04

Insert

The cleaned text is pasted into the active app and the clipboard is restored, with a copy-only fallback when Accessibility is off.

frontmost app · clipboard-safe
§03What I builtPieces that compound

What's actually in the app.

The whole loop is local.

Mic capture, on-device transcription, local cleanup, and insertion all run on the Mac. The only network call is an optional one-time model download.

capture · ASR · cleanup · insert

More than a one-line dictation box.

It holds one to two minutes of speech using retained audio, then transcribes the full take for the final text. A command mode turns spoken instructions into edits and formatting instead of literal words.

retained audio · command mode

A dictionary that fixes the hard words.

A personal dictionary and snippet library keep names, product terms, and code tokens correct through deterministic repair, rather than hoping the model guesses them.

deterministic repair

You whisper, it types.

The name is the act, not a model. You speak quietly, the text appears in place, and nothing leaves the room to make it happen.

quiet · local · on the hotkey
§04Build rulesLocal-first · macOS 14

The rules I held the build to.

Selected rulesworking set · macOS 14
  1. Audio, transcripts, dictionary, and history stay on the Mac; the only outbound call is an optional model download.
  2. Finalize for quality: reprocess the retained audio for the best final text before inserting it.
  3. Cleanup has to preserve meaning, so risky edits are validated before anything is pasted.
  4. Insertion restores the clipboard every time, and falls back to copy-only when Accessibility is not granted.
  5. Local builds are signed with a stable identity so microphone and Accessibility grants survive every rebuild.
  6. English-first: the model and settings normalize to one language instead of pretending to handle all of them.
§05StackEvery tool earns its line
SwiftUI / UIAppKit / Hotkey + insertionAVFoundation / Mic captureFluidAudio (CoreML / ANE) / On-device ASRParakeet TDT 0.6B v2 / ASR modelMLX worker / Fallback ASROllama · LFM2.5 / Local cleanupSwift Package Manager / BuildmacOS 14+ / Target
§06ArtifactsReceipts and public proof

The app, the build script, and the local engine. Private, nothing published.

Whispa.app

The installed Mac app. Local and private, signed with a stable identity so microphone and Accessibility permissions persist across rebuilds.

local · signed
build_and_run.sh

One command that compiles the SwiftPM target, stages dist/Whispa.app, signs the whole bundle, installs to Applications, and verifies launch.

SwiftPM → dist/Whispa.app
Local ASR worker

A long-running on-device transcription worker. The Swift app owns capture, formatting, insertion, and permissions; the worker owns ASR and speaks newline-delimited JSON over stdio.

local engine · NDJSON over stdio