A complete Learning Management System (LMS) feature has been successfully implemented for the Alumni Management System. This enables alumni to create, share, and enroll in courses with progress tracking, quizzes, certificates, and skill development pathways.
- Structure: Enhanced from basic course model to full LMS course schema
- Key Fields:
title,description,thumbnail- Course metadatainstructor- Reference to User modelcategory,tags,level- Organization and filteringduration- Total course duration in minutesisFree,price- Pricing informationmodules- Array of module objects containing:- Nested lessons with videos, content, resources
- Quiz questions within each lesson
learningOutcomes,requirements- Course detailsenrollmentCount,averageRating- Course statisticsisPublished,status- Publication controlcertificateTemplate- Certificate design reference
Indexes: instructors, categories, tags, published status, creation date
- Purpose: Track individual student progress through courses
- Key Fields:
user,course- References (unique combination)progress- Percentage (0-100)completedLessons- Array of completed lesson data with timestamps and scorescompletedModules- Array of completed module dataquizAttempts- Array of quiz attempt records with:- Score, total points, percentage, pass status
- Question-by-question answers with correctness
certificateIssued,certificateId,certificateUrl- Certificate trackingrating,review- Course feedbacktotalTimeSpent- Cumulative learning time in secondslastAccessedAt- For tracking active learners
Indexes: user-course combination (unique), completion status, creation date
Course Management Functions:
createCourse()- Create new course (instructor/admin)updateCourse()- Edit course details with authorizationpublishCourse()- Make course publicdeleteCourse()- Archive course (soft delete)
Course Browsing Functions:
listCourses()- Get published courses with filters (category, level, tags, search)getCourseDetails()- Get full course info with enrollment statusgetInstructorCourses()- Get courses created by current user
Enrollment Functions:
enrollCourse()- Enroll user in courseupdateProgress()- Update lesson completion and progresscompleteLesson()- Mark individual lesson as complete
Assessment Functions:
submitQuiz()- Process quiz submissions, calculate scoresgenerateCertificate()- Issue certificate upon course completion
User Learning Functions:
getMyLearning()- Get enrolled courses with filteringgetUserStats()- Get learning statistics dashboard
File: backend/routes/course.routes.js
Public Routes:
GET /- List published coursesGET /:id- Get course details
Authenticated Routes:
GET /my-learning/list- Get user's enrolled coursesGET /my-learning/stats- Get learning statisticsGET /instructor/courses- Get instructor's courses
Course Management:
POST /- Create coursePUT /:id- Update coursePOST /:id/publish- Publish courseDELETE /:id- Archive course
Enrollment & Progress:
POST /:courseId/enroll- Enroll in coursePOST /enrollment/:enrollmentId/progress- Update progressPOST /enrollment/:enrollmentId/lesson/:lessonId/complete- Mark lesson complete
Assessments:
POST /enrollment/:enrollmentId/quiz/:quizId/submit- Submit quiz
Certificates:
POST /enrollment/:enrollmentId/certificate/generate- Generate certificate
File: backend/server.js
Course router mounted at /api/courses:
const courseRouter = require('./routes/course.routes');
app.use('/api/courses', courseRouter);File: backend/models/Index.js
- Added
Enrollmentto exports for use in controllers
Location: frontend/src/components/CourseCatalog.jsx
Features:
- Browse all published courses
- Real-time search functionality
- Filter by category, level
- Pagination support
- Responsive grid layout (1/2/3 columns)
- Course cards showing:
- Thumbnail image
- Title and description
- Instructor info with avatar
- Enrollment count and ratings
- Price/Free status
- Category tags
Props: None (uses URL params and context)
Key Hooks:
useNavigate- NavigationuseSearchParams- URL-based filteringuseState- Local state managementuseEffect- API data fetching
Location: frontend/src/components/CourseDetails.jsx
Features:
- Full course information display
- Hero section with thumbnail
- Learning outcomes list
- Course requirements
- Course content breakdown by modules/lessons
- Sticky sidebar with:
- Pricing information
- Instructor profile
- Course statistics
- Enroll/Continue buttons
- Responsive design
Navigation:
- Navigate to
/course/:courseIdto view
Location: frontend/src/components/CoursePlayer.jsx
Features:
- Interactive lesson playback interface
- Collapsible sidebar for course navigation
- Video player support (iframe-based)
- Lesson content with markdown rendering
- Resource downloads
- Quiz interface with:
- Multiple choice questions
- True/false questions
- Score calculation
- Result feedback
- Progress tracking
- Lesson completion marking
- Navigation between lessons/modules
Navigation:
- Navigate to
/course-player/:enrollmentIdto start learning
Location: frontend/src/components/MyLearning.jsx
Features:
- Dashboard for learner's courses
- Statistics cards showing:
- Total enrollments
- In-progress courses
- Completed courses
- Certificates earned
- Filter by course status (All/In Progress/Completed)
- Course cards with:
- Progress bar
- Time spent tracking
- Continue learning button
- View certificate button (for completed)
- Pagination support
Navigation:
- Navigate to
/my-learningto access
Location: frontend/src/components/CreateCourse.jsx
Features:
- Full course creation interface for instructors
- Sections for:
- Basic information (title, description, category, level)
- Pricing setup (free/paid)
- Learning outcomes management
- Requirements management
- Tags management
- Module and lesson creation
- Expandable/collapsible modules
- Inline lesson editing
- Video URL support
- Form validation
- Save course functionality
Navigation:
- Navigate to
/create-courseto create
Usage Pattern:
- Fill in basic course info
- Add learning outcomes and requirements
- Create modules
- Add lessons to modules
- Add video URLs, content, resources
- Save course (starts in draft)
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/courses |
No | List published courses with filters |
| GET | /api/courses/:id |
No | Get course details |
| POST | /api/courses |
Yes | Create new course |
| PUT | /api/courses/:id |
Yes | Update course |
| POST | /api/courses/:id/publish |
Yes | Publish course |
| DELETE | /api/courses/:id |
Yes | Archive course |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/courses/:courseId/enroll |
Yes | Enroll in course |
| POST | /api/courses/enrollment/:enrollmentId/progress |
Yes | Update progress |
| POST | /api/courses/enrollment/:enrollmentId/lesson/:lessonId/complete |
Yes | Complete lesson |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/courses/my-learning/list |
Yes | Get enrolled courses |
| GET | /api/courses/my-learning/stats |
Yes | Get learning stats |
| GET | /api/courses/instructor/courses |
Yes | Get instructor's courses |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/courses/enrollment/:enrollmentId/quiz/:quizId/submit |
Yes | Submit quiz |
| POST | /api/courses/enrollment/:enrollmentId/certificate/generate |
Yes | Generate certificate |
- Updated Course.model.js with LMS schema
- Created Enrollment.model.js
- Updated course.controller.js with all LMS functions
- Updated course.routes.js with all endpoints
- Added course router to server.js
- Updated models Index.js with Enrollment export
Required Additional Steps:
- Add Route Definitions - Update your routing configuration:
// In your routing file (e.g., App.jsx or routes.jsx)
import CourseCatalog from './components/CourseCatalog';
import CourseDetails from './components/CourseDetails';
import CoursePlayer from './components/CoursePlayer';
import MyLearning from './components/MyLearning';
import CreateCourse from './components/CreateCourse';
// Add these routes:
<Route path="/courses" element={<CourseCatalog />} />
<Route path="/course/:courseId" element={<CourseDetails />} />
<Route path="/course-player/:enrollmentId" element={<CoursePlayer />} />
<Route path="/my-learning" element={<MyLearning />} />
<Route path="/create-course" element={<PrivateRoute><CreateCourse /></PrivateRoute>} />
<Route path="/instructor/my-courses" element={<PrivateRoute><InstructorCourses /></PrivateRoute>} />- Add Navigation Links - Add menu items in your Header/Navigation component:
<Link to="/courses">Learning</Link>
<Link to="/my-learning">My Learning</Link> {/* For logged-in users */}
<Link to="/create-course">Create Course</Link> {/* For instructors */}-
Create InstructorCourses Component (Optional but recommended):
- List courses created by the current user
- Edit/delete course options
- Publish/unpublish controls
-
Styling Integration:
- All components use Tailwind CSS (matching your existing setup)
- Dark mode support via
useTheme()context - Framer Motion animations for smooth UX
✅ Browse and search courses by category, level, tags ✅ Enroll in free/paid courses ✅ Watch video lessons with multimedia support ✅ Track progress with visual indicators ✅ Complete lessons and modules ✅ Take quizzes with instant grading ✅ Earn certificates upon completion ✅ View learning statistics ✅ Rate and review courses ✅ Access course resources and downloads ✅ Continue learning from where they left off
✅ Create courses with multiple modules ✅ Add lessons with video, content, and resources ✅ Create quizzes with various question types ✅ Set learningoutcomes and requirements ✅ Control course publication status ✅ Set free/paid pricing ✅ Track enrollment numbers ✅ View student progress ✅ Manage course content ✅ Archive courses
✅ Course filtering and search ✅ Progress calculation ✅ Quiz scoring and grading ✅ Certificate generation ✅ Learning statistics ✅ User enrollment tracking ✅ Pagination for lists ✅ Dark mode support ✅ Responsive design (mobile-friendly) ✅ Proper authorization checks
- User clicks "Enroll" on course details page
- POST to
/api/courses/:courseId/enroll - Backend creates Enrollment record
- Increments course enrollmentCount
- Redirect to My Learning or CoursePlayer
- User clicks "Mark as Complete" or passes quiz
- POST to
/api/courses/enrollment/:enrollmentId/lesson/:lessonId/complete - Backend adds lessonId to completedLessons array
- Recalculates progress percentage
- If progress = 100%, marks course as complete
- UI updates with checkmark and new progress
- User completes course (100% progress)
- Click "Generate Certificate" button
- POST to
/api/courses/enrollment/:enrollmentId/certificate/generate - Backend creates unique certificateId
- Sets certificateIssued = true
- Returns certificate URL
- User can download/view certificate
- InstructorCourses Component - Manage created courses
- Certificate Service - Generate PDF certificates
- Payment Integration - Stripe/PayPal for paid courses
- Notifications - Notify students of course updates
- Reviews & Ratings - Student course feedback
- Leaderboards - Top learners/courses
- Discussion Forums - Per-course Q&A
- Student Reports - Detailed progress analytics
- Course Analytics - Instructor dashboard with student metrics
- Email Notifications - Course completion, enrollment confirmations
- Certificate design templates
- Question types (currently: multiple-choice, true-false, short-answer)
- Course duration calculation logic
- Progress calculation algorithm
- Quiz passing scores
- Pricing/subscription models
Use Postman or similar tool to test:
- Create Course (Auth Required)
POST /api/courses
Headers: { Authorization: "Bearer TOKEN" }
Body: { title, description, category, level, isFree, modules: [] }
- Enroll in Course (Auth Required)
POST /api/courses/{courseId}/enroll
Headers: { Authorization: "Bearer TOKEN" }
- Get My Learning
GET /api/courses/my-learning/list
Headers: { Authorization: "Bearer TOKEN" }
Query: ?status=all&page=1
- Navigate to
/coursesand verify catalog loads - Search/filter courses
- Click course to view details
- Enroll in a course
- Navigate to
/my-learningto see enrolled course - Click "Continue Learning"
- Complete a lesson
- Take quiz (if available)
- View certificate (if completed)
- ✅ backend/models/Course.model.js - Updated
- ✅ backend/models/Enrollment.model.js - Created
- ✅ backend/controllers/course.controller.js - Updated
- ✅ backend/routes/course.routes.js - Updated
- ✅ backend/models/Index.js - Updated
- ✅ backend/server.js - Updated
- ✅ frontend/src/components/CourseCatalog.jsx - Created
- ✅ frontend/src/components/CourseDetails.jsx - Created
- ✅ frontend/src/components/CoursePlayer.jsx - Created
- ✅ frontend/src/components/MyLearning.jsx - Created
- ✅ frontend/src/components/CreateCourse.jsx - Created
Issue: Course doesn't show up in catalog
- Solution: Ensure course has
isPublished: trueandstatus: 'published'
Issue: Enrollment fails
- Solution: Check user authentication and verify course exists
Issue: Quiz doesn't grade correctly
- Solution: Verify quiz.questions[].correctAnswer matches user answer exactly
Issue: Certificate button not showing
- Solution: Ensure course is completed (progress = 100) and enrollment exists
The Learning & Certification Portal feature is now fully implemented and integrated into your Alumni Management System. All backend models, controllers, and routes are in place, and responsive React components are ready for frontend integration. Follow the integration checklist to connect the frontend components to your routing system and start using the LMS!