Whisperbar
Privacy-first macOS menubar voice-to-text powered by local WhisperKit
// Built with
01 Problem
Cloud-based dictation tools (Otter, Whisper API, Dragon) require sending microphone audio to remote servers — unacceptable for private conversations, confidential work, and offline use. Existing local Whisper wrappers either lack a native macOS UX or suffer from "jumpy refining" where streaming transcript text constantly rewrites itself in front of the user.
03 Solution
Built Whisperbar — a native macOS menubar utility that captures microphone audio and streams on-device Whisper transcription via WhisperKit, with zero network round-trips. The UI is an NSPanel dropdown anchored to NSStatusItem using NSVisualEffectView vibrancy materials. A two-zone display with a LocalAgreement-style commit window solves the jumpy-refining UX bug by separating committed text from in-flight tentative text. Six runtime switchable themes (Mistral / Obsidia / Lumen / Haiku / Verso / Murmur) provide distinct brand identities. Every dictation session is persisted to ~/Library/Application Support/Whisperbar/history.json with debounced crash-safe Codable writes. Built end-to-end in pair-programming with Claude Code CLI as the primary development interface.
04 Outcomes
Qualitative
- Six runtime-switchable visual themes (Mistral / Obsidia / Lumen / Haiku / Verso / Murmur)
- Persistent history in Application Support with crash-safe debounced writes
- LocalAgreement-style streaming display avoids 'jumpy refining' common in Whisper streaming apps
- Zero cloud round-trips — fully offline-capable dictation
- Built fully in collaboration with Claude Code CLI as primary development interface
06 Constraints
- 100% local — no network calls, no telemetry, no cloud round-trips
- Native macOS menubar UX with vibrancy materials
- Streaming transcript must not visibly rewrite itself (no jumpy refining)
- History must survive crashes (debounced Codable persistence)
- Six themes switchable at runtime without restart
07 Innovation
Privacy-first local-only ML transcription on macOS with native menubar UX. Combines WhisperKit on-device inference with a two-zone streaming display and LocalAgreement-style commit window that eliminates the jumpy-refining UX bug common in Whisper streaming apps. Runtime theme switching across six distinct visual identities, all rendered through AppKit vibrancy materials.
Novelty: high

