# urbish-mulmi/training-management-system architecture

> Architecture diagram of the GitHub repository urbish-mulmi/training-management-system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/urbish-mulmi/training-management-system
- Repository: https://github.com/urbish-mulmi/training-management-system

## Overview

This is a training-management platform: learners discover courses, enroll and pay, then administrators approve enrollment and assign a batch; instructors manage teaching and assignments, while students access batch classrooms. The frontend also exposes course, blog, job-placement, testimonial and contact experiences, with administrative management areas. The backend is an Express API backed by MongoDB, with separate route/controller/model areas and invitation and email services. Enrollment, batch, invitation, and application wiring is supported by sampled source; other domain links are limited to the repository structure and explicit route mounting.

Main entry points: [`frontend/vite-project/src/App.jsx`](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/App.jsx) (React app routes), [`backend/src/controllers/enrollment.controller.js`](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/controllers/enrollment.controller.js) (Enrollment workflow), [`backend/src/services/invitation.service.js`](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/services/invitation.service.js) (Invitation service), [`backend/app.js`](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/app.js) (Express application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_webapp["React app routes<br/>[App.jsx]"]
  node_enrollpage["Enrollment pages<br/>[Enrollment.jsx]"]
  node_studentpages["Student classroom<br/>[Classroom.jsx]"]
  node_adminpages["Admin management"]
  node_instructorpages["Instructor tools"]
  node_contentpages["Public content pages<br/>[Home.jsx]"]
  node_enrollapi["Enrollment API client"]
  node_apiinstance["HTTP client<br/>[apiInstance.js]"]
end

subgraph group_api["API entry"]
  node_server["Express application<br/>[app.js]"]
  node_enrollroutes["Enrollment routes"]
  node_batchroutes["Batch routes<br/>[batch.routes.js]"]
  node_domainroutes["Other domain routes<br/>[course.routes.js]"]
end

subgraph group_learning["Learning operations"]
  node_enrollctl["Enrollment workflow"]
  node_batchctl["Batch operations"]
  node_enrollmentmodel[("Enrollment records")]
  node_batchmodel[("Batch records<br/>[batch.model.js]")]
  node_coursemodel[("Course records<br/>[course.model.js]")]
  node_assignmentmodel[("Assignments")]
  node_resources[("Learning resources<br/>[resource.model.js]")]
end

subgraph group_content["Public content"]
  node_contentroutes["Content endpoints<br/>[blog.routes.js]"]
end

subgraph group_identity["Identity services"]
  node_invitation["Invitation service"]
  node_invmodel[("Invitation records")]
  node_usermodel[("User records<br/>[user.models.js]")]
  node_mailer["Invitation mailer<br/>[mailer.js]"]
end

node_visitor(("Learner or staff"))
node_esewa(("eSewa payment"))
node_mailservice(("Email provider"))

node_visitor -->|"opens"| node_webapp
node_webapp -->|"routes to"| node_enrollpage
node_webapp -->|"routes to"| node_studentpages
node_webapp -->|"routes to"| node_adminpages
node_webapp -->|"routes to"| node_instructorpages
node_webapp -->|"routes to"| node_contentpages
node_enrollapi -->|"sends requests"| node_apiinstance
node_enrollapi -->|"calls endpoints"| node_enrollroutes
node_server -->|"mounts"| node_enrollroutes
node_server -->|"mounts"| node_batchroutes
node_server -->|"mounts"| node_domainroutes
node_server -->|"mounts"| node_contentroutes
node_enrollroutes -->|"dispatches"| node_enrollctl
node_batchroutes -->|"dispatches"| node_batchctl
node_enrollctl -->|"reads and writes"| node_enrollmentmodel
node_enrollctl -->|"reads"| node_coursemodel
node_enrollctl -->|"reads"| node_batchmodel
node_enrollctl -->|"creates invite"| node_invitation
node_enrollctl -->|"initiates and verifies"| node_esewa
node_batchctl -->|"reads and writes"| node_batchmodel
node_batchctl -->|"reads and writes"| node_assignmentmodel
node_batchctl -->|"reads"| node_resources
node_invitation -->|"creates and updates"| node_invmodel
node_invitation -->|"updates role"| node_usermodel
node_invitation -->|"adds student"| node_batchmodel
node_invitation -->|"checks approval"| node_enrollmentmodel
node_invitation -->|"sends invitation"| node_mailer
node_mailer -->|"delivers email"| node_mailservice

click node_webapp "https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/App.jsx"
click node_enrollpage "https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/public/Enrollment.jsx"
click node_studentpages "https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/student/Classroom.jsx"
click node_adminpages "https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/admin/AdminBatchManagement.jsx"
click node_instructorpages "https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/instructor/AssignmentManagement.jsx"
click node_contentpages "https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/public/Home.jsx"
click node_enrollapi "https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/api/enrollment.service.js"
click node_apiinstance "https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/api/apiInstance.js"
click node_server "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/app.js"
click node_enrollroutes "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/routes/enrollment.routes.js"
click node_batchroutes "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/routes/batch.routes.js"
click node_domainroutes "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/routes/course.routes.js"
click node_enrollctl "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/controllers/enrollment.controller.js"
click node_batchctl "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/controllers/batch.controller.js"
click node_enrollmentmodel "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/enrollment.model.js"
click node_batchmodel "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/batch.model.js"
click node_coursemodel "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/course.model.js"
click node_assignmentmodel "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/assignment.model.js"
click node_resources "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/resource.model.js"
click node_contentroutes "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/routes/blog.routes.js"
click node_invitation "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/services/invitation.service.js"
click node_invmodel "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/invitation.model.js"
click node_usermodel "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/user.models.js"
click node_mailer "https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/utils/mailer.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_webapp,node_enrollpage,node_studentpages,node_adminpages,node_instructorpages,node_contentpages,node_enrollapi,node_apiinstance toneBlue
class node_server,node_enrollroutes,node_batchroutes,node_domainroutes toneAmber
class node_enrollctl,node_batchctl,node_enrollmentmodel,node_batchmodel,node_coursemodel,node_assignmentmodel,node_resources toneMint
class node_contentroutes toneRose
class node_invitation,node_invmodel,node_usermodel,node_mailer,node_visitor,node_esewa,node_mailservice toneIndigo
```

## Components

### Web experience

- [React app routes](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/App.jsx): `frontend/vite-project/src/App.jsx`
- [Enrollment pages](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/public/Enrollment.jsx): `frontend/vite-project/src/pages/public/Enrollment.jsx`
- [Student classroom](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/student/Classroom.jsx): `frontend/vite-project/src/pages/student/Classroom.jsx`
- [Admin management](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/admin/AdminBatchManagement.jsx): `frontend/vite-project/src/pages/admin/AdminBatchManagement.jsx`
- [Instructor tools](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/instructor/AssignmentManagement.jsx): `frontend/vite-project/src/pages/instructor/AssignmentManagement.jsx`
- [Public content pages](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/pages/public/Home.jsx): `frontend/vite-project/src/pages/public/Home.jsx`
- [Enrollment API client](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/api/enrollment.service.js): `frontend/vite-project/src/api/enrollment.service.js`
- [HTTP client](https://github.com/urbish-mulmi/training-management-system/blob/main/frontend/vite-project/src/api/apiInstance.js): `frontend/vite-project/src/api/apiInstance.js`

### API entry

- [Express application](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/app.js): `backend/app.js`
- [Enrollment routes](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/routes/enrollment.routes.js): `backend/src/routes/enrollment.routes.js`
- [Batch routes](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/routes/batch.routes.js): `backend/src/routes/batch.routes.js`
- [Other domain routes](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/routes/course.routes.js): `backend/src/routes/course.routes.js`

### Learning operations

- [Enrollment workflow](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/controllers/enrollment.controller.js): `backend/src/controllers/enrollment.controller.js`
- [Batch operations](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/controllers/batch.controller.js): `backend/src/controllers/batch.controller.js`
- [Enrollment records](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/enrollment.model.js): `backend/src/models/enrollment.model.js`
- [Batch records](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/batch.model.js): `backend/src/models/batch.model.js`
- [Course records](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/course.model.js): `backend/src/models/course.model.js`
- [Assignments](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/assignment.model.js): `backend/src/models/assignment.model.js`
- [Learning resources](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/resource.model.js): `backend/src/models/resource.model.js`

### Public content

- [Content endpoints](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/routes/blog.routes.js): `backend/src/routes/blog.routes.js`

### Identity services

- [Invitation service](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/services/invitation.service.js): `backend/src/services/invitation.service.js`
- [Invitation records](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/invitation.model.js): `backend/src/models/invitation.model.js`
- [User records](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/models/user.models.js): `backend/src/models/user.models.js`
- [Invitation mailer](https://github.com/urbish-mulmi/training-management-system/blob/main/backend/src/utils/mailer.js): `backend/src/utils/mailer.js`

### Other components

- **Learner or staff**
- **eSewa payment**
- **Email provider**

## Connections

- Learner or staff → React app routes: opens
- React app routes → Enrollment pages: routes to
- React app routes → Student classroom: routes to
- React app routes → Admin management: routes to
- React app routes → Instructor tools: routes to
- React app routes → Public content pages: routes to
- Enrollment API client → HTTP client: sends requests
- Enrollment API client → Enrollment routes: calls endpoints
- Express application → Enrollment routes: mounts
- Express application → Batch routes: mounts
- Express application → Other domain routes: mounts
- Express application → Content endpoints: mounts
- Enrollment routes → Enrollment workflow: dispatches
- Batch routes → Batch operations: dispatches
- Enrollment workflow → Enrollment records: reads and writes
- Enrollment workflow → Course records: reads
- Enrollment workflow → Batch records: reads
- Enrollment workflow → Invitation service: creates invite
- Enrollment workflow → eSewa payment: initiates and verifies
- Batch operations → Batch records: reads and writes
- Batch operations → Assignments: reads and writes
- Batch operations → Learning resources: reads
- Invitation service → Invitation records: creates and updates
- Invitation service → User records: updates role
- Invitation service → Batch records: adds student
- Invitation service → Enrollment records: checks approval
- Invitation service → Invitation mailer: sends invitation
- Invitation mailer → Email provider: delivers email
