I Closed the Checkout Tab and Built My Own Dictation App With Gemma 3 1B
A 1-billion-parameter model running locally on an M1 MacBook cleaned up my transcriptions well enough to cancel a subscription. The build-vs-buy math for small AI tools just changed.
For about a year, the honest answer to “should I build this or just pay for it” was: pay. Local models were too big, too slow, or too dumb to be worth the afternoon. That answer quietly stopped being true, and I found out on a checkout page.
I was on the Wispr Flow checkout, about to buy an annual subscription for a dictation app. I’d spent fifteen minutes doing the math on whether I’d use it enough to justify it. The moment I start doing that math, I already have my answer. I closed the tab.
Not because the product is bad. It’s genuinely well-built. I just didn’t want a subscription running forever for something I use a few times a week. Two days later I had my own version running locally on the MacBook, free, producing output that was close enough that I haven’t gone back.
What I actually wanted
Wispr Flow does one thing well. You speak, it transcribes, and the text lands wherever your cursor is, system-wide. No window switching, no copy-paste from a separate app. I wanted exactly that, minus the recurring bill.
The stack that worked
The obvious start was Whisper. OpenAI’s model is open source and several Mac apps wrap it. I tried three. Most had friction I didn’t want: clunky setup, half-finished menu-bar apps, or quality that fell apart with background noise. Whisper got the words right but produced raw output, no punctuation, run-on sentences, every “uh” and “um” left in.
The missing piece was cleanup, and that’s where I tried something I hadn’t seen anyone do. Gemma 3 at 1 billion parameters is small enough to run entirely on CPU and the Neural Engine on an M1, no GPU, no cloud. I pointed it at Whisper’s raw output with a short prompt: clean up this transcription while preserving the speaker’s meaning. That was the whole prompt.
Whisper does the speech-to-text. Gemma 3 1B adds punctuation, strips filler, and fixes sentences that make sense out loud but read badly on the page. A small menu-bar app ties them together and pipes the result to the cursor. Total build was parts of two days, and the coding was maybe half of that. The rest was tuning the Gemma prompt until the cleanup felt natural instead of over-edited.
What surprised me
The quality gap is smaller than I expected. Wispr Flow has clearly been iterated on, and it handles accents, jargon, and noise better than my setup. If you dictate four to six hours a day, that polish is worth paying for and I’m not pretending otherwise.
But the thing I didn’t expect was Gemma 3 1B doing the cleanup this well. I assumed a model that small would over-correct or invent errors. Instead it made spoken text readable without changing what I meant. A billion-parameter model, running as a background process on a laptop, quietly doing a job I’d been renting.
The math that flipped
Two years ago, a useful local LLM meant a 7B model minimum, careful quantization, and slow inference. A 1B model wasn’t worth considering for anything generative. Gemma 3 1B is fast enough, accurate enough, and light enough to sit in the background without slowing the machine down.
The implication is narrow but real. Tools that needed a subscription because they needed cloud inference are now buildable locally, at least the ones whose core job is a single repeatable task: transcription cleanup, text classification, quick summarization. The model is free, the compute is already on your machine, and the subscription becomes a choice rather than a requirement.
I still pay for plenty of software where the value is obvious: network effects, constant model updates, polish I’d need weeks to rebuild. But for a commodity model doing a commodity task, I build before I subscribe now. That calculus is new. A year ago it wasn’t true, and I keep having to remind myself it is.