Today I Learned
Reading Open Library without hammering a nonprofit
Book data from a charity's servers, for free — which means the interesting question isn't how to fetch it, but which answers you're allowed to remember.
No screen should know where the data lives
One synchronous read API hides whether books live on the device or in an account; loading state is the trade-off.
Three small apps can share one Supabase project
Three small apps can share one Supabase project safely if schemas stay additive and browser keys are treated as public.
The safe way to kill a legacy system is called strangler fig
The incremental-migration pattern you already reach for in legacy code has a name that's easy to forget — and a plant behind it worth remembering.
A mounted bucket is not a database — even when SQLite seems to work
A mounted cloud bucket can make SQLite look persistent while breaking its guarantees; Firestore brings different traps.
One tool shipped, one never ran, and neither turned CI red
The real migration numbers: 5.2×, not 35×, plus a lockfile regeneration that triggered the supply-chain scanner.
The Firefox port I budgeted for didn't exist
Chrome and Firefox can load the same extension code unchanged; permanent installation is where their paths diverge.
Coding from my phone works because none of it runs on my phone
Claude Code on the web runs each session in a cloud VM, so closing the browser doesn't stop the work — I shipped two small apps from a train with no laptop.
Most reports bury the one line that matters
Why the verdict belongs at the top of a report, and the two honesty habits that let people trust it there.
I told Claude Code to build its own status line
The status line is just a script that gets handed a JSON blob — git branch, files changed, usage limits — so building one is mostly describing what you want.
Agile's feedback loop starts one slice too late
A disposable prototype can move stakeholder feedback ahead of the first production slice, if the team really deletes it.
Four tools do three jobs, and I wait on all of them
Both my ecosystems grew a single fast binary that replaces most of the code-quality stack. Two thirds of that swap is safe; the third part has to earn it.