Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🚀 PrepPal

Real-Time Study Collaboration Platform


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.


Features

  • 🔐 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

🏗 Tech Stack

💻 Frontend

  • React (Vite)
  • TailwindCSS
  • Socket.IO Client
  • WebRTC
  • Axios
  • Context API

🖥 Backend

  • Node.js
  • Express.js
  • MongoDB + Mongoose
  • Socket.IO
  • JWT Authentication
  • Cloudinary
  • Multer

📂 Project Structure


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

🔐 Environment Variables

Backend (.env)

PORT=5000
MONGO_URI=your_mongodb_uri
JWT_SECRET=your_secret
CLOUDINARY_CLOUD_NAME=
CLOUDINARY_API_KEY=
CLOUDINARY_API_SECRET=

Frontend (.env)

VITE_API_URL=http://localhost:5000
VITE_SOCKET_URL=http://localhost:5000

⚙️ Installation

Clone the Repository

git clone https://github.com/ans53/PrepPal.git
cd PrepPal

Backend Setup

cd backend
npm install
npm run dev

Frontend Setup

cd frontend
npm install
npm run dev

Screenshots

Screenshot (1129) Screenshot (1130) Screenshot (1131) Screenshot (1132) Screenshot (1133) Screenshot (1134) Screenshot (1135) Screenshot (1136) Screenshot (1137) Screenshot (1138) Screenshot (1139) Screenshot (1140) Screenshot (1141) Screenshot (1142) Screenshot (1143) Screenshot (1144) Screenshot (1145) Screenshot (1146) Screenshot (1147) Screenshot (1148) Screenshot (1149) Screenshot (1150) Screenshot (1151) Screenshot (1152) Screenshot (1153) Screenshot (1154) Screenshot (1156) Screenshot (1157)

🎯 Purpose

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!

About

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages