Sort your Spotify playlists by BPM and harmonic key using the Camelot Wheel for perfect DJ-style mixing.
- BPM Sorting - Organize tracks by tempo for smooth energy transitions
- Harmonic Mixing - Use the Camelot Wheel for seamless key-matched transitions
- Smart Preview - See before/after comparison with harmonic score analysis
- Direct Spotify Integration - Sort existing playlists without creating duplicates
- Progressive Web App - Install on your device for offline access
- Connect your Spotify account
- Select a playlist to sort
- Preview the optimized order with BPM and key info
- Apply the sort to update your Spotify playlist
Tracks are sorted using a two-pass algorithm:
- Primary Sort: Group tracks by BPM ranges (5 BPM buckets)
- Secondary Sort: Within each BPM group, sort by Camelot wheel position
- Optimization: Smooth transitions between BPM groups using harmonic compatibility
- Node.js 18+
- A Spotify Developer account
- Go to the Spotify Developer Dashboard
- Create a new app
- Add
http://localhost:5173/SortMyMix/callbackas a Redirect URI (for development) - Add
https://YOUR_USERNAME.github.io/SortMyMix/callbackas a Redirect URI (for production) - Copy your Client ID
Create a .env.local file in the project root:
VITE_SPOTIFY_CLIENT_ID=your_spotify_client_id
VITE_SPOTIFY_REDIRECT_URI=http://localhost:5173/SortMyMix/callbackFor production, you can also set the redirect URI:
VITE_SPOTIFY_REDIRECT_URI=https://YOUR_USERNAME.github.io/SortMyMix/callback# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewSortMyMix is a Progressive Web App with the following capabilities:
- Installable - Add to home screen on mobile or desktop
- Offline Support - Core app works without internet
- Caching - Spotify album artwork is cached for faster loading
- Auto Updates - Service worker updates automatically
For better browser compatibility, you can generate PNG icons:
npm install -D sharp
node scripts/generate-icons.jsThen update vite.config.ts to use PNG icons in the manifest.
This project is configured for GitHub Pages deployment:
- Push to the
mainbranch - The GitHub Action will automatically build and deploy
- Access at
https://YOUR_USERNAME.github.io/SortMyMix/
npm run build
# Deploy the `dist` folder to your hosting- Vue 3 with Composition API
- TypeScript for type safety
- Vuestic UI component library
- Pinia for state management
- Vue Router for navigation
- Vite for blazing fast builds
- vite-plugin-pwa for PWA support
The Camelot Wheel is a harmonic mixing system used by professional DJs:
- Numbers (1-12): Represent musical keys
- Letters (A/B): A = Minor keys, B = Major keys
- Compatible mixes:
- Same position (e.g., 8B → 8B)
- Adjacent numbers (e.g., 8B → 7B or 9B)
- Same number, different letter (e.g., 8B → 8A)
ISC