While numerous online learning resources—such as coding platforms, video tutorials, discussion forums, and digital documentation—are readily available, many learners continue to prepare in isolation. This lack of peer interaction often leads to reduced motivation, limited exposure to diverse problem-solving strategies, and insufficient practice of real-world interview scenarios.
PrepPal is conceived as a real-time, community-driven web platform designed to address these challenges and support students as well as early-career professionals in their journey toward securing technical roles. The platform aims to transform the traditional, solitary approach to interview preparation into a collaborative and engaging learning experience. By fostering a supportive community environment, PrepPal enables users to connect with like-minded peers based on their technology stacks, experience levels, skill sets, and career aspirations. This targeted networking facilitates meaningful interactions, encourages knowledge exchange, and promotes structured peer-to-peer learning.
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!