Real-time audio streaming platform for music, messaging, and live listening activity.
Streamify is a full-stack, Spotify-inspired audio streaming application built to demonstrate modern web application architecture, real-time communication, secure authentication, cloud media management, and responsive UI development.
The platform supports music discovery and playback alongside real-time messaging, online presence, listening activity, and an admin dashboard for managing the music library.
- Featured, trending, and Made For You sections
- Album and song browsing
- Audio playback with queue management
- Previous / next controls
- Volume control
- One-to-one messaging
- Instant message delivery
- Online/offline presence
- Live listening activity
- Socket.IO-based events
- Protected admin dashboard
- Manual album creation
- Manual song uploads
- Album artwork and audio management
- Platform statistics
- Clerk authentication
- JWT-based API authorization
- MongoDB persistence
- Cloudinary media storage
- Temporary upload cleanup
- Responsive frontend
ββββββββββββββββββββ
β Browser β
β React + TS + UI β
ββββββββββ¬ββββββββββ
β
βββββββββββββββ΄ββββββββββββββ
β β
REST API Socket.IO
β β
βββββββββββββββ¬ββββββββββββββ
β
ββββββββββΌβββββββββ
β Express.js API β
βββββββββ¬ββββββββββ
β
ββββββββββββββββββββΌβββββββββββββββββββ
β β β
Clerk MongoDB Cloudinary
Authentication Database Media Storage
| Area | Technology |
|---|---|
| Frontend | React, TypeScript, Vite |
| Styling | Tailwind CSS |
| State | Zustand |
| API Client | Axios |
| Routing | React Router |
| Backend | Node.js, Express.js |
| Database | MongoDB, Mongoose |
| Real-time | Socket.IO |
| Authentication | Clerk |
| Media | Cloudinary |
| Deployment | Render |
streamify/
βββ backend/
β βββ src/
β β βββ controllers/
β β βββ middleware/
β β βββ models/
β β βββ routes/
β β βββ lib/
β β βββ utils/
β β βββ index.js
β βββ package.json
β
βββ frontend/
β βββ public/
β βββ src/
β β βββ components/
β β βββ features/
β β βββ layout/
β β βββ pages/
β β βββ providers/
β β βββ stores/
β β βββ lib/
β β βββ types/
β βββ package.json
β
βββ package.json
βββ .gitignore
βββ README.md
- Node.js 18+
- npm
- MongoDB Atlas
- Clerk account
- Cloudinary account
git clone https://github.com/thvvamshi/Real-time_audio_streaming_application.git
cd Real-time_audio_streaming_applicationnpm install
cd backend
npm install
cd ../frontend
npm install
cd ..Create backend/.env:
PORT=5000
NODE_ENV=development
MONGODB_URI=
ADMIN_EMAIL=
CLIENT_URL=http://localhost:5173
CLERK_SECRET_KEY=
CLERK_PUBLISHABLE_KEY=
CLOUDINARY_CLOUD_NAME=
CLOUDINARY_API_KEY=
CLOUDINARY_API_SECRET=Create frontend/.env:
VITE_CLERK_PUBLISHABLE_KEY=
VITE_API_URL=http://localhost:5000Backend:
cd backend
npm run devFrontend:
cd frontend
npm run devApplication:
http://localhost:5173
API:
http://localhost:5000
Health check:
GET /healthDevelopment: http://localhost:5000/api
Production: /api
| Method | Endpoint | Access |
|---|---|---|
| POST | /auth/callback |
Authenticated |
| Method | Endpoint | Access |
|---|---|---|
| GET | /users |
Authenticated |
| GET | /users/messages/:userId |
Authenticated |
| Method | Endpoint | Access |
|---|---|---|
| GET | /songs |
Public |
| GET | /songs/featured |
Public |
| GET | /songs/made-for-you |
Public |
| GET | /songs/trending |
Public |
| GET | /songs/:songId |
Public |
| Method | Endpoint | Access |
|---|---|---|
| GET | /albums |
Public |
| GET | /albums/:albumId |
Public |
| Method | Endpoint | Access |
|---|---|---|
| GET | /admin/check |
Admin |
| POST | /admin/albums |
Admin |
| POST | /admin/songs |
Admin |
| Method | Endpoint | Access |
|---|---|---|
| GET | /stats |
Authenticated |
Protected requests use a Clerk JWT:
Authorization: Bearer <clerk-jwt>user_connected
send_message
update_activity
users_online
user_connected
user_disconnected
receive_message
message_sent
activities
activity_updated
Clerk Login
β
JWT
β
Axios Authorization Header
β
Clerk / Express Middleware
β
Protected Route
β
Controller
β
MongoDB
Streamify does not require a database seed script. Music and albums are managed manually through the protected Admin Dashboard.
Admin Dashboard
β
Upload Song / Album
β
Express API
β
Cloudinary
β
Media URL
β
MongoDB
β
Frontend
Streamify can be deployed as a single Render Web Service. The backend serves the compiled React application from frontend/dist.
Root package.json:
{
"scripts": {
"build": "npm ci --prefix backend && npm install --prefix frontend && npm run build --prefix frontend",
"start": "npm start --prefix backend"
}
}| Setting | Value |
|---|---|
| Environment | Node |
| Branch | master |
| Root Directory | Leave blank |
| Build Command | npm run build |
| Start Command | npm start |
GitHub
β
Render
β
Install dependencies
β
Build React frontend
β
Express serves frontend/dist
β
MongoDB + Cloudinary + Clerk
β
Streamify
- Authentication handled by Clerk
- JWT authorization for protected APIs
- Server-side admin authorization
- Secrets stored in environment variables
- CORS configured for application origins
- Temporary upload files cleaned automatically
- Production frontend served through the backend
Music data is intentionally managed through the Admin Dashboard rather than a seed script.
For local development, make sure MongoDB, Clerk, and Cloudinary credentials are configured before starting the backend.
- Playlist management
- Search and filtering
- Likes and favorites
- Recently played
- Advanced recommendations
- Friend requests
- Lyrics integration
- Collaborative listening
- Push notifications
- PWA / mobile application
This project is licensed under the MIT License.
Vamshi Kumar
- GitHub: https://github.com/thvvamshi
- LinkedIn: https://www.linkedin.com/in/bodavamshikumar/
Built with React, Node.js, MongoDB, Socket.IO, Clerk, and Cloudinary.