SoundWave is a full-stack music streaming web application built with Django, PostgreSQL, and Cloudinary. It features dynamic audio playback, playlist management, interactive favorites, and a responsive user interface.
🔗 Live Application: https://musicclone-yzh4.onrender.com/
- 🎧 Interactive Music Player:
- Full playback controls: Play, Pause, Next, Previous, Repeat, and Shuffle.
- Interactive track progress bar with scrub/seek and volume slider.
- 🔍 Song Exploration & Discovery:
- Browse tracks organized by genre, artist, and popularity.
- Instant search filtering by song title, artist, or genre.
- ❤️ Liked Songs & Favorites:
- Authenticated users can like/unlike tracks with instant database persistence.
- Dedicated personal "Liked Songs" library view.
- 📁 Playlist Management:
- Create, customize, and manage personal playlists.
- Add or remove tracks effortlessly.
- 🔐 User Authentication:
- Secure registration, login, logout, and session handling.
- ☁️ Cloud Media Storage:
- High-performance album covers and playlist artwork hosted on Cloudinary CDN.
- 🛡️ Django Admin Panel:
- Built-in administrator dashboard for managing songs, artists, genres, playlists, and user accounts.
- 🚀 Production-Ready Architecture:
- Preconfigured with Gunicorn, WhiteNoise, PostgreSQL database connection pooling (
dj-database-url), and deployment files (Procfile,build.sh).
- Preconfigured with Gunicorn, WhiteNoise, PostgreSQL database connection pooling (
| Component | Technology |
|---|---|
| Backend | Python 3.11, Django 4.2 (MTV Monolithic Architecture) |
| Frontend | HTML5, CSS3, JavaScript (Vanilla DOM & Web Audio API) |
| Database | SQLite (Development) / PostgreSQL (Production) |
| Media CDN | Cloudinary (django-cloudinary-storage) |
| WSGI Server | Gunicorn |
| Static Files | WhiteNoise |
| Deployment | Render / Railway |
SoundWave/
├── Mymusic/ # Django Project Core Configuration
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py # Environment settings (DB, Cloudinary, Security)
│ ├── urls.py # Root URL routing
│ └── wsgi.py # WSGI entry point for Gunicorn
├── main/ # Core Music Application
│ ├── migrations/ # Database schema migrations
│ ├── templates/main/ # Application HTML templates
│ ├── admin.py # Django Admin registration
│ ├── apps.py # App configuration
│ ├── context_processors.py # Global context (e.g., user playlists)
│ ├── models.py # Song, Playlist, and User models
│ ├── tests.py # Unit tests
│ ├── urls.py # Main app routes
│ └── views.py # Views and request handling
├── templates/ # Global error templates (404, 500)
│ ├── 404.html
│ └── 500.html
├── build.sh # Deployment build script
├── Procfile # Process file for cloud hosting
├── requirements.txt # Project dependencies
├── data.json # Seed data (songs, playlists, demo data)
├── upload_media.py # Cloudinary media synchronization script
└── manage.py # Django CLI utility
- Python 3.10 or 3.11 installed
- Git installed
git clone https://github.com/TunganaVinodKumar/SoundWave.git
cd SoundWave# Windows
python -m venv venv
venv\Scripts\activate
# macOS / Linux
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txtCreate a .env file or export the following variables:
DJANGO_SECRET_KEY=your-secret-key-here
DJANGO_DEBUG=True
DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost
# Cloudinary Credentials (Optional for local development)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret# Run database migrations
python manage.py migrate
# Load initial songs and playlists
python manage.py loaddata data.jsonpython manage.py runserverOpen http://127.0.0.1:8000/ in your browser to view the application.
| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
DJANGO_SECRET_KEY |
Secure secret key for Django |
DJANGO_DEBUG |
Set to False in production |
DJANGO_ALLOWED_HOSTS |
.onrender.com,.railway.app,localhost (or *) |
CLOUDINARY_CLOUD_NAME |
Cloudinary account name |
CLOUDINARY_API_KEY |
Cloudinary API key |
CLOUDINARY_API_SECRET |
Cloudinary API secret |
PYTHON_VERSION |
3.11.9 |
- Build Command:
python manage.py collectstatic --no-input && python manage.py migrate && python manage.py loaddata data.json
- Start Command:
gunicorn Mymusic.wsgi:application --bind 0.0.0.0:$PORT
Tungana Vinod Kumar
- GitHub: @TunganaVinodKumar
- Repository: TunganaVinodKumar/SoundWave
This project is licensed under the MIT License.