
A modern, scalable Learning Management System built with cutting-edge technologies.
Features • Getting Started • Development • Contributing
Before you begin, make sure you have:
.tool-versions)Run the automated setup script:
On macOS/Linux:
pnpm setup:unix
On Windows:
pnpm setup:win
The setup script will automatically:
[!NOTE] On Linux, Caddy needs permission to bind to port 443. The script will automatically handle this, but you may be prompted for your sudo password.
After setup completes, the following default accounts are available:
| Role | Password | |
|---|---|---|
| Admin | admin@example.com | password |
| Student | user@example.com | password |
| Content Creator | contentcreator@example.com | password |
[!NOTE] The setup script creates a minimal production-like environment with only these three essential accounts.
[!TIP] If you need a populated environment with sample courses, lessons, and additional test users for development, you can run the development seed instead:
bash pnpm db:seedThis will create accounts:
Role Password Student student@example.com password Student student2@example.com password Content Creator contentcreator@example.com password Content Creator contentcreator2@example.com password Admin admin@example.com password [!NOTE] All accounts are intended for development and testing purposes only.
To start all applications in development mode:
pnpm dev
After starting the development environment, you can access:
| Service | URL | Description |
|---|---|---|
| Web App | https://app.lms.localhost | Frontend application |
| API | https://app.lms.localhost/api | Backend API url |
| Swagger | https://api.lms.localhost/api | API documentation |
| Mailhog | https://mailbox.lms.localhost | Email testing interface |
bash
pnpm formatbash
pnpm format:checkbash
pnpm lint-tsc-webbash
pnpm lint-tsc-apibash
pnpm lint-tsc-web --fixbash
pnpm lint-tsc-api --fixbash
pnpm db:generate[!IMPORTANT] After generating a migration:
- Change its name to something descriptive that explains what it does
- Make sure to update the migration name in
apps/api/src/storage/migrations/meta/_journal.jsonunder thetagkey
bash
pnpm db:migratebash
pnpm generate:clientbash
cd packages/email-templates
pnpm buildEmail templates are automatically built when starting the development server. To test emails, check the Mailhog interface at mailbox.lms.localhost.
Frontend tests:
Unit
bash
pnpm test:web
E2E
bash
bash test-e2e.sh
or
bash
chmod +x test-e2e.sh
./test-e2e.sh
Backend tests:
bash
pnpm test:api # Unit tests
pnpm test:api:e2e # E2E tests
lms-core
├── apps
│ ├── api
│ │ ├── src
│ │ └── test
│ ├── reverse-proxy
│ └── web
│ ├── app
│ │ ├── api
│ │ ├── assets
│ │ ├── components
│ │ └── modules
│ └── e2e
└── packages
├── email-templates
├── eslint-config
├── shared
└── typescript-config
We welcome contributions to Mentingo! Please check our Contributing Guide for guidelines about how to proceed.
See Deployment Guide for more details.
This project was generated using Selleo LMS which is licensed under the MIT license.

Ready to scale your eLearning platform? Selleo will help with product-minded dev teams who are here to make it happen.
$ claude mcp add mentingo \
-- python -m otcore.mcp_server <graph>