-
Where the tokens stop
Beacon's builder takes credentials for Hardcover and Steam. The tokens stay on the user's machine; they never reach the deployed page or a shared export bundle. The boundary is a list of field names that two functions consult.
-
When 404 is the norm
ListenBrainz returns an MBID, not an image URL. Cover Art Archive 404s often enough that the placeholder is going to render almost as much as the real cover.
-
Renaming the Last.fm tile
Beacon used to have a Last.fm tile. It now has a Now Playing tile with ListenBrainz as a second source, and the rename was the move worth writing about.
-
I removed a glow but kept the purple
A federal judge had to rule that em dashes weren't enough to prove a student used AI. The same flattening is hitting design now. Why I cut a glow on Beacon and kept the purple, and how I tell which design choices to defend.
-
The 30-second undo
Beacon's import button overwrites your state file. One click, gone. So I put three things on top of it: a preview dialog, an auto-backup, and a 30-second undo toast.
-
We're not the only ones saying this
Tyler Denk runs Beehiiv. He's making the same ownership argument I keep making about link-in-bio, just from inside a $100M competitor to Substack. That's not coincidence; it's a category emerging.
-
Versioning the schema I didn't have yet
I added a __schemaVersion field to Beacon's config file before there was a v2. Three weeks later, I needed it. The case for stamping a version on every stateful file you ship.
-
Why Beacon has more colors now
I replaced Beacon's six-color palette with seven named slots. Counterintuitive simplification — more slots reduced friction, because each color finally meant something.
-
The time I shipped my API key in page source
Before Beacon shipped, I caught a security mistake on my own link-in-bio. A Hardcover bearer token grants account deletion. Mine was visible in view-source for a while.
-
Why I left Resend for Plunk
I migrated my email infrastructure off Resend, landed on Plunk, and built an open-source MCP server to close the last gap. Notes on the pricing curve, the open-source piece, and why this is the same story as everything else on this site.
-
Renting my online life
Every time I close a tab on another subscription notification, I notice the pattern. Nothing I've built online actually belongs to me.