Own Something and Be Happy

Growing up, I burned a LOT of mix CDs. A mix for my crush to not-so-subtly confess the feelings I couldn't put into words. A mix for my friends to show off my refined and elevated music taste. A mix for myself, just for cruising around town in my 2006 Mazda Axela.

There was something special about music sharing in those days, and I don't think it was just the physicality of the medium or the inconvenience of the burning ritual.

In those days, once you gave someone a mix, it was really, truly theirs.

In the transition from physical mixtapes to cloud-hosted playlists, we stopped giving each other digital things. These days, we mostly point to things that we don't control. Modern playlists are platform-locked, often require a paid subscription, and decay as licenses expire.

But our custom of gift-giving can be restored, if we restore the structures that enabled it.

Modern Problems

I still have a few CD burners kicking around, along with a spindle or four of blanks, but (this came as a real shock to me) none of my friends have CD players anymore.

And you won't believe what they told me when I said "Just play it on your Sega Dreamcast."

Despite my best efforts, my meticulously-crafted mixes seemed destined to become quirky, retro drink coasters. That is, until I learned about Progressive Web Apps.

📲 📲 📲

Progressive Web Apps (PWAs) are apps that can be installed directly from supported websites, independent of centralized app stores. Much like their native app cousins, PWAs can cache files for offline use, auto-update in the background, and even send push notifications.

Sidebar, but as far as I can tell, Apple Computer Company is terrified of this idea catching on. While other browsers have embraced the idea (Chrome displays a small Install button on supported webpages), Apple's Safari completely buries the option, requiring a series of 6 obscure steps to install a PWA — more than any other browser.

Step 4 of 6 is the most egregious, only revealing the "Add to Home Screen" button after users vertically scroll an area that gives no visual indication it is scrollable. Lately I've been cyberbullying gently encouraging Apple employees to work on improving this, but so far I haven't heard back.

As recently as 2024, Apple planned to completely remove PWA functionality from iOS devices in the EU, before quickly backtracking after significant public outcry and increased scrutiny from regulators convinced them it probably wasn't worth it.

And that's good news for us, because it means we can install and use mixapps on MacOS, Windows, Linux, Android, and... iOS.

Mixapps?

Yeah, mixapps! They're like mixtapes or mix CDs, but packaged as Progressive Web Apps that you can share with friends and install for offline use.

Here's a live demo, and here are some installation instructions. If my mix of public domain recordings isn't quite your jam, you can clone the repo and start building mixapps using songs from your own collection.

The theme of this mixapp is "Songs that are Really Good"

I know it looks pretty much like any other audio player on the surface, but mixapps have completely changed my relationship with music.

For one thing, I actually purchased each of these songs, which feels weird to say in 2026.

Sure, streaming services have a broad selection, but they'll hold your library hostage if you miss just one of their (oft-increasing) rent payments. And even if you stay paid up, you can expect your playlists to degrade over time as licensing agreements expire.

Buying songs and albums outright gives you the freedom to listen to music how and when you want, and it gives artists (especially smaller ones) a much better payout than streaming:

Platform cut Rights Holder gets Streams to match
$10 purchase
Bandcamp 15% on digital purchases
+ ~4-7% payment
processor fees
~$8.00-$8.50
from $10 purchase
—
iTunes ~30% ~$7.00
from $10 purchase
—
Apple Music 48% ~$0.01
per stream (pro-rata)
~800 streams
Spotify ~30% ~$0.003-$0.005
per stream (pro-rata)
~2,000 streams

Independent artists receive these payouts directly. Signed artists typically receive only 12–20% of the price you pay after the platform and the artist's label take their cuts (roughly $1.20–$2.00 from a $10 Bandcamp sale, after recouping any advances). Stream-equivalents compare against the ~$8 the rights holder receives from a $10 Bandcamp sale, after Bandcamp's cut and processing fees.

You might be surprised to see iTunes on this list, but as of 2026 it's still kicking, and still the world's largest marketplace for DRM-free songs. Years of neglect have left the UI in a pretty bad state, and Apple will do its best to dark-pattern you into an Apple Music subscription, so the mixapps repo includes a buy.py script that takes a song name as input and carries you all the way to the buy button. Once you complete your purchase, new tracks are automatically copied to your /mix directory and added to your mixapp.

Of course, you can fold in any other audio files from your collection, and a rip.py is included if you're looking to add tracks directly from a CD.

Despite running in a browser engine, PWAs can integrate with many OS-level features, including lockscreen media controls.

The included serve.py starts a local server for testing, and since it's accessible from any device on your network, you can collaborate with friends to make mixes using your combined collections. Co-operative multiplayer, baby!!

Immutable by Design

Much like the physical mixtapes that inspired them, once you give someone a mixapp, it's theirs.

After the initial download and cache, mixapps never reach out to a server again, so unlike streaming playlists, they can't be clawed back (even if your crush ends up breaking your heart).

And I think that's the distinction that makes giving one really feel like giving a gift.

A mixapp for your daytrip to the city. A mixapp for climbing trees in the park. A mixapp for the drive to your grandparents' house on Christmas Eve. Even when I'm making them for myself, there's still something gift-like about them.

Maybe they're gifts from me, to me.