For the past several months, I’ve been using a web-based music player I built called Underscore. It’s playing music for me right now. I recently revamped & improved it and thought it was time to show it off. Here’s a screenshot:Ok, let me explain. I listen to music all day while I’m working, favoring music without words — electronic, classical, soundtracks, ambient, nature sounds, that sort of thing. I listen to whole albums, long mixes, and playlists across several services, including Spotify, YouTube, and Soundcloud. It was becoming a pain in my ass trying to pick something to listen to while working; I’d have to scroll through playlists on all these different services and generally I’d end up listening to the same stuff over and over again, getting sick of it, getting distracted by choosing music, missing some gems buried deep in a list of saved albums, etc.So, pair programming with Claude, I built Underscore, a “home-cooked meal” app that’s both simple and opinionated. Here’s how it works. You can add links to music from Spotify, YouTube, Soundcloud, Bandcamp, and Apple Music to it — just paste their share URLs in. Reloading the page gives you a random piece of music from your collection. You can see a list of the songs, videos, playlists, and albums in your collection and can hide them if you want. That’s it. That’s all it does.There’s no APIs or authentication or auto-synching playlists. The music is played through embedded players and if it lands on something from Spotify, Apple Music, or Bandcamp, you’re gonna have to click the play button in the embedded player (Soundcloud and YT videos should play automatically (but don’t always for whatever reason)). When your current selection ends, the new random thing doesn’t automatically play…you need to refresh the page.It’s not ideal, having it be a little bit manual and janky in this way. But oh boy, am I loving this thing. It took me awhile to get everything into the system, but I’ve got almost 300 resources in my collection now — probably 300-400 hours of music all told — and I listen to it all day while working. I’m listening to stuff from deep in the archives, albums and playlists I just wouldn’t have thought to play, when strapped for time in the rush to get to work. When something new comes along, like NIN’s Tron: Ares soundtrack, I add it in there. I don’t get distracted…I just get good music for flow/coding/writing all the live-long day.The background animation was adapted and extended from one of the examples in Rick Rubin’s The Way of Code — there are a bunch of different patterns and colors that it cycles through. I’m kinda proud of the way the media embeds fade into 1-bit images so you can see the background behind them when they’re playing…dorking around with CSS & web design is still super fun.And but so anyway, I built Underscore for myself, to scratch an itch, but recently thought that it would be relatively easy to add other users to it. So, if you’re a logged-in member of kottke.org, you can build your own collection and play it with Underscore; just head right this way. If you’re not a KDO member, you can still check it out…but the only thing it does is play my music collection (which has some good stuff in it IMO). Fair warning: aside from this post, there is no onboarding. You may be confused as to how it works. But it’s simple enough that you quickly figure it out. Due to lack of auto-shuffle, it’s not worth using if you’re adding stuff that’s under ~30 minutes in length — Underscore is for albums, long tracks, playlists, etc.1 Caveat emptor. You break it, you buy it. Etc. Etc. If you try it out, let me know what you think in the comments below. Suggestions or improvements welcome.Yes, I finally built my long-wanted shuffle-by-playlist/album music player. And it works with more than just Spotify or Apple Music!↩ Tags: kottke.org · music · Underscore 💬 Join the discussion on kottke.org →