
Why?
Just after things started to reopen from the pandemic in the summer of 2021, I was meeting up with a friend in a parking lot and going to see the band he would swear I would like. I had described them as "Dad Rock" after listening to the album Farmhouse, and was mostly going as a way to spend some time with him after being cooped up in my tiny 1-bedroom apartment for over a year. And to add an extra layer of oddity, I wasn't a concert person. I had been to a few growing up and in college, but had social anxiety and wasn't really into being crowded into a venue with people trying to act cool and show off. But hey, Phish was supposed to be different. He and his wife came to pick me up, stop for some coffee, and make our way out to Commerce City for Phish's 10th year playing a Labor Day weekend run at Dicks Sporting Goods Park, better known as Phish Dicks.
The best way I can describe what drew me into this band comes with a couple of legs, or parts.
Part 1: The Music
I could not have been more wrong about this being dad rock that had a little energy left over from a busy day of work and taking care of kids. This was weird and funky prog rock that didn't stop. I was raised on a lot of 60s, 70s, and 80s rock, and this was a bunch of weird rock and roll all smashed together, with some funk, bluegrass, and composed classical music thrown in. Whatever it was I was hearing, I was loving it. And not only that, it wasn't stopping. No openers to switch around and kill time between, just 3 hours of prog rock improvisation that went in crazy and scary directions.
Part 2: The Dancing
There aren't a lot of places for men to get together and dance like no one is watching and feel absolute jubilee. A lot of places imply a way of being, that you have to be reserved, try to act a certain way or look cool, or take things seriously. This is a place for them to have fun, and dance like no one is watching because everyone else there to try and have even more fun than you! No one is saying you look funny or why you are dancing like that. You just connect with yourself and enjoy this weird-ass music coming at you. Getting to see so many people having an absolute blast with no reservation was incredibly freeing to me personally.
Guess I'll have to do it myself
Both of these parts resulted in a few things. First, after I woke up the next morning and grabbed a breakfast burrito, trying to recover from intense partying, I texted my friend and said I wanted to go again tonight. Then, maybe a week later after paying for Phish's streaming service and learning about the community around taping Phish shows and trading them for free on the internet, I wondered if I could build my own streaming service? Phish's at the time didn't have a single song repeat, favoriting albums was a pain, and the UI wasn't super intuitive. So I decided hey, I have a website I use to host my own photography, why don't I add a tab for Phish? And thus, Tapehendge started.
Version 1
The first version was rough, broken to breaking on adding new shows, but it worked! I was able to transfer around 500GB of historical Phish into an S3 bucket for easy and cheap storage for trying to take on this massive back catalog. Once I had my data, I wrote up the UI for the page, using some pretty basic React to get a list of custom-generated album art that could be clicked on to show songs and start playing. Once I had a working UI, then it was time to wire up the Python backend to handle the database of what shows I had, what was the cover art, etc. Then, only a few weeks later, I had a working Phish streaming music platform! It cost around $13 to host per month, including the server that was running the rest of my website and some other microservices. Once I had the desktop version up and running and being used at work most days, the next step was to do a small update and get it working on mobile, so I could use my Phish streamer while I was out and about.
Version 2

As any software developer will tell you, there is no version 2. There are subsequent versions that add small changes, improve things, take features away, and Tapehendge was no different. I swapped out the underlying API implementation from Python to Go, to improve performance and reduce overall server load as well! Then it was adding users, a login flow, account creation, and user favoriting. Seeing if people wanted their own little slice of the pie. A big next step was creating the Tapehendge iOS app! A full-on version of Tapehendge you could install on your phone and take with you. Next up, I tackled a website rewrite, from a ~5-year-old React to a modern NextJS/Tailwind/ShadCN front-end that was much more pleasing to the eye and looked decent on mobile (I'm no UI designer by trade or nothing). All of these combine into something I'd feel confident in calling a v2. No, it's not perfect, and I have things I want to do, but it's a product I'm much more proud of.
What's left?
It sounds pretty feature-complete! What else could you possibly do? Well, a few things. Adding new shows is still sketchy to me. I think I broke user favorites at one point as a result of adding new shows to the SQLite database, and wrote a new script that should be able to run and only add new shows. So, a big step I want to take next is to tighten the hell down new show releases. I've gotten it into a pretty good place with the Go rewrite, but I want to add tests to make sure people's favorites aren't changing out from under me. Then, a big step would be adding a staging environment. There are a lot of moving parts, external services, and big file sizes that mean being able to fully test a new show locally can often be unreasonable, especially with a tiny laptop hard drive. It would go a long way towards easing the anxiety I have around affecting users' profiles on database changes. I also want to rewrite the Tapehendge app now that some APIs it uses have matured, and I've matured as a developer. I had a pretty good v2 going at some point that reworked the UI and handled offline downloads, but it was too complex to keep pushing with beta APIs, and I had just met my future wife at the time, so it had to take a back seat. So adding in an offline mode, doing a big update on libraries, and doing some UI work are all still things I'd love to do if I could stop time for a while and devote some love to it.