A Spotify-like music player with synced karaoke lyrics and optional video mode, built with React + Node.js + MongoDB + Cloudinary.
- 🎵 Audio player — play/pause, seek bar, volume, skip
- 🎬 Video mode — seamless switch at the same playback position
- 📝 Synced lyrics — karaoke-style highlight with smooth scroll; click any line to seek
- ☁️ Cloud storage — audio, video, and cover images stored on Cloudinary
- 📤 Drag-and-drop upload — supports MP3, WAV, FLAC, MP4, JPEG, PNG, and
.lrcfiles - 🔍 Search — filter songs by title, artist, or album
- Node.js 18+
- MongoDB running locally (or use MongoDB Atlas)
- Cloudinary free account
cd backend
copy .env.example .env
# Edit .env with your Cloudinary credentials and MongoDB URI
npm install
npm run dev
# → http://localhost:5000/healthcd frontend
npm install
npm run dev
# → http://localhost:3000MusicCloud/
├── backend/
│ ├── models/Song.js # Mongoose schema
│ ├── routes/songs.js # CRUD + upload API
│ ├── utils/cloudinary.js # Cloudinary SDK init
│ ├── utils/lyrics.js # LRC parser + Aeneas runner
│ ├── server.js # Express entry point
│ └── .env.example
├── frontend/
│ ├── src/
│ │ ├── components/ # All React UI components
│ │ ├── context/ # PlayerContext (global state)
│ │ └── utils/ # api.js, format.js
│ ├── index.html
│ └── vite.config.js
└── docker-compose.yml # Full-stack Docker deployment
# Set env vars first
$env:CLOUDINARY_CLOUD_NAME="your_cloud_name"
$env:CLOUDINARY_API_KEY="your_api_key"
$env:CLOUDINARY_API_SECRET="your_api_secret"
docker compose up --build
# Frontend: http://localhost:3000
# Backend: http://localhost:5000Option A — LRC (auto-synced):
[00:12.00] I see trees of green
[00:15.50] Red roses too
Option B — Plain text (evenly distributed across song duration):
I see trees of green
Red roses too
I see them bloom
| Layer | Technology |
|---|---|
| Frontend | React 18, Vite, Tailwind CSS |
| Backend | Node.js, Express, Multer |
| Database | MongoDB, Mongoose |
| Storage | Cloudinary |
| Lyrics Sync | LRC parser + Aeneas (optional) |
| Docker | Node 20, Nginx, MongoDB 7 |