A full-stack Spotify-inspired music streaming web application built using the MERN stack.
The application allows users to browse music, search for songs, play audio using a persistent music player, explore collections, and manage music through a dedicated Content Manager.
Note: This project was created for educational and portfolio purposes. It is inspired by Spotify but is not affiliated with, endorsed by, or connected to Spotify.
- ๐ต Stream and play songs directly in the browser
- โฏ๏ธ Play and pause music
- โญ๏ธ Navigate between tracks
- ๐ Volume control
- โฑ๏ธ Interactive playback progress bar
- ๐ผ๏ธ Song cover artwork
- ๐ Search songs by title or artist
- ๐ฟ Create and browse music collections
- โฌ๏ธ Upload songs through the Content Manager
- ๐ผ๏ธ Upload custom song and collection artwork
- ๐ง Persistent music player across application pages
- ๐ User authentication
- ๐ค User-specific interface
- ๐ฑ Responsive Spotify-inspired dark UI
- โก Dynamic frontend connected to a REST API
- โค๏ธ Like and unlike songs
- ๐ View all favourite songs in a dedicated Liked Songs page
- React
- Vite
- JavaScript
- CSS
- React Router
- Axios
- Node.js
- Express.js
- MongoDB
- Mongoose
- JWT Authentication
- Multer
The home page displays available songs and music collections while providing quick access to playback.
Users can search the music library using song titles or artist names.
The Content Manager provides an interface for managing music without requiring external API tools.
Users can:
- Upload an audio file
- Add song title and artist information
- Upload cover artwork
- Create music collections
- Select existing songs for a collection
- Upload collection artwork
Collections group multiple songs together and provide a dedicated view for browsing and playing their tracks.
The persistent bottom player provides:
- Play / pause controls
- Previous / next track controls
- Playback progress
- Current playback time
- Track duration
- Volume control
- Current song information and artwork
SPOTIFY_CLONE/
โ
โโโ backend/
โ โโโ src/
โ โ โโโ controllers/
โ โ โโโ models/
โ โ โโโ routes/
โ โ โโโ middleware/
โ โ โโโ ...
โ โ
โ โโโ package.json
โ โโโ .env
โ
โโโ frontend/
โ โโโ src/
โ โ โโโ components/
โ โ โโโ pages/
โ โ โโโ ...
โ โ
โ โโโ package.json
โ
โโโ screenshots/
โ โโโ home.png
โ โโโ songs.png
โ โโโ content-manager.png
โ โโโ search.png
โ
โโโ .gitignore
โโโ README.md
Make sure you have installed:
- Node.js
- npm
- MongoDB
git clone <your-repository-url>
cd SPOTIFY_CLONEcd backend
npm installOpen another terminal:
cd frontend
npm installCreate a .env file inside the backend directory.
Example:
PORT=3000
MONGODB_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secretAdd any other environment variables required by your backend configuration.
Never commit your real
.envfile or credentials to GitHub.
From the backend directory:
npm run devIf your backend does not use a dev script, use the start command defined in backend/package.json.
From the frontend directory:
npm run devVite will display the local development URL in the terminal.
Open it in your browser to use the application.
Songs can be added directly through the application's Content Manager.
Provide:
- Song title
- Artist name
- Audio file
- Cover image (optional)
After uploading, the song becomes available to the application and can also be added to collections.
Sensitive configuration is intentionally excluded from the repository through .gitignore.
The project ignores files such as:
.env
.env.*
node_modules/
dist/
build/
*.log
An .env.example file can be committed to demonstrate the required environment variable names without exposing actual credentials.
This repository is intended for educational and portfolio purposes.
The repository should not contain copyrighted commercial music files or other media that the repository owner does not have permission to redistribute.
Demo song titles, artist names, and artwork shown in the project screenshots may use fictional/demo data for presentation purposes.
This project was built to practice full-stack web development concepts including:
- Building REST APIs with Express
- MongoDB database integration
- React frontend development
- Authentication and authorization
- File uploads
- Audio playback in the browser
- Global player state management
- Search functionality
- Connecting frontend and backend applications
- Building reusable UI components
Potential features that could be added in the future include:
- Playlists for individual users
- Recently played songs
- Queue management
- Shuffle and repeat controls
- Artist profile pages
- Improved mobile responsiveness
- Music recommendations
- Cloud-based media storage
Built as a full-stack web development project.
This project is intended for educational and portfolio use.



