Deadsound
Deadsound was born out of a belief that traditional search or browse isn’t the best affordance to explore the Grateful Dead’s archive. It’s available in the App Store, Play Store, and on the web.
The kinds of folks who are really into the Dead are looking to discover things when they go to the Archive. How many shows did they play Althea and Dark Star at? Three. How many have tapes mastered by Charlie Miller? Two. Finding that in Deadsound only takes a few taps, but it’s that straightforward because of a nonstandard approach to content discovery. Users can search or browse for songs, venues, places, years, or even facets about specific tapes, including transferer, masterer, or tape source. When a user selects one, the available options update: if someone searches for Althea, they’ll only be able to select songs that appeared in setlists where they also played Althea. What this means practically is that it’s really quick to drill down, and, yes, discover the show and tape you want to hear.

Discovery, for something like this, takes real intention from a user. Unlike a commercial streaming app, I don’t have any strong incentive to keep users listening. If they want to listen, that’s great! But if they’d rather put things down, well, I’m not about to stop them. I mention this distinction because so, so much of the experience one finds in modern streaming apps is actively designed to suggest things that may or may not be of interest to the listener, because the goal of the platform is to keep people listening. Once that motivation is removed, it’s remarkable how quickly the received wisdom about what a music player should look like falls away. What’s left is discovery: let users find what they want, and get out of the way if they don’t.
To make that content discovery piece work, I needed a database that would behave predictably. It’s here that Deadsound diverges from most other apps for streaming things from Archive.org. Most of those apps are clients for Archive.org, and, in most cases, allow playing any audio from it. That’s great! But it’s not what Deadsound is about. Relying on Archive.org as the source of truth means missing a bigger model for the Dead’s archive, and the Dead’s concert history is well documented. With a Postgres database of that concert history, the app really foregrounds all the different ways to explore.
By maintaining a Postgres database, the app is able to use custom queries that effortlessly surface connections and tapes. The metadata in Archive.org is all user-generated, and, as such, it brings with it all the data-normalization challenges one always encounters with UGC. But some of the elements I really wanted as facets, like masterer or transferer, were buried in that user-generated content. To add them to the database, I normalized them and created a nightly pipeline to check for new tapes. The end result: structured queries providing access to a big and ever-growing set of tapes, all with their own metadata. Users shouldn’t have to think about any of that, and they don’t. All they know is that it’s easy to find tapes — and that was the goal at the start.
The app is built with React Native, which allowed targeting a web build in addition to iOS and Android. Users can create accounts, but, honestly, they don’t have to, and that was intentional. I was deliberate about privacy here, and wanted to ensure nothing was gated. Accounts let users save favorites to the cloud and across devices, but there’s nothing else hidden behind a login. The spirit of this was always a bit funny: I found myself instinctively reaching for the SaaS playbook, thinking about how to grow the userbase, and then realizing it was just wrong for what this was. Where that playbook says to zig, Deadsound zags.
A few thousand folks have tried Deadsound since launch, a few hundred come back most months, and around 50 visit each day. The numbers aren’t big, and they were never really the point. The only one I pay much mind to says that about half of the people who open the app on iOS play a tape. That’s what matters: discovery works.
Stack: Expo/React Native, Supabase.