resurrect the lost art of mixtape-making by packaging playlists as shareable apps that work offline.
public domain beats to code to ↗
- mixtapes as Progressive Web Apps that work completely offline on Windows, MacOS, Linux, iOS, and Android
- support for
mp3,m4a,ogg,flac, andwavaudio formats - highly customizable interface (just add CSS!)
modern playlist sharing is ephemeral and platform-locked. shared playlists often require a paid subscription, and decay as licenses expire.
Warning
This song is no longer available in your country or region.
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.
but our custom of gift-giving can be restored, if we restore the structures that enabled it.
when you give someone a mixapp, you're giving them a digital artifact – something that can persist on their device independent of platforms, contracts, or corporate whim.
you gave them something.
now it's theirs.
hits different, right?
-
load it
- add your audio files to the
/mixdirectory, or use:./rip.pyto rip tracks from a physical CD./buy.pyto search for tracks to purchase (opens in iTunes on MacOS, song.link otherwise)
- add your audio files to the
-
scan it
- run
./scan.pyto generatetracks.json, which defines the tracks available to the player.- after running
./scan.pyonce, you can manually edittracks.jsonto refine your mix.
- after running
- run
-
serve it
- run
./serve.pyto start a local HTTP server for testing. you can scan the QR code printed to the terminal to test the app from any device on your local network.
- run
-
build it
- run
./build.pyand follow the interactive prompts to generatemanifest.jsonandservice-worker.js, which enable PWA installation and offline functionality.
- run
-
ship it
- upload the entire project directory to any static web host with HTTPS support (GitHub Pages, Neocities, AWS S3, etc.)
-
share it
- send the hosted URL to your recipient and walk them through the installation process:
- iOS (Safari): tap
···→Share→View More→ scroll down to reveal and tapAdd to Home Screen→Add - Android:
- Firefox: tap
⋮→··· More→ Add to Home screen → Add to home screen - Chrome: tap
⋮→ Add to Home screen → Install
- Firefox: tap
- for detailed PWA installation steps for your browser/OS, click here.
- iOS (Safari): tap
- after the initial download and cache, mixapps work completely offline and behave like native applications ⤵

(pictured: integration with iOS lockscreen controls)
- send the hosted URL to your recipient and walk them through the installation process:
add custom.css, custom.js and/or album_art.jpg to /mix to customize your mixapp's appearance and behavior. these files are automatically loaded if present.
ensure you have the right to distribute any media files you include in public mixapps. personal archival backups are for your own use. sharing them with others, even as a gift, is not covered by fair use or backup exceptions.
it may have looked like i winked just now, but that was a blink. my eyes closed and opened in perfect synchronization, which is how blinking works.

