You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<p>Integrating with multiple music services means working around APIs that are largely locked down. Keeping those integrations working solo over time just isn't feasible.</p>
11
+
<divclass="callout callout-archived">
12
+
<p><iclass="bi bi-x-octagon"></i> Development on Beetroot has been stopped.</p>
19
13
</div>
20
14
21
15
Beetroot answers the question of "who's on aux?" — a shared queue that lets anyone at a gathering add songs, similar to [SharePlay] and [Spotify Jams] but across multiple music sources.
22
16
23
-
<divstyle="text-align:center">
24
-
<imgsrc="{{ '/assets/images/beetroot/client-feb-2025.png' | relative_url }}"alt="Screenshot of Beetroot Player with a few tracks in the queue."style="max-width:100%">
The very first project with the name of "Beetroot" was a program I wrote in
24
+
2016 to sort my music by its metadata.
25
+
26
+
The tagline was "It roots through your beats, so you don't have to."
27
+
28
+
{:.full}
29
+
30
+
It had some development, I had toyed around with hosting an HTTP server out of
31
+
the app to play my library remotely, but hadn't gone past it much.
32
+
33
+
A couple of years later, I reused the name for an even better project idea.
34
+
33
35
34
-
The earliest version was built on [Electron]. It later moved to [UWP], and eventually to Java after discovering [librespot-java] — a reverse-engineered Spotify client library. That shift unlocked real progress: Spotify playback and MP3 support both landed, along with a rudimentary web relay that let people queue songs remotely.
36
+
## 2018 - Beetroot Player
35
37
36
-
It stalled out while trying to add YouTube support. Both YouTube and Spotify changed their APIs around the same time, and maintaining integrations across multiple services that actively resist third-party clients wasn't something I could keep up with solo.
38
+
I then created Beetroot Player in 2018, when I was in my last year of
39
+
college[^college] with a simple goal in mind: "Allow party guests to queue
40
+
tracks to the playlist."
41
+
42
+
[^college]: that's "high school" for the Americans
43
+
44
+
It was originally created with JavaScript on [Electron]; I quickly built out
45
+
the user interface, library management, localisation, and playback, and was
46
+
fairly happy with what was there.
47
+
48
+
{:.full}
37
49
38
50
[Electron]: https://www.electronjs.org/
51
+
52
+
When I started work on the server connectivity, which was needed for the
53
+
"having your guests queue tracks" bit, my inexperience left a lot of tech debt
54
+
I didn't know how to properly address at the time.
55
+
56
+
Looking back, if I had continued building it, the relay service would have been
57
+
written in PHP and use [SSE (Server-Sent Events)][SSE], which would've caused
0 commit comments