- Overview
- KiαΊΏn trΓΊc tα»ng quan
- Features
- Technology Stack
- KiαΊΏn trΓΊc nghiα»p vα»₯
- Getting Started
- User Roles & Credentials
- Project Structure
- Core Features Documentation
- Design System
- Development Guidelines
- Testing & Quality Assurance
- Deployment
- Contributing
- License
Learning Management System (LMS) lΓ mα»t hα» thα»ng quαΊ£n lΓ½ hα»c tαΊp toΓ n diα»n Δược xΓ’y dα»±ng vα»i cΓ΄ng nghα» web thuαΊ§n tΓΊy (Vanilla JavaScript), khΓ΄ng phα»₯ thuα»c vΓ o bαΊ₯t kα»³ framework nΓ o. Hα» thα»ng Δược thiαΊΏt kαΊΏ Δα» phα»₯c vα»₯ nhu cαΊ§u ΔΓ o tαΊ‘o vΓ hα»c tαΊp trα»±c tuyαΊΏn cho cΓ‘c tα» chα»©c giΓ‘o dα»₯c, doanh nghiα»p vα»i quy mΓ΄ tα»« nhα» ΔαΊΏn lα»n.
- TαΊ§m nhΓ¬n: Trα» thΓ nh giαΊ£i phΓ‘p LMS hΓ ng ΔαΊ§u vα»i khαΊ£ nΔng triα»n khai nhanh chΓ³ng, dα» dΓ ng tΓΉy biαΊΏn vΓ khΓ΄ng yΓͺu cαΊ§u kiαΊΏn thα»©c lαΊp trΓ¬nh phα»©c tαΊ‘p
- Sα»© mα»nh: DΓ’n chα»§ hΓ³a giΓ‘o dα»₯c trα»±c tuyαΊΏn bαΊ±ng cΓ‘ch cung cαΊ₯p cΓ΄ng cα»₯ mαΊ‘nh mαΊ½, dα» sα» dα»₯ng vΓ chi phΓ thαΊ₯p
- π No Backend Required - ChαΊ‘y hoΓ n toΓ n trΓͺn trΓ¬nh duyα»t vα»i dα»― liα»u JSON
- π― 100% Frontend - KhΓ΄ng cαΊ§n server, database hay hosting phα»©c tαΊ‘p
- π Dark/Light Theme - Hα» trợ chuyα»n Δα»i theme linh hoαΊ‘t
- π Δa ngΓ΄n ngα»― - TiαΊΏng Anh vΓ TiαΊΏng Viα»t (cΓ³ thα» mα» rα»ng)
- π± Responsive Design - HoαΊ‘t Δα»ng mượt mΓ trΓͺn mα»i thiαΊΏt bα»
- βΏ Accessibility First - TuΓ’n thα»§ WCAG 2.1 AA
- π Analytics Dashboard - BΓ‘o cΓ‘o chi tiαΊΏt vΓ trα»±c quan
- π BαΊ£o mαΊt - XΓ‘c thα»±c vΓ phΓ’n quyα»n Δa cαΊ₯p Δα»
- β‘ Hiα»u suαΊ₯t cao - Tα»i Ζ°u hΓ³a tαΊ£i trang vΓ trαΊ£i nghiα»m ngΖ°α»i dΓΉng
- π§ Dα» tΓΉy biαΊΏn - KiαΊΏn trΓΊc modular, dα» mα» rα»ng
- TiαΊΏt kiα»m chi phΓ: KhΓ΄ng cαΊ§n ΔαΊ§u tΖ° server, database
- Triα»n khai nhanh: Chα» cαΊ§n upload lΓͺn web hosting tΔ©nh
- BαΊ£o trΓ¬ ΔΖ‘n giαΊ£n: KhΓ΄ng cΓ³ backend phα»©c tαΊ‘p
- TΓΉy biαΊΏn linh hoαΊ‘t: MΓ£ nguα»n mα», dα» chα»nh sα»a
- Hiα»u suαΊ₯t tα»i Ζ°u: Load nhanh, khΓ΄ng phα»₯ thuα»c server
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User Interface Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Landing β β Login β β Main App β β
β β Page β β Pages β β (iframe) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Component System Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Base β β Complex β β Custom β β
β β Components β β Components β β Components β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Application Logic Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Auth β β Navigation β β Business β β
β β Manager β β Manager β β Logic β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Data Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Mock API β β Local Storageβ β JSON β β
β β Layer β β Manager β β Files β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Landing Page: Trang giα»i thiα»u vα»i role selection
- Login Pages: XΓ‘c thα»±c theo tα»«ng vai trΓ²
- Main Application: SPA vα»i iframe-based navigation
- Base Components: Button, Input, Table, Modal, etc.
- Complex Components: Tree View, Datepicker, File Upload
- Custom Components: Course Card, Quiz Builder, Certificate
- Auth Manager: Xα» lΓ½ ΔΔng nhαΊp, phΓ’n quyα»n, session
- Navigation Manager: QuαΊ£n lΓ½ menu, routing, breadcrumbs
- Business Logic: Course, Quiz, User management logic
- Mock API: Simulate backend responses vα»i delay
- Local Storage: LΖ°u theme, language, session
- JSON Files: Mock data cho users, courses, quizzes
- Module Pattern
const LMS = (function() {
// Private variables and functions
let config = {};
// Public API
return {
init: function() {},
API: {},
Auth: {},
UI: {}
};
})();- Observer Pattern
// Event-driven architecture
document.addEventListener('themeChanged', updateTheme);
document.addEventListener('languageChanged', updateLanguage);- Singleton Pattern
// Global configuration and state management
const Config = {
getInstance: function() {
if (!this.instance) {
this.instance = new ConfigManager();
}
return this.instance;
}
};- Factory Pattern
// Component creation
const ComponentFactory = {
create: function(type, props) {
switch(type) {
case 'button': return new Button(props);
case 'modal': return new Modal(props);
}
}
};- Multi-role Support: Student, Teacher, Administrator
- Profile Management: Customizable profiles with avatar support
- Permission System: Granular role-based access control
- Activity Logging: Complete audit trail for admin users
- Class Management: Organize students into classes
- Attendance Tracking: Monitor student attendance
-
Course Management
- Create and organize courses with categories
- Course preview system
- Prerequisites and dependencies
- Course analytics and insights
-
Lesson Builder
- Multiple content types: Video (YouTube), PDF, Markdown
- Interactive lesson viewer with navigation
- Lesson analytics and effectiveness tracking
- Bookmarks and notes functionality
-
Progress Tracking
- Detailed progress dashboard
- Learning path recommendations
- Achievement badges and streaks
- Social sharing capabilities
-
Certificate System
- Automatic certificate generation
- Custom templates and themes
- Verification system with QR codes
- LinkedIn integration
-
Quiz Builder
- Multiple question types (MCQ, True/False, Text, Matching)
- Question bank with categorization
- Import/Export (Excel, JSON, QTI)
- Question randomization
-
Quiz Analytics
- Performance metrics dashboard
- Difficulty analysis
- Question effectiveness tracking
- Automated scheduling
-
Security Features
- Anti-cheating measures
- Real-time monitoring
- Browser lockdown mode
- Time limits and restrictions
-
Messaging Platform
- Individual and group messaging
- Message templates
- Scheduled messages
- Read receipts and tracking
-
Announcements
- Course-wide announcements
- Priority flagging
- Email integration
<!-- Sα» dα»₯ng cΓ‘c tΓnh nΔng HTML5 tiΓͺn tiαΊΏn -->
- Semantic Elements: <header>, <nav>, <main>, <article>, <section>
- Web Storage API: localStorage, sessionStorage
- Data Attributes: data-translate, data-role, data-id
- Form Validation: required, pattern, type="email"
- Media Elements: <video>, <audio> controls
- Accessibility: ARIA labels, roles, descriptions/* CΓ΄ng nghα» CSS3 Δược sα» dα»₯ng */
- CSS Custom Properties (Variables): --color-primary, --spacing-*
- CSS Grid & Flexbox: Responsive layouts
- CSS Animations & Transitions: Smooth interactions
- CSS Transforms: 3D effects, rotations
- Media Queries: Responsive breakpoints
- CSS Modules: BEM methodology
- Dark Mode: CSS variables + data-theme// Features ES6+ Δược sα» dα»₯ng
- Arrow Functions: const func = () => {}
- Template Literals: `Hello ${name}`
- Destructuring: const {id, name} = user
- Spread/Rest: {...obj}, [...arr]
- Async/Await: Modern asynchronous code
- Modules: import/export (simulated)
- Classes: class Component {}
- Optional Chaining: obj?.property
- Nullish Coalescing: value ?? defaultValue| Library | Version | Purpose | Size |
|---|---|---|---|
| Font Awesome | 6.5.1 | Icons & UI elements | 1.2MB |
| Chart.js | 3.9.1 | Data visualization | 284KB |
| PDF.js | 2.16.105 | PDF rendering | 2.1MB |
| SheetJS | 0.19.3 | Excel import/export | 447KB |
| QRCode.js | 1.5.3 | QR code generation | 12KB |
| Marked.js | 4.3.0 | Markdown parsing | 39KB |
- ESLint: JavaScript linting
- Prettier: Code formatting
- Stylelint: CSS linting
- HTMLHint: HTML validation
- Git: Version control
- GitHub Actions: CI/CD pipeline
- Webpack: Bundle optimization (optional)
- PostCSS: CSS processing (optional)
// Modern Browser APIs
- Fetch API: Network requests
- LocalStorage API: Persistent storage
- SessionStorage API: Session data
- History API: Navigation management
- Intersection Observer: Lazy loading
- ResizeObserver: Responsive components
- MutationObserver: DOM changes
- Clipboard API: Copy functionality
- File API: File uploads
- Drag & Drop API: Interactive UI-
Code Splitting
- Lazy loading modules
- Dynamic imports
- Route-based splitting
-
Asset Optimization
- Image lazy loading
- SVG optimization
- Font subsetting
- CSS minification
-
Caching Strategy
- Browser caching
- Service Worker (PWA ready)
- LocalStorage caching
- CDN utilization
// Security implementations
- Input Sanitization: XSS prevention
- CSRF Protection: Token validation
- Content Security Policy: CSP headers
- Secure Storage: Encrypted localStorage
- Session Management: Timeout & validation
- Role-Based Access: Permission matrixβββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Registration ββββββΆβ Authentication ββββββΆβ Role-based β
β β β β β Dashboard β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β User Profile β β Course Catalog β
β Management β β & Enrollment β
βββββββββββββββββββ βββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β Learning Processβ
β - Lessons β
β - Quizzes β
β - Assignments β
βββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
βProgress Trackingβ
β & Analytics β
βββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β Certification β
β & Completion β
βββββββββββββββββββ
User {
- id: string
- username: string
- role: 'student' | 'teacher' | 'admin'
- profile: UserProfile
- permissions: Permission[]
- enrollments: Enrollment[]
- activities: Activity[]
}Course {
- id: string
- title: string
- category: Category
- teacher: User
- lessons: Lesson[]
- enrollments: Enrollment[]
- prerequisites: Course[]
- analytics: CourseAnalytics
}Quiz {
- id: string
- title: string
- questions: Question[]
- settings: QuizSettings
- attempts: QuizAttempt[]
- analytics: QuizAnalytics
}Lesson {
- id: string
- title: string
- content: Content
- duration: number
- progress: Progress[]
- analytics: LessonAnalytics
}- Prerequisites Check: Student must complete prerequisites
- Capacity Limit: Classes have maximum enrollment
- Time Constraints: Enrollment periods are defined
- Payment Status: For paid courses (future feature)
- Attempt Limits: Configurable per quiz
- Time Limits: Enforced during quiz
- Passing Score: Minimum score required
- Retake Policy: Cooldown period between attempts
- Completion Criteria: All lessons + passing quiz scores
- Validity Period: Certificates can expire
- Verification: QR code + unique ID
- Revocation: Admin can revoke certificates
1. Discovery β 2. Registration β 3. Profile Setup β 4. Browse Courses
β β β β
5. Enroll β 6. Learn β 7. Practice β 8. Assessment β 9. Certification
β β β β β
10. Share β 11. Continue Learning β 12. Career Advancement
1. Onboarding β 2. Course Creation β 3. Content Development
β β β
4. Student Management β 5. Teaching β 6. Assessment Creation
β β β
7. Progress Monitoring β 8. Feedback β 9. Analytics Review
1. System Setup β 2. User Management β 3. Permission Control
β β β
4. Content Moderation β 5. System Monitoring β 6. Analytics
β β β
7. Report Generation β 8. System Optimization β 9. Support
-
Future Backend Integration
- RESTful API ready structure
- GraphQL compatible data model
- WebSocket for real-time features
-
Third-party Services
- OAuth providers (Google, Facebook)
- Payment gateways (Stripe, PayPal)
- Email services (SendGrid, AWS SES)
- Cloud storage (S3, CloudFlare)
-
Analytics Platforms
- Google Analytics
- Mixpanel
- Custom analytics dashboard
-
Data Architecture
- Pagination for large datasets
- Lazy loading for performance
- Indexed search capabilities
- Caching strategies
-
Performance Metrics
- Page load time < 2s
- Time to interactive < 3s
- 60 FPS animations
- < 100ms response time
-
Growth Projections
- 10K+ users
- 1K+ courses
- 100K+ quiz attempts
- 1M+ page views/month
- Modern web browser (Chrome 90+, Firefox 88+, Safari 14+, Edge 90+)
- Local web server for development
- Git for version control
- Clone the Repository
git clone https://github.com/yourusername/LMS-2.git
cd LMS-2- Start Local Server
Option A - VS Code Live Server (Recommended)
- Install "Live Server" extension
- Right-click on
index.html - Select "Open with Live Server"
Option B - Python
# Python 3
python -m http.server 8000
# Python 2
python -m SimpleHTTPServer 8000Option C - Node.js
# Install http-server globally
npm install -g http-server
# Run server
http-server -p 8000- Access the Application
http://localhost:8000
Username: john_doe Password: password123
Username: jane_smith Password: password123
Username: bob_johnson Password: password123
Username: prof_wilson Password: password123
Username: dr_brown Password: password123
Username: mrs_davis Password: password123
Username: admin Password: admin123
Username: admin2 Password: admin123
| Feature | Student | Teacher | Admin |
|---|---|---|---|
| View Courses | β | β | β |
| Enroll in Courses | β | β | β |
| Create Courses | β | β | β |
| Take Quizzes | β | β | β |
| Create Quizzes | β | β | β |
| View Analytics | Limited | Course-specific | Full |
| Manage Users | β | β | β |
| System Settings | β | β | β |
LMS-2/
βββ π index.html # Landing page with role selection
βββ π main.html # Main application shell (iframe-based)
βββ π config.js # Application configuration
β
βββ π assets/ # Static assets
β βββ π css/ # Stylesheets
β β βββ global.css # Global styles and CSS variables
β β βββ themes.css # Theme definitions (dark/light)
β β βββ layout.css # Layout structures
β β βββ components.css # Component styles (BEM)
β β βββ utilities.css # Utility classes
β β
β βββ π js/ # JavaScript modules
β β βββ global.js # Global utilities
β β βββ auth.js # Authentication system
β β βββ api.js # Mock API layer
β β βββ navigation.js # Navigation management
β β
β βββ π images/ # Image assets
β βββ flags/ # Language flags
β
βββ π components/ # Reusable UI components
β βββ π base/ # Base components
β β βββ button.html # Button component
β β βββ input.html # Input fields
β β βββ table.html # Data tables
β β βββ modal.html # Modal dialogs
β β βββ card.html # Card layouts
β β βββ dropdown.html # Dropdown menus
β β βββ datepicker.html # Date picker
β β βββ tag.html # Tags/badges
β β βββ radio.html # Radio groups
β β βββ checkbox.html # Checkboxes
β β βββ upload.html # File upload
β β
β βββ showcase.html # Component showcase
β βββ tree-view.html # Tree view component
β
βββ π data/ # Data and configurations
β βββ π translations/ # i18n files
β β βββ en.json # English translations
β β βββ vi.json # Vietnamese translations
β β
β βββ mock-users.json # User data
β βββ mock-courses.json # Course data
β βββ mock-lessons.json # Lesson data
β βββ mock-classes.json # Class data
β βββ mock-enrollments.json # Enrollment data
β βββ mock-categories.json # Category data
β βββ permissions.json # Permission matrix
β
βββ π pages/ # Application pages
β βββ dashboard-*.html # Role-specific dashboards
β βββ login-*.html # Role-specific login pages
β βββ profile-*.html # Profile management
β βββ courses.html # Course listing
β βββ course-detail.html # Course details
β βββ lesson*.html # Lesson pages
β βββ quiz*.html # Quiz pages
β βββ users.html # User management
β βββ permissions.html # Permission management
β βββ classes.html # Class management
β βββ enrollments.html # Enrollment management
β βββ certificates.html # Certificate viewer
β βββ messaging.html # Messaging system
β βββ logs.html # Activity logs
β
βββ π docs/ # Documentation
βββ Style Guide.md # Coding standards
βββ Master Plan.md # Project roadmap
βββ Phase *.md # Phase documentation
βββ todo-list-*.md # Development tracking
- Course Creation: Rich editor with multimedia support
- Category System: Hierarchical organization with tree view
- Prerequisites: Define course dependencies
- Analytics: Enrollment trends, completion rates
- Preview System: Allow preview before enrollment
- Content Types:
- Video lessons (YouTube integration)
- PDF documents (with viewer)
- Markdown content (WYSIWYG editor)
- Interactive Features:
- Progress tracking
- Bookmarks and notes
- Discussion forums
- Speed controls for videos
-
Student Analytics:
- Progress tracking
- Time spent analysis
- Performance trends
- Learning recommendations
-
Teacher Analytics:
- Class performance
- Question effectiveness
- Student engagement
- Course insights
-
Admin Analytics:
- System-wide metrics
- User activity patterns
- Resource utilization
- Performance monitoring
-
Question Types:
- Multiple Choice (single answer)
- Multiple Select (multiple answers)
- True/False
- Text Input
- Matching pairs
-
Advanced Features:
- Question banks
- Randomization
- Time limits
- Auto-grading
- Detailed feedback
- Features:
- Auto-generation on completion
- Custom templates
- QR code verification
- PDF download
- Social sharing
/* Primary Colors */
--color-primary: #2C6EAA; /* Main brand color */
--color-primary-light: #4A8BC2;
--color-primary-dark: #1E4F78;
/* Status Colors */
--color-success: #10B981; /* Green */
--color-warning: #F59E0B; /* Amber */
--color-danger: #EF4444; /* Red */
--color-info: #3B82F6; /* Blue *//* Font Stack */
font-family: 'Inter', 'Roboto', system-ui, sans-serif;
/* Font Sizes */
--font-size-xs: 12px;
--font-size-sm: 14px;
--font-size-base: 16px;
--font-size-lg: 18px;
--font-size-xl: 20px;
--font-size-2xl: 24px;
--font-size-3xl: 30px;/* 8px base unit */
--spacing-1: 4px;
--spacing-2: 8px;
--spacing-3: 12px;
--spacing-4: 16px;
--spacing-5: 20px;
--spacing-6: 24px;
--spacing-8: 32px;
--spacing-10: 40px;/* Mobile First */
--breakpoint-sm: 640px; /* Small devices */
--breakpoint-md: 768px; /* Tablets */
--breakpoint-lg: 1024px; /* Desktops */
--breakpoint-xl: 1280px; /* Large screens */<!-- Use semantic HTML5 elements -->
<article class="course-card">
<header class="course-card__header">
<h2 class="course-card__title" data-translate="course.title">
Course Title
</h2>
</header>
<div class="course-card__body">
<!-- Content -->
</div>
</article>/* Block */
.course-card { }
/* Element */
.course-card__header { }
.course-card__title { }
/* Modifier */
.course-card--featured { }
.course-card--disabled { }// Use ES6+ features
const loadCourses = async () => {
try {
const data = await LMS.API.loadJSON('mock-courses.json');
return data.courses;
} catch (error) {
console.error('Failed to load courses:', error);
LMS.showToast('Error loading courses', 'error');
}
};
// Event delegation
document.addEventListener('click', (e) => {
if (e.target.matches('.course-card')) {
handleCourseClick(e.target);
}
});- Theme Support: All components MUST work in both themes
- Translation Ready: No hardcoded text, use
data-translate - Responsive: Test on all breakpoints
- Accessible: ARIA labels, keyboard navigation
- Reusable: No page-specific logic in components
# Feature branch
git checkout -b feature/quiz-analytics
# Commit with conventional commits
git add .
git commit -m "feat(quiz): add analytics dashboard"
git commit -m "fix(auth): resolve login redirect issue"
git commit -m "docs: update README with new features"
# Push and create PR
git push origin feature/quiz-analytics- Works in light theme
- Works in dark theme
- All text translatable
- Responsive on mobile
- Keyboard accessible
- Screen reader compatible
- Authentication required
- Role permissions correct
- Data loads properly
- Error states handled
- Loading states shown
- Empty states designed
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
- Mobile Safari
- Chrome Android
- Page Load: < 2 seconds
- Time to Interactive: < 3 seconds
- Lighthouse Score: > 90
- No console errors
- Smooth animations (60 FPS)
- No build step required (vanilla JS)
- Minify CSS/JS for production
- Optimize images
- Enable gzip compression
- GitHub Pages
# Deploy to GitHub Pages
git checkout -b gh-pages
git push origin gh-pages- Netlify
# Deploy with Netlify CLI
npm install -g netlify-cli
netlify deploy --prod- Vercel
# Deploy with Vercel CLI
npm install -g vercel
vercel --prod- Upload all files to web root
- Ensure .htaccess for clean URLs
- Configure CORS if needed
// config.js
const CONFIG = {
APP_NAME: 'LMS System',
APP_VERSION: '1.0.0',
API_DELAY: 300, // Mock API delay
SESSION_TIMEOUT: 30 * 60 * 1000, // 30 minutes
LANGUAGES: ['en', 'vi'],
DEFAULT_LANGUAGE: 'en',
DEFAULT_THEME: 'light'
};We welcome contributions! Please follow these guidelines:
- Fork the Repository
- Create Feature Branch
git checkout -b feature/AmazingFeature
- Commit Changes
git commit -m 'feat: add amazing feature' - Push to Branch
git push origin feature/AmazingFeature
- Open Pull Request
- Follow the Style Guide
- Add unit tests for new features
- Update documentation
- Ensure all tests pass
- Add translation keys
- Test in both themes
- Check responsive design
- Verify accessibility
- Automated checks (linting, tests)
- Peer review by maintainers
- Feedback and iterations
- Merge when approved
Copyright Β© 2025 LMS Development Team. All rights reserved.
This project is licensed under the MIT License - see the LICENSE file for details.
- Libraries: Font Awesome, Chart.js, PDF.js, SheetJS
- Design Inspiration: Modern EdTech platforms
- Contributors: All developers and testers
- Community: Open source community for feedback
- π Check the documentation
- π Report bugs via GitHub Issues
- π¬ Join our Discord community
- π§ Email: support@lms-system.com
Made with β€οΈ by the LMS Development Team