The E-Learning Platform is a full-stack web application designed to deliver a complete online learning experience. It supports three distinct user roles — Students, Instructors, and Admins — each with tailored features and dashboards.
Unlike many basic MERN demos, this project goes beyond CRUD operations. It implements a role-based learning ecosystem with secure authentication, structured data models, and media handling for lectures. It was built to demonstrate how real-world learning management systems (LMS) can be architected and deployed.
- Education + Technology Impact: The demand for remote learning platforms surged after COVID-19. This project shows how a scalable LMS can be implemented using open-source technologies.
- Security-first approach: Authentication is powered by JWT tokens and Passport-JWT, ensuring that only authorized users access the right features.
- End-to-End Engineering: Covers the entire development lifecycle — database schema design, API development, role-based authorization, React/Redux frontend, and deployment readiness.
- Interview Value: Demonstrates both system design thinking (roles, flows, relations) and hands-on coding skills (MERN stack, file uploads, REST API, Redux state management).
- Role Separation: Students consume content, Instructors create content, and Admins govern the system.
- Flexible Lectures: Support for both YouTube links and local video uploads.
- Data Integrity: Structured models for Users, Courses, Categories, Lectures, Enrollments, and Profiles.
- Scalable Stack: Built with the MERN stack, making it deployable on cloud platforms like AWS, Render, or Heroku.
- Dashboard-driven UX: Each role gets personalized views to focus on their tasks.
- University or college online course portals.
- Corporate training and certification platforms.
- Freelance instructors hosting paid or free content.
- A demonstration project to showcase full-stack development + system design skills in interviews.
The platform is structured around three roles — Student, Instructor, and Admin.
 Each role has its own flow, features, and permissions.
- Sign Up & Login → Student registers and receives JWT token for secure access.
- Browse Courses & Categories → Explore all available courses under categories.
- Enroll in Courses → Select a course and enroll; enrollment record is created.
- Access Lectures → Once enrolled, student can watch course lectures (via YouTube link or uploaded video).
- Profile Management → Student can update personal info, education, and view progress.
- Login as Instructor → Redirected to Instructor dashboard.
- Create New Course → Enter course details, assign category.
- Add Lectures → Upload lecture video (local upload) or provide YouTube link.
- Manage Enrollments → View students enrolled in their courses.
- Update Courses → Edit course details or add/remove content as needed.
- Login as Admin → Redirected to Admin dashboard with system-wide access.
- Manage Categories → Create, update, and delete categories.
- Manage Users → View and manage student/instructor accounts.
- Manage Courses → Approve, update, or remove courses.
- System Oversight → Ensure smooth operations across platform.
- Students consume content.
- Instructors create/manage content.
- Admins govern and oversee the entire platform.
This clear separation of roles ensures security, scalability, and real-world usability.
flowchart LR %% ROLES (Client) subgraph Client S[Student UI] I[Instructor UI] A[Admin UI] end %% SERVER subgraph Server AU[Auth & JWT] C[Courses API] L[Lectures API] E[Enrollments API] CAT[Categories API] P[Profiles API] end %% DB subgraph DB U[(User)] CR[(Course)] LE[(Lecture)] EN[(Enrollment)] CA[(Category)] PR[(Profile)] end %% FLOWS S -->|login/register| AU I -->|login| AU A -->|login| AU S -->|browse/enroll| C S -->|watch lectures| L I -->|create/update course| C I -->|add lectures| L I -->|view enrollments| E A -->|manage categories| CAT A -->|manage users/courses| C %% API <-> DB AU <--> U C <--> CR L <--> LE E <--> EN CAT <--> CA P <--> PR  | Action / Feature | Student | Instructor | Admin | 
|---|---|---|---|
| Register / Login (JWT) | ✅ | ✅ | ✅ | 
| Browse Categories & Courses | ✅ | ✅ | ✅ | 
| Enroll in Courses | ✅ | — | ✅* | 
| Create / Update Courses | — | ✅ | ✅ | 
| Add Lectures (YouTube / Local) | — | ✅ | ✅ | 
| Manage Enrollments | — | ✅ | ✅ | 
| Manage Categories | — | — | ✅ | 
| Manage Users | — | — | ✅ | 
| Profiles | ✅ | ✅ | ✅ | 
This section explains all technical details of the project — architecture, data models, authentication flow, APIs, scalability, and security.
 It is designed so that any interview question about this project can be answered directly from here.
- Frontend: React, Redux, React Router (role-based UI, state management)
- Backend: Node.js, Express.js (REST APIs, modular routing)
- Database: MongoDB with Mongoose ODM
- Authentication: JWT (Bearer tokens) with Passport-JWT
- File Handling: express-fileupload (local uploads) + YouTube link integration
- Security: Bcrypt (password hashing), JWT expiry (3600s), middleware role checks
- Tooling: Nodemon, Concurrently, Postman for API testing
E-Learning_Platform/ ├─ client/ # React frontend (Redux, Router, UI components) │ ├─ public/ # Static assets │ ├─ src/ # React source code │ │ ├─ components/ # Reusable React components │ │ ├─ actions/ # Redux actions │ │ ├─ reducers/ # Redux reducers │ │ ├─ store.js # Redux store config │ │ ├─ App.js # Root React component │ │ └─ index.js # Entry point for React │ └─ package.json # Frontend dependencies & scripts │ ├─ config/ # Backend configuration │ ├─ keys.js # MongoDB URI & JWT secret (replace with .env in prod) │ └─ passport.js # Passport-JWT strategy │ ├─ models/ # Mongoose schemas │ ├─ User.js # User model (Student/Instructor/Admin) │ ├─ Course.js # Course model │ ├─ Category.js # Category model │ ├─ Lecture.js # Lecture model │ ├─ Enrollment.js # Enrollment model │ └─ Profile.js # Profile model │ ├─ routes/ │ └─ api/ # Express routes for APIs │ ├─ users.js # User auth & CRUD │ ├─ course.js # Course APIs │ ├─ category.js # Category APIs │ ├─ lecture.js # Lecture APIs │ ├─ enrollRoute.js # Enrollment APIs │ └─ profile.js # Profile APIs │ ├─ validation/ # Request validators │ └─ ... # Validation logic for inputs │ ├─ img/ # Screenshots and demo images │ ├─ server.js # Express server entry point ├─ package.json # Backend dependencies & scripts └─ README.md # Documentation erDiagram USER { string first_name string last_name string email PK string password string role } COURSE { string courseName string courseDescription string instructor FK string category } LECTURE { string title string videoLink string course FK } CATEGORY { int no string categoryName } ENROLLMENT { int no string student FK string course FK bool approved } PROFILE { string bio string education string experience object socials string user FK } USER ||--o{ COURSE : "creates" USER ||--o{ ENROLLMENT : "enrolls" COURSE ||--o{ LECTURE : "contains" COURSE ||--o{ ENROLLMENT : "has" USER ||--|| PROFILE : "owns" CATEGORY ||--o{ COURSE : "categorizes"  | Model | Key Fields | Notes | 
|---|---|---|
| User | first_name, last_name, email*, password*, role* | Role = student / instructor / admin | 
| Course | courseName*, courseDescription*, instructor (ref User), category | Linked to Instructor & Category | 
| Lecture | title*, videoLink*, course (ref Course) | Supports YouTube / local | 
| Category | no*, categoryName* | Groups courses | 
| Enrollment | student (ref User), course (ref Course), approved | Student ↔ Course mapping | 
| Profile | bio, education, experience, socials, user (ref User) | 1–1 with User | 
sequenceDiagram participant U as User (Student/Instructor/Admin) participant C as Client (React) participant S as Server (Express) participant DB as MongoDB U->>C: Enter email & password C->>S: POST /users/login S->>DB: Validate user (email + bcrypt password) DB-->>S: Valid user S-->>C: Return JWT (Bearer <token>, expires in 3600s) C->>S: Request protected route with Authorization header S->>S: Passport-JWT verifies token & extracts role S-->>C: Respond with protected resource (JSON)  | Module | Key Endpoints | 
|---|---|
| Auth / Users | POST /users/register,POST /users/login,GET /users,PUT /user,DELETE /user | 
| Courses | POST /course/add,GET /courses,PUT /course?id=,DELETE /course?id= | 
| Lectures | GET /lectures?id=<courseId>,POST /lectures/youtubeupload,POST /lectures/localupload | 
| Enrollments | POST /enroll/add,GET /enrollments,DELETE /enrollment?id= | 
| Categories | POST /category/add,GET /categories,PUT /category?id= | 
| Profiles | POST /profile,GET /profile/:id,PUT /profile | 
flowchart LR subgraph Client [React + Redux Client] ST[Student UI] IN[Instructor UI] AD[Admin UI] end subgraph Server [Node.js + Express APIs] AU[Auth & JWT] CO[Courses API] LE[Lectures API] EN[Enrollments API] CA[Categories API] PR[Profiles API] end subgraph DB [MongoDB + Mongoose Models] U[(User)] CR[(Course)] L[(Lecture)] E[(Enrollment)] CAT[(Category)] P[(Profile)] end ST --> AU ST --> CO ST --> LE IN --> AU IN --> CO IN --> LE IN --> EN AD --> AU AD --> CO AD --> CA AU <--> U CO <--> CR LE <--> L EN <--> E CA <--> CAT PR <--> P  - User logs in → token generated via POST /users/login.
- Client stores token → every protected request sends Authorization: Bearer <token>.
- Middleware verification → passport.js(Passport-JWT) verifies token signature & expiry.
- Role check → only Instructor/Admin can access privileged endpoints (via req.user.role).
- DB operation → Mongoose executes the query (CRUD on models).
- Response → JSON returned to the client (success or error payload).
- Secrets management - mongoURI,- secretOrKeyare currently in- config/keys.js; move to- .env(use- dotenv).
 
- Input validation - Add schema validation (e.g., express-validator or Joi) on all request bodies/params.
 
- File uploads - Enforce size/type limits and safe paths when using local uploads (or prefer a managed store).
 
- Rate limiting & brute-force protection - Apply express-rate-limit on auth routes (/users/login,/users/register).
 
- Apply express-rate-limit on auth routes (
- Transport security - Enforce HTTPS in production (e.g., behind NGINX/Cloud provider) and set Secure/HttpOnly flags where applicable.
 
- CORS & headers - Configure CORS allowlist and add security headers (e.g., helmet).
 
- Error handling - Centralize error responses; avoid leaking stack traces or internal messages in production.
 
- Stateless auth - JWT enables horizontal scaling (no server session affinity).
 
- Database scale & HA - Use MongoDB replica sets (HA) and sharding for very large datasets.
 
- File storage & delivery - Replace local storage with S3/Cloudinary + CDN (faster, cheaper egress, versioning).
 
- Service decomposition - Future split into auth-service, course-service, enrollment-service (clear ownership, independent scaling).
 
- Caching - Add Redis for hot reads (course catalog, categories, user profile), plus cache-invalidation strategy.
 
- Edge & proxy - Put NGINX/Cloud Load Balancer in front for routing, TLS termination, and rate limiting at the edge.
 
- Observability - Centralized logs (Winston), metrics (Prometheus), dashboards (Grafana), tracing (OpenTelemetry) for bottleneck analysis.
 
- Node.js LTS (>=16.x recommended)
- npm
- MongoDB (local or Atlas cluster)
git clone https://github.com/devarshpatel1506/E-Learning_Platform.git cd E-Learning_Platform# Server deps npm install # Client deps cd client npm install cd ..# Copy the example config and set your own values: cp config/keys.js.example config/keys.js #config/keys.js.example module.exports = { mongoURI: "mongodb+srv://<user>:<pass>@<cluster>/<db>?retryWrites=true&w=majority", secretOrKey: "your_jwt_secret" };# Run backend only npm run server # Starts Express server on http://localhost:5000 # Run frontend only npm run client Starts React dev server on http://localhost:3000 # Run both together npm run dev











