Lotl
2026 - Present
ProfessionalAt work I'd started keeping records of my conversations. Zoom transcription, Claude, and a pile of other tools as proof-of-concepts. Then I wanted to analyze myself: what was said, when, how I said it, how I did. Then I wanted help during the call, answers pulled from my own prep documents before things went sideways. Every AI notetaker helps after the meeting, and on a work laptop nothing is allowed to leave the machine anyway.
Lotl is the Mac app I built to get that. It captures system audio, so it works with any app and nobody has to admit a recorder bot to the call. Apple's on-device speech model does the transcription by default. Deepgram is an opt-in cloud alternative, with your own key stored only in the macOS Keychain and never synced. It's a Tauri app, Rust for the audio side and React and TypeScript for everything that iterates. It was my first desktop app and my first serious Rust, built with a lot of LLM assistance, and I failed with a few patterns before finding ones that fit.
Once it was listening to real conversations, the only acceptable default was that nothing leaves the machine. I think that one constraint made most of the other decisions for me. I rejected proxying audio through my own servers. I rejected iCloud Keychain sync because it puts secrets in someone else's infrastructure. The default path needs no key at all.
About sixty architecture decision records back those choices. My favorite is "silence is an error state." When mic permission is denied, macOS hands you all-zero audio buffers with no error. I recorded half a minute of nothing before I noticed. The fix was to check permission before starting and detect silent audio at runtime.
What it is today
- My dictation tool. I click the widget, talk, and let Claude Code interpret it. I bought a Stream Deck for the start and stop hotkeys, and it pairs with claude-helpers as one ecosystem.
- My main notetaker. It's my memory.
- On the side: practicing for exams, meetings, and interviews. I've also used it to analyze my own speaking habits and work on how I communicate.
- Live coaching, in development. It surfaces the fact you need, cited to the prep document it came from, and flags risky statements as they happen. It's experimental and not in the public build while I work on cost controls and measurement.
The first version went out to friends in January 2026. Version 0.2 shipped in September 2026. It's not a private beta anymore. It's an open beta: public at lotl.co, but I'm not advertising it. It ships as a signed, notarized Mac app that updates itself.
What I learned
- Pick the one constraint early. Once Lotl was listening to real conversations, "nothing leaves the machine" made most of the other decisions for me.
- Silence is an error state. macOS hands you all-zero audio buffers when mic permission is denied, with no error. Check permission before you start, and detect silent audio while running.
- Rust for the audio side, TypeScript for everything that iterates. A background app that runs during meetings needs predictable latency and memory safety. The UI needs fast iteration.