Control+Shift+Mood is a full-stack web app that lets you generate Spotify playlists based on your emotional journey — from one mood to another (e.g., Calm ➝ Energetic).
Built with Flask, integrated with the Spotify OAuth API, and styled with a clean pastel-glass aesthetic, this app curates songs from a mood-tagged dataset and saves them directly to your Spotify account.
- 🎵 Generate a Spotify playlist based on a mood arc transition
- 🧠 Smart song matching using
valenceandenergyvectors - 🔐 Secure login via Spotify OAuth 2.0
- 📀 Automatically saves the playlist to Spotify account
- 📱 Fully responsive design for desktop and mobile
- 🎨 Dynamic playlist display with artist/song separation
| Layer | Technology |
|---|---|
| Backend | Python, Flask |
| Frontend | HTML, CSS, Bootstrap 5, JS |
| API | Spotify Web API (OAuth 2.0) |
| Database | CSV Dataset (Bollywood + Pop) |
| Hosting | Render |
👉 (https://moodwave-jxlc.onrender.com/create)]


| Task & Timer | Quotes & Footer |
|---|---|
![]() |
![]() |
# Clone the repository
git clone https://github.com/steffthomas/moodwave.git
cd moodwave
# Create and activate a virtual environment (optional but recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Create a .env file with your Spotify credentials
touch .envYour .env file should look like:
SPOTIPY_CLIENT_ID=your_spotify_client_id
SPOTIPY_CLIENT_SECRET=your_spotify_client_secret
SPOTIPY_REDIRECT_URI=https://your-app-name.onrender.com/callback# Run the Flask app
python app.py
# Then open your browser at:
http://localhost:8888To use Spotify login, register an app at Spotify Developer Dashboard and configure:
- Redirect URI:
http://localhost:8888/callback(for local dev) or your deployed Render domain - Enable the following scopes:
playlist-modify-publicuser-read-private
Stefy Thomas
GitHub: @steffthomas
LinkedIn: stefy-thomas
This project is licensed under the MIT License — feel free to use, share, and remix it.
“Let your playlist follow your mood.”

