💿 mixapps

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

demo

worn grooves ↗

key features

own something and be happy

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.

mixapps are digital artifacts. immutable objects that can persist on-device, independant of platforms, contracts, and corporate whim.

once you share one with a friend, it's theirs.

quickstart

  1. serve it

    • run ./serve.py to start a development server. while the server is running, you can:
      • add new tracks by moving audio files into the /mix directory, dragging them into the browser window, running ./rip.py to rip tracks from a physical CD, or running ./buy.py to buy tracks on iTunes
      • reorder tracks by dragging them up or down in the list
      • delete tracks with shift + click
  2. build it

    • once you're happy with your mix, run ./build.py and follow the interactive prompts to generate manifest.json and service-worker.js, which enable PWA installation and offline functionality.
  3. ship it

    • upload the entire project directory to any static web host with HTTPS support (GitHub Pages, Neocities, AWS S3, etc.)
  4. 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 tap Add to Home Screen → Add
      • Android:
        • Firefox: tap â‹® → ··· More → Add to Home screen → Add to home screen
        • Chrome: tap â‹® → Add to Home screen → Install
      • for detailed PWA installation steps for your browser/OS, click here.
    • after the initial download and cache, mixapps work completely offline and behave like native applications ⤵


      (pictured: integration with iOS lockscreen controls)

customization

add your own custom.css, custom.js, and/or album_art.jpg to /mix to customize your mixapp's appearance and behavior.

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.

licenses

this project is licensed under the GNU General Public License v3.0.

the Basteleur font by Keussel (distributed by Velvetyne) is licensed under the SIL Open Font License, version 1.1.