Keep your Spotify playlists fresh by rotating songs in and out on a regular schedule.
PlayLS helps users maintain fresh playlists by:
- Tracking when songs were added to playlists
- Prompting users to review songs after a set time interval
- Allowing users to keep or remove songs with a simple swipe interface
- Providing recommendations for new songs to replace removed ones
- Frontend: React with Material-UI
- Backend: FastAPI (Python)
- Music API: Spotify Web API
- Development: ngrok for local OAuth redirects
-
Spotify Developer Account
- Go to Spotify Developer Dashboard
- Create a new app
- Note your Client ID and Client Secret
- Set redirect URI to
http://localhost:8000/auth/callback(for local development)
-
Python 3.8+
-
Node.js 16+
-
ngrok (for local development)
-
Navigate to the backend directory:
cd back-end -
Create a virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
-
Create environment file:
cp env.example .env
-
Edit
.envfile with your Spotify credentials:SPOTIFY_CLIENT_ID=your_spotify_client_id_here SPOTIFY_CLIENT_SECRET=your_spotify_client_secret_here REDIRECT_URI=http://localhost:8000/auth/callback -
Start the backend server:
python rest_api/app.py
-
Navigate to the frontend directory:
cd playls_front_end -
Install dependencies:
npm install
-
Start the development server:
npm start
-
Install ngrok:
npm install -g ngrok # or download from https://ngrok.com/download -
Start ngrok tunnel:
ngrok http 8000
-
Copy the HTTPS URL (e.g.,
https://abc123.ngrok.io) -
Update your Spotify app's redirect URI in the Spotify Developer Dashboard to:
https://your-ngrok-url.ngrok.io/auth/callback -
Update your backend
.envfile:REDIRECT_URI=https://your-ngrok-url.ngrok.io/auth/callback
- Start both backend and frontend servers
- Open http://localhost:3000 in your browser
- Click "Login with Spotify" to authenticate
- Create a rotation from one of your playlists
- Review songs and keep or remove them
- Find new songs to replace removed ones
- ✅ Spotify OAuth login
- ✅ Connect/create Spotify playlists
- ✅ Set rotation intervals (7-90 days)
- ✅ Song review interface with keep/remove actions
- ✅ Song recommendations based on various criteria
- ✅ Rotation history tracking
- Skip detection and automatic removal suggestions
- Statistics (most skipped songs, longest kept songs)
- Social features and collaborative rotations
- Mobile app
GET /auth/login- Initiate Spotify OAuthGET /auth/callback- Handle OAuth callback
GET /user/playlists- Get user's playlistsGET /playlist/{playlist_id}/tracks- Get playlist tracks
POST /rotation/create- Create new rotationGET /rotation/{rotation_id}/review- Get songs to reviewPOST /rotation/{rotation_id}/review- Review a song (keep/remove)
GET /recommendations- Get song recommendations
playls/
├── back-end/
│ ├── rest_api/
│ │ └── app.py # FastAPI application
│ ├── requirements.txt # Python dependencies
│ └── env.example # Environment variables template
├── playls_front_end/ # React application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── contexts/ # React contexts
│ │ └── App.js # Main app component
│ └── package.json # Node.js dependencies
└── README.md
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
MIT License - see LICENSE file for details