Daily Notes App
A phone-first Next.js webapp I built to mirror my daily Claude Code tips and terminology notes as a scrubbable audio player plus elegant markdown reader, with two daily pushes, measured chapter timestamps, lock-screen controls, and a permanent archive to my second brain. The sibling of The Rabbit Hole, reusing about eighty percent of its scaffolding.
The PC-side daily note works. A launchd job generates two terminology cards and two practical tips every morning and drops them in a markdown file on my Mac. It does the job when I’m at the desk. The problem is I’m not always at the desk. I wanted the same discipline on the phone, with a player that matched the quality of a real podcast app, and I wanted every past day browsable with its audio so nothing quietly disappears into a folder.
What I built
A Next.js 16 dark-mode webapp, installed as a PWA on my phone, sitting on top of the same Mac worker that already generated the daily content. The port took about three hours because I reused the scaffolding from The Rabbit Hole almost wholesale, the same Mac-worker-plus-web-queue pattern, same audio desk component, same Blob layout.
Two pushes a day, never three. A morning delivery when the content is ready and a backup reminder in the afternoon for the days I didn’t open it in the morning. Sundays skipped. Twelve pushes a week maximum.
Measured chapters, not estimated. Same discipline as The Rabbit Hole. The speak script emits cumulative audio samples per section, the player reads the chapter file alongside the audio, and tapping a chapter lands on the exact word. Four chapters per day, Term 1, Term 2, Tip 1, Tip 2.
Lock-screen controls. The audio desk uses the MediaSession API so the iOS Now Playing screen shows play, pause, seek, and title even when Safari is backgrounded. Scrubbable seekbar with haptic vibrate on touch. Skip plus or minus fifteen and thirty seconds. Speed cycle that persists per-device in local storage. Resume position per-day so the afternoon reminder picks up where I stopped.
Archive-first. Every morning, before the webapp even notices, the Mac writes a verbatim copy of the day’s note into my Obsidian vault with rich frontmatter. That’s the permanent record. The webapp reads Blob; Blob is ephemeral. If the hosting layer disappears tomorrow, the knowledge layer is intact.
Why a sibling, not a fork
The Rabbit Hole solved the hard problems first, measured chapter timing, the Mac worker plus web queue pattern, the cross-tab audio singleton, the read-modify-write race on shared aggregates. Once those were solved, adding a second app took hours instead of days. That’s the real unlock: one well-designed architecture turns every subsequent phone-first personal app into a weekend port rather than a new build.
What it delivers
Every morning I get a push. I tap it, the player opens, and the day’s four chapters play on the way to the first meeting. The markdown view sits below the player, ready for the moments I want to read rather than listen. The library grid at /library shows every past day as a card, first-tip title plus play icon, phone-primary layout. The desktop view is a pleasant accident. The knowledge stays with me; nothing lives only in a folder I’ll never open again.