03 / Shipped · iPhone + iPad · 2026
Tooth Fairy
Radar
My first app — and the one that changed how I build.
Parents stage the magic; kids watch the Tooth Fairy cross the map and wake up to a record of the moment. That’s the app. It’s also the repo where my workflow changed mid-project — and the repo remembers.
The repo remembers two eras
The original README still says: create a new Xcode project, then “replace the generated files with the files provided.” That’s code handed over as text, pasted in by hand — how I was working with AI when this started. Sitting right next to it: an agent instruction file and agent-co-authored pull requests from three months later.
The commit history tells the same story. First commit: an empty Xcode template. Four days later: the whole app arrives in one commit. On the App Store three weeks after that.
She's only ever over the night side of the planet
The radar isn’t a random shuffle. A thirty-line solar-time calculator — UTC plus longitude over fifteen — filters twenty world cities down to the ones where it’s currently between 18:00 and 06:00 solar time, and the fairy only patrols those. Open the app at noon in New York and she’s over Tokyo, for a real reason. The illusion is backed by arithmetic.
SOLAR HOUR = UTC + LONGITUDE / 15
The QA plan has a section called Chaos / Kid Testing
The adversary is a seven-year-old. Tap “Tooth is Under Pillow” twenty times fast: exactly one flight launches. The storage layer assumes the worst, too — every write lands in a primary and a backup key, corrupt data gets quarantined instead of deleted, and records written by version 1.0 still decode after four schema changes.
My favorite rule is in the iCloud merge: most fields are last-write-wins, but “has the child seen the morning reveal” merges asymmetrically. Once seen, no device can un-see it. Nobody’s kid gets the magic spoiled by a sync conflict.
Then I sent the agent back in
Months after shipping, I had a coding agent audit my first app. It found seven real defects: a deployment target set to a version of iOS that doesn’t exist, an iCloud change-observer that had been commented out — silently disabling cross-device sync — a settings screen hardcoded to say “Authorized,” two toggles wired to nothing.
Then came the rework: a 60fps timer became a proper display link, and two near-identical sync stores collapsed into one generic implementation at roughly half the code. My first app got a second education, and so did I.
WHAT IT TAUGHT ME
Shipping to real families is a different discipline than making a demo work. Kids spam buttons, parents switch devices at midnight, and the data you’re protecting is somebody’s first lost tooth. This app taught me to build for all of that — and it taught me what building with an agent could be.