๐ฟ mixapps
resurrect the lost art of mixtape-making by packaging folders of .mp3s as progressive web apps.
demo
public domain beats to code to โ
key features
- mixtapes as self-contained apps that work completely offline on Windows, MacOS, Linux, iOS, and Android
- lock screen media controls (iOS & Android) and keyboard media key support
- highly customizable interface (just add CSS)
own something and be happy
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.
quickstart
-
prep your playlist
- add your .mp3 files to the
/tracksdirectory- you can do this manually or run
rip.pyto rip tracks from a physical CD.
- you can do this manually or run
- run
scan.pyto parse/tracksand populatetracks.json, which defines the songs available to the player. after runningscan.pyonce, you can manually edittracks.jsonto refine your mix. - optionally, add an
album_art.jpgto/tracksto set the cover art for your mix.
- add your .mp3 files to the
-
soundcheck
- run
host.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
-
manifesting
- run
generate_manifests.pyand follow the interactive prompts to specify an app name and the remote server path where your app will be hosted.- this creates the config files that enable offline functionality:
manifest.json,resource-manifest.json, andservice-worker.js.
- this creates the config files that enable offline functionality:
- run
-
ship it
- upload the entire project directory to any web host with HTTPS support (GitHub Pages, AWS S3, etc.)
-
share your mixapp
- send the hosted URL to your recipient and walk them through the installation process:
- iOS (Safari): tap
ยทยทยทโ Share โ More โ Add to Home Screen โ Add - Android:
- Firefox: tap
โฎโ Add app 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, the app works completely offline and behaves like a native application
- send the hosted URL to your recipient and walk them through the installation process:
intellectual property notice
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.


