VibeChat is a full-stack real-time web application that blends Spotify-style music streaming with real-time 1-on-1 chat. Users can listen to music, track what their friends are listening to live, send friend requests, and chat β all in one seamless app powered by Socket.io, React, and Clerk.
Experience music socially, not just personally. π΅π¬
-
π User Authentication
- Google Sign In/Sign Up via Clerk
- Guests can browse and preview music
- Authenticated users unlock full music + social features
-
π§βπ€βπ§ Friend System
- Send/Accept/Reject Friend Requests
- View Incoming/Outgoing Requests
- Track Total Friends and Recommended Users
-
π’ User Presence
- Live Online/Offline Status via Socket.io
- βActive Nowβ section shows whoβs listening to music
- Real-time friend activity feed
-
π¬ 1-on-1 Real-Time Messaging
- Instant chat with friends using Socket.io
- Online indicator next to friend names
- Custom styled message input component
-
π΅ Music Player & Album System
- Home page with Recommended & Featured albums
- Album pages with:
- Play/Pause, Next/Previous track
- Loop Song / Loop Album
- Volume control
- Song info preview (image, title, etc.)
- Listen to songs your friends are playing β live
-
π€ User Dashboard
- Personalized topbar with user name and navigation
- Notifications section for friend request actions
- Responsive layout for mobile and desktop
-
π οΈ Admin Panel
- Add/Delete Albums and Songs
- View user base
- Manage full song and album library
- π₯ Group Chat System
- π Playlist Creation
- π Typing Indicators
- π± Progressive Web App (PWA) Support
vibechat-music-chats/
βββ client/ # Frontend (React + Tailwind + Clerk)
β βββ components/ # UI components (Topbar, Player, Sidebar, etc.)
β βββ pages/ # Pages like Home, Friends, Messages
β βββ store/ # Zustand for global state
β βββ hooks/ # Custom React hooks
β βββ utils/ # Helper functions
β βββ App.jsx # Main App entry
β βββ main.jsx # ReactDOM render logic
β
βββ server/ # Backend (Node.js + Express + Socket.io)
β βββ controllers/ # Route handling logic
β βββ routes/ # API endpoints
β βββ models/ # MongoDB models
| βββ lib/ # Helper functions
β βββ socket/ # Socket.io server configuration
β βββ index.js # Backend entry point
| Part | Technology |
|---|---|
| Frontend | React, Tailwind CSS, ShadCN UI |
| Backend | Node.js, Express, Socket.IO |
| Auth | Clerk (Google OAuth) |
| Database | MongoDB (Mongoose) |
| State Mgmt | Zustand |
| Deployment | Render |
| Music Features | HTML5 Audio API |
git clone https://github.com/ZarhanMemon/vibechat-music-chats.git
cd vibechat-music-chatscd client
npm installCreate a .env file in client/:
VITE_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_keyThen run:
npm run devcd ../server
npm installCreate a .env file in server/:
PORT=5000
MONGO_URI=your_mongodb_uri
CLERK_SECRET_KEY=your_clerk_secretThen run:
node index.jsVisit http://localhost:5173 to view the app.
You can replace these with your own later.
Thanks to:
While capturing sample screenshots for this project, we encountered a bug where:
When receiving messages through the socket connection, the same message appears twice in the chat interface.
This is likely due to a duplicate event listener or repeated state update.
The issue is currently under investigation and will be addressed in a future patch.
It does not affect core functionalities during testing or demonstration.
This project is licensed under the MIT License.
π§ Try the live version now:
π https://vibechat-music-chat.onrender.com











