Skip to content
TODD BROWN
« All builds

Cadence

shipped

A proofread-by-ear desktop app I built because I'm dyslexic. Fully local. Shipped to an audience of one.

Claude Code · Electron · Python · FastAPI · an open-source speech model

What it is

Cadence turns a folder of Markdown files into narration that highlights each paragraph as it's read, so I can proofread by ear instead of by eye. It runs entirely on my laptop: no account, no subscription, no cloud upload.

It's shipped, to an audience of one. I use it constantly. It has never left my machine.

Why it exists

I'm dyslexic. Proofreading my own writing is the exact task my brain is worst at: the eye skips, autocorrects, and fills in what it expects to see. So I built the tool that lets me do it with my ears.

It started smaller than that. I asked a coding agent to get an open-source speech model running, expecting it to work out of the box. I ended up specifying the product I'd assumed already existed. A model is not a product. The harness is the product, and an agent will happily build the harness while you're still discovering you need one.

How it's built

The first prompt was 1,105 lines, and its ninth line told the agent not to write any code. It asked for an audit of the open-source repo, a product spec, architecture decisions, a phased roadmap, design requirements, and finally a prompt for a separate design agent. All six exist.

When the design came back, I had it graded feature by feature against the policy in that first prompt (essential, beneficial or decorative) and removed the decoration.

The core is Electron with a Python sidecar. Documents parse into content-addressed blocks, so highlighting, notes, change detection and audio caching all line up on the same units. When I revise a manuscript, only the changed paragraphs re-render, and notes follow the text that moved. When a match is uncertain, the note is flagged for review rather than silently reattached.

The whole roadmap was built across three consecutive days in July. Two later single days added project management and a notes export. The first came from friction I hit in real use: nothing in the app told me which folder a project was actually reading from.

What broke

An adversarial review before I trusted it. The diff-and-reconcile engine was the riskiest component, so I had it attacked first. Three confirmed bugs, each fixed with a regression test, before it was declared safe to build on.

A Windows quirk that failed silently. Every chapter in one project showed as stale and wouldn't regenerate. Something had marked the whole folder Hidden, and Windows refuses to overwrite a hidden file. The JSON writes kept succeeding, so the app looked fine while the audio never updated. The worker also couldn't log a failed chapter, so the errors vanished. Both fixed.

Receipts

Figure What Source
368 backend tests (305 test functions, expanded by parametrization) test files + project log, 2026-08-18
6.94 h narration from a 63,000-word manuscript, in 98.2 min of GPU time generation manifest
2,995 segments rendered across two real projects, 0 failed generation manifests
51 of 51 knowledge-base documents narrated generation manifest

All measured. More on the receipts page.