Reading this with an AI? Start at /for-agents/ (orientation) or /llms.txt (index).

Skip to content
TODD BROWN
« All builds

Audio Apothecary

shipped

A generative audio app for focus and sleep, built in six days. Shipped to my own phone, not a store.

Claude Code · Rust · Flutter · Dart

What it is

Audio Apothecary is a generative audio engine for building "Potions": timeline-driven auditory programs for focus, sleep and regulation. It's explicitly not a DAW, a sample player or a music composer. The stack is a Rust workspace (a portable, allocation-free engine core, a UI-agnostic controller, a device layer) bridged to a Flutter/Dart mobile app.

It's shipped, to my own phone. It ran end to end against my own acceptance checklist on 15–16 August 2026: install, hearing, pouring, combining potions, and a 33-minute locked-screen soak, all passing. It has never been published to an app store.

Why it exists

The name is the honesty policy. An apothecary mixes tinctures for a specific ailment; the research on functional audio shows real but inconsistent, individual effects, so the product is built for personal experimentation rather than a universal claim. No clinical or health-benefit claims anywhere in it.

How it's built

187 commits across 6 active days. Work ran in named, ID-tagged parallel lanes with a single-writer rule on the core engine file, and roughly 29 named architectural decisions were logged along the way. Two gates cover it: a CI-enforced check that runs the full test suite, lints, and two dependency-boundary greps proving the engine core never depends on UI or device code; and a second, non-CI mobile gate with its own distinct "blocked" exit code, separate from "failed."

What broke

On 11 August, before any real listening happened, I ran a five-agent review pass with independent web research against the finished build. It found two showstopper bugs the automated test suite had missed entirely. Stereo panning did not exist: a trig identity made the left and right gain formulas produce the same number for any pan value, so every pan position sounded identical. And the "master limiter" was actually a waveshaper with no threshold or envelope, applying constant audible distortion to every sample. Both were fixed the next day.

A later decision, logged as AD-20, had an agent infer that composing a new potion from scratch was out of scope for the phone app — never ratified by me. I reversed it and added a rule: every future decision carries an operator-or-agent tag until I ratify it.

Receipts

Figure What Source
187 commits across 6 active days git log
1,211 test functions (671 Rust + 540 Dart) grep counts, current tree
2 showstopper bugs found by a 5-agent review, before any listening project review, findings P0.2/P0.3
33 min longest verified locked-screen background-audio soak, operator-run listening log

All measured. More on the receipts page.