Multilingual "small" instead of English-only
Why: I started with base.en, then switched so I could dictate in Serbian too.
Trade-off: about 3× bigger (181 MB vs 57 MB) and slower. English is solid; Serbian is still a bit messy.
Projects Pichi case study
Hold Fn, speak, and the text lands at your cursor. A free, fully offline dictation app for macOS. My experiment in rebuilding a Wispr Flow-style tool that never leaves my laptop.
Hold fn → speak → release → text appears
I talk to coding assistants all day, and speaking is faster than typing. Wispr Flow does this well, but it's a paid subscription and my transcripts would go through someone else's servers.
I wanted to see if I could reverse-engineer the same feel with four rules: free, local, offline, and light enough to run next to my dev tools on a MacBook Air. It's a personal tool, not a product.
965 lines of Swift in 11 files. No third-party Swift packages.
CGEventTap watches the Fn key in every app.AVAudioEngine buffers the mic while Fn is held.What I chose, what I gave up for it.
Why: I started with base.en, then switched so I could dictate in Serbian too.
Trade-off: about 3× bigger (181 MB vs 57 MB) and slower. English is solid; Serbian is still a bit messy.
Why: one Cmd+V is faster and more reliable than typing character by character, and it avoids autocorrect.
Trade-off: the clipboard changes for a moment, and it can't work in password fields, which macOS blocks on purpose.
On quit, the GPU library tore down Metal while my whisper context was still alive, and an assertion killed the app. Now I free the context before exit, on the same queue that runs transcription, so it also waits for any work in progress.
It wasn't frozen. My silence filter was throwing away quiet speech without a sound. I lowered the threshold, added volume normalization (capped at 15× so noise isn't boosted), and a soft "tink" when a clip is too quiet.
From a written plan to a tool I use every day.
* Measured with the smaller English model during development. I haven't benchmarked the current model yet.
Claude Code wrote the code, in a language I don't know. That was the point of the experiment: how far can I get by directing AI well?
My part was the product. I wrote the PRD and split the work into phases, made the privacy-first decisions, and did all the testing on a real machine: holding the key, speaking, and reporting exactly what broke. My other projects are code I wrote myself; this one shows the other side.
Pichi runs only on my Mac for now, so the demo video is the best way to see it.
It's a personal tool for now. A Windows version and open-sourcing it are on my list.I'm looking for my first role as a junior full-stack or backend developer, remote or in Belgrade. Let's talk.