commit b2b8a76dda37f44d181c968696455229bc9cfc9b
parent 51491dae350b12ab658ea537d380aeccc5641492
Author: Hunter
Date:   Thu, 13 Nov 2025 21:52:58 -0500

restructure readme

Diffstat:
Mreadme.md | 57++++++++++++++++++++++++++++++++++-----------------------
Mreadme_images/playlist.png | 0
2 files changed, 34 insertions(+), 23 deletions(-)

diff --git a/readme.md b/readme.md @@ -2,53 +2,64 @@ resurrect the lost art of <a href="https://ihavethatonvinyl.com/liner-notes/the-lost-art-of-the-mixtape/">mixtape</a><a href="https://melos.audio/blogs/information/the-lost-art-of-the-mixtape">-making</a> by packaging folders of .mp3s as progressive web apps. -<img src="readme_images/collection.jpeg" width="550"> +<p align="center"> + <img src="readme_images/collection.jpeg" width="550"> +</p> ## demo <a href="https://hunterirving.com/vibe_capsule">public domain beats to code to ↗</a> ## key features - mixtapes as self-contained apps that work completely offline on Windows, MacOS, Linux, iOS, and Android -- lock screen media controls (iOS & Android) -- keyboard media key support (▶️, ⏸️, ⏭️, ⏮️) +- lock screen media controls (iOS & Android) and keyboard media key support (▶️, ⏸️, ⏭️, ⏮️) - highly customizable interface (just add CSS) -<img src="readme_images/playlist.png" width="500"> +<p align="center"> + <img src="readme_images/playlist.png" width="500"> +</p> ## own something and be happy modern playlist sharing is ephemeral and platform-locked. shared playlists often require a paid subscription, can be modified after sharing, and decay as licenses expire. > [!WARNING] > <i>This song is no longer available in your country or region.</i> -in the transition from physical mixtapes to cloud-hosted playlists, we lost the ability to give each other digital things. these days, we mostly point to things that we don't control. +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 digital things can be gifts too, if we preserve the gift-giving structure. +but our custom of gift-giving can be restored, if we restore the structures that enabled it. -this project aims to resurrect what made mixtapes meaningful: permanence, ownership, and intention. when you gift someone a mixapp, you're giving them a digital artifact. something that can persist on their device independent of platforms, algorithms, or corporate whim. +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.<br><br> -it's yours, and then it's theirs. +you gave them something. + +now it's theirs. + +hits different, right?<br><br> ## quickstart -1. **add your .mp3 files** to the `/tracks` directory - - you can do this manually or run `rip.py` to rip tracks from a physical CD +1. **prep your playlist** + - add your .mp3 files to the `/tracks` directory + - you can do this manually or run `rip.py` to rip tracks from a physical CD. + - run `scan.py` to parse `/tracks` and populate `tracks.json`, which defines the songs available to the player. after running `scan.py` once, you can manually edit `tracks.json` to refine your mix. + - optionally, add an `album_art.jpg` to `/tracks` to set the cover art for your mix. -2. **give it a listen** - - run `scan.py` to parse the contents of `/tracks` and populate `tracks.json`, which defines the songs available to the player. after running `scan.py` once, you can manually edit `tracks.json` to refine your mix. - - run `host.py` to start a local HTTP server for testing. scan the QR code printed to the terminal to test the app from any device on your local network. +3. **soundcheck** + - run `host.py` to 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. -3. **build the PWA** - - run `generate_manifests.py` and follow the interactive prompts to specify an app name and the remote server path where your app will be hosted. this creates: - - `manifest.json` (PWA configuration file) - - `resource-manifest.json` (defines the files to be cached for offline use) - - `service-worker.js` (manages offline caching) - - optionally, add an `album_art.jpg` to `/tracks`. it'll be used as the cover for your mix when playing on supported devices. +4. **manifesting** + - run `generate_manifests.py` and 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`, and `service-worker.js`. -4. **deploy your mixapp** +5. **ship it** - upload the entire project directory to any web host with HTTPS support (GitHub Pages, AWS S3, etc.) -5. **install on your device** - - visit the hosted URL and follow your browser's prompts to "install" or "add app to home screen" (detailed instructions <a href="https://hunterirving.github.io/web_workshop/pwa">here</a>) - - once installed, the app works completely offline and behaves like a native application<br><br> +6. **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 + - for detailed PWA installation steps for your browser/OS, <a href="https://hunterirving.github.io/web_workshop/pwa">click here</a>. + - after the initial download, the app works completely offline and behaves like a native application<br><br> <img src="readme_images/lock_screen.jpeg" width="275"><br> (pictured: integration with iOS lockscreen controls) diff --git a/readme_images/playlist.png b/readme_images/playlist.png Binary files differ.