- πΈ Platform Showcase
- β¨ Features
- π οΈ Tech Stack
- ποΈ Architecture
- π Getting Started
- π Project Structure
- π API Endpoints
- ποΈ Database Schema
- π¨ Key Features Explained
- π§ Configuration
- π§ͺ Testing
- π§― Common Setup Errors & Fixes
- π’ Deployment
- π€ Contributing
- Code of Conduct
- π License
- π Smart Mentor Discovery - Find mentors based on skills, expertise, and ratings
- π Session Booking - Schedule 1-on-1 mentoring sessions with ease
- π¬ Real-time Chat - Instant messaging with mentors using Stream Chat
- π₯ Video Conferencing - High-quality video sessions powered by ZegoCloud
- π Task Management - Track assignments and progress with your mentor
- π Karma System - Earn points for profile completion, sessions, and engagement
- π Community Forum - Ask questions and get answers from the community
- π Progress Tracking - Monitor your learning journey and achievements
- π Mentee Management - Manage all your students in one place
- β° Session Scheduling - Control your availability and bookings
- π° Earnings Dashboard - Track your income and payment history
- π Analytics - View session stats and student progress
- βοΈ Profile Customization - Showcase your skills, experience, and social links
- π― Task Assignment - Create and track tasks for your mentees
- β Reviews & Ratings - Build your reputation through student feedback
- π¬ Direct Messaging - Stay connected with your mentees
- π Secure Authentication - JWT-based auth with Google OAuth integration
- π¨ Modern UI/UX - Beautiful dark theme with smooth animations
- π± Responsive Design - Works seamlessly on desktop, tablet, and mobile
- β‘ Real-time Updates - Live notifications and instant messaging
- π Smart Notifications - Stay updated on bookings, messages, and tasks
- π³ Payment Integration - Secure payment processing with Razorpay
- π Skill-based Matching - Connect with mentors in your field of interest
| Technology | Purpose | Version |
|---|---|---|
| React | UI Framework | 19.1.1 |
| Vite | Build Tool | 7.1.7 |
| TailwindCSS | Styling | 3.4.18 |
| React Router | Navigation | 7.9.6 |
| Axios | HTTP Client | 1.13.2 |
| Socket.io Client | Real-time Communication | 4.8.1 |
| Stream Chat | Messaging Service | 9.26.1 |
| ZegoCloud | Video Conferencing | 2.17.1 |
| Framer Motion | Animations | 12.23.26 |
| Lucide React | Icons | 0.553.0 |
| React Toastify | Notifications | 11.0.5 |
| JWT Decode | Token Management | 4.0.0 |
| Date-fns | Date Utilities | 4.1.0 |
| Technology | Purpose | Version |
|---|---|---|
| Node.js | Runtime | >=18.0.0 |
| Express | Web Framework | 5.1.0 |
| MongoDB | Database | 8.19.3 |
| Mongoose | ODM | 8.19.3 |
| Socket.io | WebSocket Server | 4.7.5 |
| JWT | Authentication | 9.0.2 |
| Bcrypt | Password Hashing | 6.0.0 |
| Cloudinary | Image Storage | 2.8.0 |
| Razorpay | Payment Gateway | 2.9.6 |
| Nodemailer | Email Service | 6.9.16 |
| Zod | Validation | 4.1.12 |
graph TB
%% User Layer
subgraph "Users"
Student[π¨βπ Student]
Mentor[π¨βπ« Mentor]
end
%% Frontend Layer
subgraph "Frontend (React + Vite)"
Web[π Web App<br/>Responsive UI<br/>Dark Theme]
ChatUI[π¬ Chat Interface<br/>Stream Chat]
VideoUI[π₯ Video Conference<br/>ZegoCloud]
Notifications[π Real-time Notifications<br/>Socket.io]
end
%% Backend Layer
subgraph "Backend (Node.js + Express)"
API[π REST API<br/>Authentication<br/>Business Logic]
SocketServer[π‘ Socket.io Server<br/>Real-time Events]
Auth[JWT Auth<br/>Google OAuth]
FileUpload[π File Upload<br/>Cloudinary]
Payment[π³ Payment Gateway<br/>Razorpay]
Email[π§ Email Service<br/>Nodemailer]
end
%% Database Layer
subgraph "Database"
MongoDB[(π MongoDB<br/>User Data<br/>Sessions<br/>Messages)]
end
%% External Services
subgraph "External Services"
Stream[π¬ Stream Chat<br/>Messaging API]
Zego[π₯ ZegoCloud<br/>Video SDK]
Google[π Google OAuth<br/>Authentication]
Razorpay[π° Razorpay<br/>Payments]
Cloudinary[πΌοΈ Cloudinary<br/>Image Storage]
end
%% Connections
Student --> Web
Mentor --> Web
Web --> API
Web --> ChatUI
Web --> VideoUI
Web --> Notifications
ChatUI --> Stream
VideoUI --> Zego
Notifications --> SocketServer
API --> Auth
API --> FileUpload
API --> Payment
API --> Email
Auth --> Google
Payment --> Razorpay
FileUpload --> Cloudinary
API --> MongoDB
SocketServer --> MongoDB
- Single Page Application (SPA) built with React 19
- Component-based architecture with reusable UI components
- State management using React Context and hooks
- Real-time communication via Socket.io and WebSocket connections
- Responsive design with TailwindCSS for mobile-first approach
- RESTful API design with Express.js framework
- Microservices-ready structure with modular controllers
- Real-time capabilities using Socket.io for live updates
- Authentication & Authorization with JWT tokens and OAuth
- File handling with Cloudinary integration for media uploads
- Document-based database using MongoDB with Mongoose ODM
- Schema validation with Zod for input validation
- Indexing strategy for optimal query performance
- Data relationships managed through references and population
- Third-party services integration (Stream Chat, ZegoCloud, Razorpay)
- OAuth 2.0 flow for Google authentication
- Webhook handling for payment confirmations
- Email service integration for notifications
- WebSocket connections for instant messaging and notifications
- Room-based communication for video conferencing
- Event-driven updates for live dashboard data
- Connection management with automatic reconnection
Before you begin, ensure you have the following installed:
git clone https://github.com/arshchouhan/MentorLink.git
cd MentorLinkcd Backend
npm installCreate a .env file in the Backend directory:
# Server Configuration
PORT=4000
NODE_ENV=development
# Database
MONGO_URI=mongodb://localhost:27017/mentorlink
# Authentication
JWT_SECRET=your_super_secret_jwt_key_here
# Cloudinary (Image Upload)
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Payment Gateway
RAZORPAY_KEY_ID=your_razorpay_key
RAZORPAY_KEY_SECRET=your_razorpay_secret
# Email Service
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_password
# Stream Chat
STREAM_API_KEY=your_stream_api_key
STREAM_API_SECRET=your_stream_api_secret
# Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# Java Microservices (Optional)
JAVA_KARMA_API=http://localhost:8081/api/karmacd ../Frontend
npm installCreate a .env.local file in the Frontend directory:
VITE_API_URL=http://localhost:4000/api
VITE_STREAM_CHAT_API_KEY=your_stream_api_key
VITE_GOOGLE_CLIENT_ID=your_google_client_id
VITE_RAZORPAY_KEY_ID=your_razorpay_keyStart Backend Server:
cd Backend
npm run dev
# Server runs on http://localhost:4000Start Frontend Development Server:
cd Frontend
npm run dev
# App runs on http://localhost:5173Frontend/
βββ src/
β βββ assets/ # Images, logos, and static files
β β βββ Logo.png
β β βββ MentorDahboard.png
β β βββ studentdashbaordimage.png
β β βββ connect*.png
β βββ components/ # Reusable React components
β β βββ Chat/ # Chat components
β β βββ Forum/ # Forum components
β β βββ StudentChat/ # Student chat components
β β βββ ...
β βββ config/ # Configuration files
β β βββ apiConfig.js # Backend switcher (Node.js/Java)
β β βββ zegoConfig.js # Video conference config
β βββ context/ # React Context providers
β βββ hooks/ # Custom React hooks
β βββ pages/ # Page components
β β βββ MentorDashboard.jsx
β β βββ StudentDashboard.jsx
β β βββ MeetingRoomZego.jsx
β β βββ ...
β βββ services/ # API service layer
β β βββ authService.js
β β βββ messageService.js
β β βββ forumService.js
β β βββ ...
β βββ utils/ # Utility functions
β βββ App.jsx # Main app component
β βββ main.jsx # Entry point
βββ package.json
βββ vite.config.js
Backend/
βββ config/
β βββ db.js # MongoDB connection
βββ controllers/ # Route controllers
β βββ auth.controller.js
β βββ mentor.controller.js
β βββ user.controller.js
β βββ message.controller.js
β βββ forum.controller.js
β βββ ...
βββ models/ # Mongoose schemas
β βββ user.model.js
β βββ mentorProfile.model.js
β βββ booking.model.js
β βββ message.model.js
β βββ ...
βββ routes/ # API routes
β βββ auth.routes.js
β βββ mentor.routes.js
β βββ message.routes.js
β βββ ...
βββ middleware/
β βββ auth.middleware.js # JWT authentication
βββ socket/ # Socket.IO handlers
β βββ socketHandlers.js # Meeting rooms
β βββ chatSocketHandlers.js # Chat messaging
βββ utils/
β βββ generateToken.js
βββ index.js # Server entry point
βββ package.json
POST /api/auth/register # Register new user
POST /api/auth/login # Login user
POST /api/auth/google # Google OAuth login
POST /api/auth/logout # Logout user
POST /api/auth/forgot-password # Request password reset
POST /api/auth/reset-password # Reset passwordGET /api/user/me # Get current user
PUT /api/user/student # Update student profile
GET /api/user/:id # Get user by IDGET /api/mentors # Get all mentors (with filters)
GET /api/mentors/:id # Get mentor by ID
POST /api/mentors # Create/update mentor profile
POST /api/mentors/upload-photo # Upload profile photo
DELETE /api/mentors/upload-photo # Remove profile photoPOST /api/bookings # Create booking
GET /api/bookings # Get user's bookings
GET /api/bookings/mentor # Get mentor's bookings
POST /api/bookings/:id/join # Join session
PUT /api/bookings/:id/status # Update booking statusGET /api/messages/conversations # Get all conversations
GET /api/messages/conversations/:id/messages # Get messages
POST /api/messages/send # Send message
PUT /api/messages/conversations/:id/read # Mark as readGET /api/forum/questions # Get all questions
POST /api/forum/questions # Create question
GET /api/forum/questions/:id # Get question by ID
POST /api/forum/questions/:id/answer # Answer question
POST /api/forum/questions/:id/upvote # Upvote questionGET /api/tasks # Get mentor's tasks
POST /api/tasks # Create task
PUT /api/tasks/:id # Update task
DELETE /api/tasks/:id # Delete task
GET /api/tasks/mentee/:id # Get mentee's tasks{
_id: ObjectId,
name: String (required),
email: String (required, unique),
password: String (required, hashed),
role: String (enum: ['student', 'mentor']),
profilePicture: String (Cloudinary URL),
isVerified: Boolean (default: false),
karmaPoints: Number (default: 0),
createdAt: Date,
updatedAt: Date
}{
_id: ObjectId,
userId: ObjectId (ref: 'User'),
bio: String,
skills: [String],
experience: Number (years),
hourlyRate: Number,
availability: [{
day: String,
slots: [{
startTime: String,
endTime: String,
isBooked: Boolean
}]
}],
socialLinks: {
linkedin: String,
github: String,
portfolio: String
},
rating: Number (1-5),
reviewCount: Number,
totalEarnings: Number
}{
_id: ObjectId,
studentId: ObjectId (ref: 'User'),
mentorId: ObjectId (ref: 'User'),
sessionDate: Date,
startTime: String,
endTime: String,
status: String (enum: ['pending', 'confirmed', 'completed', 'cancelled']),
topic: String,
meetingRoomId: String (ZegoCloud),
paymentId: String (Razorpay),
amount: Number,
createdAt: Date
}{
_id: ObjectId,
conversationId: String (Stream Chat),
senderId: ObjectId (ref: 'User'),
receiverId: ObjectId (ref: 'User'),
content: String,
messageType: String (enum: ['text', 'question', 'insight', 'advice', 'action']),
isRead: Boolean (default: false),
createdAt: Date
}{
_id: ObjectId,
mentorId: ObjectId (ref: 'User'),
menteeId: ObjectId (ref: 'User'),
title: String,
description: String,
status: String (enum: ['not_started', 'in_progress', 'pending_review', 'completed']),
priority: String (enum: ['low', 'medium', 'high']),
dueDate: Date,
progress: Number (0-100),
createdAt: Date,
updatedAt: Date
}{
_id: ObjectId,
bookingId: ObjectId (ref: 'Booking'),
reviewerId: ObjectId (ref: 'User'),
revieweeId: ObjectId (ref: 'User'),
rating: Number (1-5),
comment: String,
createdAt: Date
}- ZegoCloud Integration - Professional video/audio quality
- Screen Sharing - Share your screen during sessions
- Real-time Chat - Text chat during video calls
- Custom Branding - Themed to match platform design
- Stream Chat SDK - Enterprise-grade messaging
- Message Types - Normal, questions, insights, advice, action items
- Read Receipts - Know when messages are read
- Typing Indicators - See when others are typing
- Message History - All conversations saved to database
Earn karma points for various activities:
- β Profile Completion - 50 points
- β Session Completed - 30 points
- β Message Sent - 5 points
- β Skill Added - 10 points
- β Goal Set - 15 points
- Create Tasks - Mentors assign tasks to mentees
- Track Progress - Monitor completion percentage
- Status Updates - Not Started β In Progress β Pending Review β Completed
- Priority Levels - High, Medium, Low
The platform supports switching between Node.js and Java backends. Edit Frontend/src/config/apiConfig.js:
const ACTIVE_BACKEND = 'nodejs'; // or 'java'
const BACKEND_URLS = {
nodejs: 'http://localhost:4000/api',
java: 'http://localhost:8081/api'
};Customize video conference theme in Frontend/src/config/zegoConfig.js:
- Colors, branding, and UI elements
- Matches platform's dark theme with indigo accents
cd Frontend
npm run lintcd Backend
npm run dev- Create a booking between mentor and student
- Click "Join Session" when session time arrives
- Both users should connect to the same room
- Open mentor and student dashboards in separate windows
- Send messages from either side
- Messages should appear instantly
cd Frontend
npm run build
# Deploy the 'dist' foldercd Backend
# Set environment variables on hosting platform
npm startThis section helps contributors quickly diagnose common issues encountered during local setup.
Cause:
- Missing or incorrect
.envvalues inBackend/.env
Fix:
- Ensure all required variables (like
MONGO_URI,JWT_SECRET) are defined - Restart server after updating env:
npm run devCause:
VITE_API_URLinFrontend/.env.localis incorrect
Fix:
- Make sure it matches backend port:
VITE_API_URL=http://localhost:4000/apiCause:
- MongoDB not running locally
Fix:
- Start MongoDB service:
mongodCause:
- Another process using port
4000or5173
Fix:
- Change port in
.env
PORT=5000- Or kill existing process:
npx kill-port 4000Cause:
- Old Node.js version
Fix:
- Ensure Node.js β₯ 18:
node -vContributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
We are committed to fostering a welcoming and safe environment for everyone. Please read our Code of Conduct to understand the standards we expect from our community members.
This project is licensed under the ISC License.
Arsh Chauhan
- GitHub: @arshchouhan
- Email: arshchouhan004@gmail.com
- React Team - For the amazing framework
- Vite - For blazing fast build tool
- TailwindCSS - For utility-first CSS
- ZegoCloud - For video conferencing SDK
- Stream - For chat infrastructure
- MongoDB - For flexible database
- All Contributors - For making this project better




