← Builds

Build · Internal

Nucleus Radio

A personal radio station built on the music I own, one that schedules itself, introduces its own songs, runs its own shows, and tracks down the records I've only ever streamed.

Tune in to the station ↗

Personal station · self-programming schedule · TTS DJ · generative shows · a Buy List that closes the gaps

Challenge

A few years ago my family talked me into a streaming subscription. I came around slowly, then got hooked on the exploration, chasing one artist into the next. After a while Spotify started telling me, every week, how many times I'd played some band, as if I'd gone looking for it, when its own playlists had been rotating the same handful of names past me for days. The exploration dried up. The deep tracks and hidden gems I used to reach for had somehow been algorithmed away from me.

I self-host the rest of my infrastructure, media library included, so I started wondering how to play my own collection the right way, while honoring the music I'd found and worn out during my time renting songs from the streamers. I wanted a station, something with a schedule and a point of view, running on my own collection and my own hardware. And I wanted it to be a place where the rest of what I build could show up, the Tugboat briefings, the Feed and Thread reads, the text-to-speech work, and the generative writing, all of it airing between the songs like segments on a broadcast.

Build

So I built it a piece at a time, and that turned out to be the whole point. First it was just the music on an open port, streaming to a browser. Then a stream URL I could point a radio app at, so it went where I did. Then metadata and album covers, so it carried itself like a station. Then a schedule, with blocks of programming like Mellow Sunday and Overnight Open. Then a TTS DJ that names the songs as they land, and then the blocks too. Then time and weather on the hour. Then a show. Then, slowly, a DJ with a mind of its own, one that watches what plays and when, learns from my scrobbles and my skips, and starts making suggestions.

The Nucleus Radio station page: a now-playing hero with album art, an up-next queue, and a recently-played list, under an ON AIR light and 8000 on your dial
The station page: now playing, up next, and recently played

The schedule programs itself. Each block holds a rule, and every time it comes up it reaches back into the same history the station is writing. The station learns from itself. When a Comeback Shuffle digs up a song I hadn't heard in years and airs it this morning, that play lands in the same table the pickers read, so by the afternoon it's back in the pool of recent favorites. What I play shapes what plays next.

Today's schedule on the station page: a stack of programming blocks, each with a start time, a rule name, and a description, with Nucleus Radio shows tagged
Today's schedule, each block a rule reaching into the station's own play history

One of the blocks writes itself, too. Happy Accidents picks a song with a known release date, digs up something that happened on that same calendar day in a different year, and asks a local model to write a DJ intro that connects the two with total confidence. The stretch is the joke. If a pairing falls flat, it reaches for a different piece of history and tries again, so the host keeps its footing. A dozen of those become an hour-long episode, rendered ahead of time and aired on its slot, in the same measured voice every week.

A Happy Accidents episode page: a show-open intro, then numbered segments pairing a song with a same-day historical event and an AI-written DJ intro
Happy Accidents, a show that writes itself, each song paired with a same-day fact

The DJ side is where it got personal. Nucleus, the voice of the station, keeps a set of beliefs about what I like, weighted by how it learned them, my own words outranking a guess it drew from a skip. It proposes a week of programming for me to approve, rests the artists I've heard plenty of, and brings back the ones I love. And it keeps a Buy List. Every track I've scrobbled from streaming but don't own is a gap, and the station treats that gap as a job, routing it to my own downloader for a proper copy, falling back to a second source when it needs to, and telling me in its own words what it closed overnight.

The Nucleus Radio picks dashboard: every track that has aired broken down by block, a top-repeats list, and per-track controls that feed a Buy List and Banlist
The DJ's picks, every track that aired by block, with a Buy List and Banlist to steer it

Outcome

All of it comes together at station.gogomito.com, a page that shows what's playing now, what's coming up next, the day's schedule, and the week ahead, with the shows given their own blocks and their own descriptions. There's a Listen live button that plays the stream right on the page, and the same stream drops into any radio app. The scrobbles are honest, too. The station reads the live stream's title and logs each song at the moment it hits the air, a few minutes after it was queued.

The week-ahead grid on the station page, seven days of stacked programming blocks with shows tagged and the current block lit
The week ahead, shows tagged and the block on air right now lit up

The whole look is documented as a living design system rendered from the production stylesheet, a dark broadcast field with a pulsing on-air light and 8000 on the dial. It started as music on an open port. It's a station now, and it's still the same project, still getting one more layer whenever I think of one.

The Nucleus Radio living design system: the masthead, a nine-token color palette, and the typography scale, rendered from the production stylesheet
The living design system, every component rendered from production code

The Stack