A stream-of-consciousness look at rebuilding my music recommender.
R
Swift
Side-Projects
Music
Published
July 2, 2026
At any given moment, I have about 100 ideas all circling around. As to which idea gets the most attention, well—that is about as random as a Lava Lamp Array generating cryptographic seeds.
The Music Project Roots
Last night, I found myself deep in the weeds of rebuilding my music recommendation project. This application is incredibly close to my heart. It was one of the very first data science side-projects where I successfully combined my love for programming in R with my obsession for discovering new music.
Show the R Code
library(visNetwork) # My favorite network graph tool!library(tidyverse) # Load file showing Allie X and Magdalena Bay Similarityax_mb <-read.csv("files/ax_mb_edge.csv")# Build Nodesnodes <-tibble(id =unique(c(ax_mb$from,ax_mb$to)),label = id,image ="circularImage",shadow =TRUE )# Common Artists from both seed and children# Allie X, Magdalena Bay, LIZ, # Rina Sawayama, and Sky Ferreiralocations =c(1,2,4,7,8)# Create Color Changenodes <- nodes |>mutate(loc =row_number(), color =if_else( loc %in% locations,"#2a9d8f","#0d3b66") )# Build Edgesedges <-tibble(from = ax_mb$from,to = ax_mb$to )# Combine into network graphvisNetwork(nodes, edges) |>visOptions(highlightNearest =list(enabled =TRUE, degree =1, hover =TRUE ) ) |>visInteraction(zoomView =TRUE ) |>visPhysics(stabilization =TRUE )
Beyond personal use, it was an educational cornerstone for me. It was a tool I regularly showed to my students to spark their imaginations and say:
“This is exactly what you can build when you learn R.”
The Migration: Moving to Apple Music
As these tech stories usually go, Spotify ended up changing their developer API platform rules. Rather than letting the project die, I decided to migrate the entire back-end framework over to Apple Music.
There was just one problem: I don’t know Swift at all.
To bridge the knowledge gap, I’ve been pair-programming with Claude1. We have been figuring out the cleanest way to replicate my past logic while heavily modifying the User Interface (UI) and User Experience (UX).
Building for an Audience of One
While coding last night, I hit a massive wall of clarity. I realized I was over-engineering the application to make it palatable and perfect for other people.
But I didn’t create this for other people. I originally built it for myself.
Once I stopped trying to design a commercial, one-size-fits-all product, the development felt real again. I sat back and looked at how I actually discover music in real life:
I look at what a platform recommends as a similar artist.
I skip around their tracks, listening for about 5 seconds.
I quickly decide whether to discard or keep them.
Now…just to implement that mechanic!
About This Space
If you stick around this blog, you are guaranteed to encounter more stream-of-consciousness thoughts, weird technical tangents, and dots that you might not immediately know how to connect (I don’t either!). I promise it will make sense eventually (maybe!).
Thanks for reading. Let’s see where the next lava lamp bubble floats!
Footnotes
I have mixed feelings on the vibe-coding label, so for now I am going to just use a different phrase to mollify myself.↩︎