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.
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 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.

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.

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.

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 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 Stack
- A music library on my own hardware, streamed through Icecast and played out by liquidsoap
- A schedule engine of blocks, each a rule (shuffle, top-played, mood, comeback, artist, album, on-repeat) that picks fresh every time from the station's own play history
- Broadcast-style interrupts: station IDs, time and weather on the hour, and shows dropped in at track boundaries
- A TTS DJ in a single recurring voice, naming songs and blocks, rendered by a local text-to-speech model
- Happy Accidents, a generative show that pairs a song with a same-day historical fact and lets a local model own the connection
- Honest scrobbling, where the station reads the live stream's title and records each song at the moment it hits the air
- Nucleus, a DJ that learns from scrobbles and skips, proposes a week at a time, and keeps a Buy List that hunts down streaming-only records
- A public page with now-playing, schedule, and week views, a browser Listen-live button, and a living design system rendered from production code
- Mac Mini M4 for development, a GPU Linux server for inference, and a studio box for TTS and playout
