v0.1.0-alpha — Sprint 1 MVP
Pre-releaseFunButton v0.1.0 — Sprint 1 MVP (alpha)
Read first: This is an unsigned alpha. macOS Gatekeeper will block first launch.
Workaround: `sudo xattr -cr /Applications/FunButton.app`
What works
- ✅ Right Option push-to-talk hotkey (rdev listener, modifier-only key support)
- ✅ Audio capture via cpal (mono, native sample rate, in-memory WAV PCM-16)
- ✅ Groq Whisper Large v3 Turbo transcription (~300 ms TTFT)
- ✅ Groq Llama 3.3 70B cleanup (FAST default)
- ✅ Local cleanup via Ollama at `localhost:11434` (auto-detects, falls back to Groq)
- ✅ Code mode — auto-activates in Cursor / VS Code / JetBrains / Vim / Terminal / Xcode. Handles spoken symbols (`open paren`, `arrow`, `equals`) + casing taxonomy (camelCase / snake_case / PascalCase / kebab-case / SCREAMING_SNAKE / dotted)
- ✅ Frontmost app detection via AppleScript (Cursor, VS Code, JetBrains, Vim, Terminal, Xcode, Mail, Slack, Discord, Messages)
- ✅ Clipboard + Cmd+V injection with prior-clipboard restore
- ✅ Menu bar tray with state-aware tooltip (idle / recording / transcribing / cleaning / pasting)
- ✅ Floating recording pill (transparent, always-on-top)
- ✅ Settings window (Groq API key, backend toggle, Ollama health check, today's word count)
- ✅ macOS Mic + Accessibility permission prompts (Info.plist usage descriptions)
- ✅ GPLv3 desktop core, ~36 MB unsigned .app, ~5 MB DMG
What's not in this drop yet
- ❌ Bundled local LLM (Sprint 2 — currently you need Ollama installed: `ollama pull qwen2.5:1.5b`)
- ❌ Email / Slack / Raw modes (only Auto + Code shipped — Sprint 2)
- ❌ Custom dictionary, transcription history, re-paste shortcut (Sprint 2)
- ❌ Code signing / notarization (use the xattr bypass below)
- ❌ Universal binary (arm64-only — Intel Mac users: build from source)
- ❌ Auto-updater (Sprint 3)
- ❌ Windows + Linux builds (post-MVP)
Install
- Download `FunButton-v0.1.0-macos-arm64.dmg` (or `.zip`).
- Open the DMG and drag FunButton.app to `/Applications`.
- First launch will be blocked by Gatekeeper. Open Terminal and run:
```bash
sudo xattr -cr /Applications/FunButton.app
``` - Open FunButton.app. macOS will ask for Microphone and Accessibility permissions — grant both.
- Click the FunButton tray icon → Settings → paste your Groq API key (or install Ollama for local mode).
- Hold Right Option in any text field. Talk. Release.
Verify your install
- After grant, hold Right Option for ~2s and say "this is a test of the fun button". Release. The cleaned text should appear at your cursor in ~1.5s.
- For code mode: open Cursor, hold Right Option, say "open paren camelCase user name comma age close paren arrow user name plus age", release. You should get `(userName, age) => userName + age`.
Local mode (no API key)
```bash
brew install ollama
ollama pull qwen2.5:1.5b
ollama serve # if not already running
```
In FunButton Settings, switch backend to Auto or Local. Recording → cleanup runs entirely on your machine. No internet required after install.
Known issues
- DMG was built via `hdiutil` (Tauri's `bundle_dmg.sh` AppleScript styler hits a Sequoia timeout). Plain DMG, no styled background. Functional.
- Right Option uses `rdev::Key::AltGr` mapping. If your keyboard layout differs, the hotkey may not fire — settings UI for remap is Sprint 2.
- The first time you hold Right Option, macOS may not have triggered the Accessibility prompt yet. Trigger it manually in System Settings → Privacy & Security → Accessibility, then enable FunButton.
Build from source
```bash
git clone https://github.com/todddickerson/funbutton.git
cd funbutton/apps/desktop
npm install
npm run tauri build -- --target aarch64-apple-darwin
```
Sprint 2 (Sun by EOD)
Tone modes (Email / Slack / Raw), custom dictionary, transcription history, bundled local LLM (Qwen 2.5 1.5B Q4 GGUF), re-paste shortcut, polished onboarding.
Roadmap
See PRD.md for the full plan.
The brand wedge is in COMPETITIVE-LANDSCAPE.md: dev-grade, local AI cleanup, lifetime + GPLv3.
—
🤖 Built autonomously by Claude Opus 4.7 on 2026-05-08.