Sun Mar 29 2026
Do you use Apple Music but your best friend uses Spotify and you find it hard to send each other music? I knew the feeling, and that is why I created River of Babel last year. I wanted an easy, seamless web app that made it easy to send links to your friends who were on other services.
I started coding it in late April and launched at the beginning of June, 2025. I was very proud of the program and I used it myself many times in the months that followed. As with any programming project, there was room for improvement and I kept thinking of features I wanted to include. As it would turn out, I would only ship four (4) releases before forces outside of my control would cause me to pull the plug on the project.
Enter Spotify. On February 6th, 2026 they announced via blog post they would be significantly restructuring their API, removing endpoints and, most critically, restricting the use of the developer platform to users who had a premium subscription to Spotify. I was already paying for a subscription to the Apple Musickit API to get this project running, but Apple Music did not have to be pressured into ceasing to run ICE Recruitment ads on their platform. They have their own shortcomings, sure, but Spotify is, and has been, a thorn in the side of musicians and users for a decade now.
True, Spotify’s API was well documented and had been much easier to work with than Apple’s nightmare of a developer platform. However, I am reminded of something I wrote in a paper to my professor in grad school, when I was using the Spotify API to build an album of the year tool. I compared Spotify to ISIS, in that during their reign in the Islamic Caliphate in the late 2010’s, ISIS had a phenomenal bureaucratic organizational system. However, that statement of fact does little to redeem the terror they wrought on their region and abroad, and how many lives they disrupted. This is how I view the Spotify API - it is well done. However, said compentency does little to offset the fact the company is, time and again, on the wrong side of history and do more to diminish art and artist’s livelihoods than the other way around. I stand by this comparison.
Bearing all this in mind, I quickly decided I would not become a paying member to Spotify and thus River of Babel would have to die. All the same, I got a lot out of this project and want to break down how I approached it, the stack I used, and what features I wanted to, but was ultimately not able to, implement. In the next blog, I will do a deep dive into the JWT authentication scheme I used for music in hopes it may help someone and save them hours of banging their head against the wall.
The spec sheet I wrote up for this project was almost comically sparse. In a past life, I spent many hours writing spec sheets for software and its attendant features. This time though, I pretty much knew what I wanted, I just had to spell it out.
Goal: Allow users to input a link to a song/album from one streaming service, and the app spits it out in a copyable link in another target streaming service. Ie. Apple Music to Spotify
Requirements
- Web app
- SPA
- Triggers backend process that interacts with the target service API
Then I attached this very sophisticated mock up of the services.

Visionary.
The stack for this program was
I used Vue3 because I am most familiar with it, and likewise I really liked using Nuxt.js frameworks in the past. Specifically, I used the Composition API in regards to Vue, and I used the UI Starter as a jumping off point for Nuxt.
This was originally implemented in Nuxt3 but I upgraded everything to Nuxt4 in the final release.
I used Tailwind because it works out of the box with Nuxt. The framework is also just extremely easy to use, flexible, and extendable. It rules - not much to say here about that.
I had some fun ideas for the future of River Of Babel, which sadly will now never see the light of day. 😢
I actually built most of this out, but kept getting side tracked and didn’t end up releasing it. Basically, you’d be able to see the links you recently converted and you could copy them again easily. The idea was that these would be stored in your browser’s local storage, and you’d be able to easily find what you were sharing previously.
Here's what that looked like:


One issue I ran into when developing River of Babel was either API being unable to correctly match the album. Sometimes, it would return too many options that were similarly named, other times it would not return the album at all. I wanted to figure out a way to refine this, but it never got past the ideation phase.
Something that was an obvious next step for me was to integrate more services like Tidal, Deezer, etc. Ideally, you would have been able to chose into which service you wanted to convert the pasted link
That is a high level overview of River of Babel, the music link conversion web app that is now dead. However, there is one thing I want to discuss in depth from a technical perspective, which will be in another blog. That is how to use JWT authentication with Apple Musickit. This was a giant nightmare for me to figure out initially, so I hope that the blog that follows will give some insight into how that process works and will be of some use to a developer in the future.