A full-stack real-time chat and video calling platform built for students.
- 🔐 JWT Authentication (Login / Register)
- 👥 Friend Requests & Suggestions
- 💬 Real-Time 1–1 Chat using Socket.IO
- 📎 File & PDF Upload (Cloudinary)
- 📹 Peer-to-Peer Video Calling (WebRTC)
- 🌗 Multiple Themes
- 🔒 Protected Routes
- React (Vite)
- TailwindCSS
- Socket.IO Client
- WebRTC
- Axios
- Context API
- Node.js
- Express.js
- MongoDB + Mongoose
- Socket.IO
- JWT Authentication
- Cloudinary
- Multer
PrepPal/
├─ backend/
│ ├─ src/
│ │ ├─ config/
│ │ │ ├─ db.js
│ │ │ └─ jwt.js
│ │ ├─ controllers/
│ │ │ ├─ auth.controller.js
│ │ │ ├─ chat.controller.js
│ │ │ └─ user.controller.js
│ │ ├─ lib/
│ │ │ └─ cloudinary.js
│ │ ├─ middleware/
│ │ │ ├─ auth.middleware.js
│ │ │ └─ upload.middlewear.js
│ │ ├─ models/
│ │ │ ├─ FriendRequest.js
│ │ │ ├─ Message.js
│ │ │ └─ User.js
│ │ ├─ routes/
│ │ │ ├─ auth.routes.js
│ │ │ ├─ chat.routes.js
│ │ │ └─ user.routes.js
│ │ ├─ socket/
│ │ │ └─ socket.js
│ │ └─ server.js
│ ├─ .env
│ ├─ package-lock.json
│ └─ package.json
│
├─ frontend/
│ ├─ public/
│ │ ├─ prep.png
│ │ └─ vite.svg
│ ├─ src/
│ │ ├─ api/
│ │ │ ├─ auth.js
│ │ │ ├─ axios.js
│ │ │ ├─ chat.js
│ │ │ ├─ friend.js
│ │ │ └─ user.js
│ │ ├─ assets/
│ │ │ ├─ login.png
│ │ │ ├─ react.svg
│ │ │ └─ register.png
│ │ ├─ components/
│ │ │ ├─ chat/
│ │ │ │ ├─ ChatList.jsx
│ │ │ │ ├─ ChatWindow.jsx
│ │ │ │ ├─ MessageBubble.jsx
│ │ │ │ └─ MessageInput.jsx
│ │ │ ├─ common/
│ │ │ │ ├─ Loader.jsx
│ │ │ │ └─ ThemeButton.jsx
│ │ │ ├─ layout/
│ │ │ │ └─ Navbar.jsx
│ │ │ ├─ routes/
│ │ │ │ └─ ProtectedRoute.jsx
│ │ │ ├─ users/
│ │ │ │ ├─ FriendCard.jsx
│ │ │ │ ├─ FriendRequestCard.jsx
│ │ │ │ └─ SuggestedUserCard.jsx
│ │ │ └─ video/
│ │ │ └─ VideoCall.jsx
│ │ ├─ context/
│ │ │ ├─ AuthContext.jsx
│ │ │ └─ AuthContextProvider.jsx
│ │ ├─ hooks/
│ │ │ ├─ useAuth.js
│ │ │ ├─ useFriends.js
│ │ │ ├─ usePeer.js
│ │ │ ├─ useSocket.js
│ │ │ └─ useUsers.js
│ │ ├─ pages/
│ │ │ ├─ Home.jsx
│ │ │ ├─ Login.jsx
│ │ │ ├─ Profile.jsx
│ │ │ └─ Register.jsx
│ │ ├─ services/
│ │ │ └─ authService.js
│ │ ├─ utils/
│ │ │ └─ call.js
│ │ ├─ App.jsx
│ │ ├─ index.css
│ │ └─ main.jsx
│ ├─ .env
│ ├─ eslint.config.js
│ ├─ index.html
│ ├─ package-lock.json
│ ├─ package.json
│ ├─ postcss.config.js
│ ├─ README.md
│ ├─ tailwind.config.js
│ └─ vite.config.js
│
├─ .gitignore
└─ README.md
PORT=5000 MONGO_URI=your_mongodb_uri JWT_SECRET=your_secret CLOUDINARY_CLOUD_NAME= CLOUDINARY_API_KEY= CLOUDINARY_API_SECRET=
VITE_API_URL=http://localhost:5000 VITE_SOCKET_URL=http://localhost:5000
git clone https://github.com/ans53/PrepPal.git cd PrepPal
cd backend npm install npm run dev
cd frontend npm install npm run dev
PrepPal was built to provide students with a seamless environment to chat, collaborate, and prepare together in real-time.
⭐ If you like the project, consider giving it a star!