# kkazami/lms-cdm architecture

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

- Interactive diagram: https://gitdiagram.com/kkazami/lms-cdm
- Repository: https://github.com/kkazami/lms-cdm

## Overview

CdM LMS is a multi-institute learning management system with web, mobile, and desktop clients. Its main user journey is signing in, accessing courses and classwork, submitting work, and viewing grades; instructors manage enrollments, course activity, and grading. The repository also includes flashcards, interactive coding activities, gamification, and a knowledge-exchange area. The README confirms the platform stack and institutes, while the tree identifies the major product areas. Several client-to-web relationships are therefore shown as unverified; unsampled implementations are not assumed to have been inspected.

Main entry points: [`packages/api-client/src/index.ts`](https://github.com/kkazami/lms-cdm/blob/main/packages/api-client/src/index.ts) (API client), [`apps/web/src/app/(dashboard)/[institute]/courses/[courseId]/page.tsx`](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/(dashboard)/%5Binstitute%5D/courses/%5BcourseId%5D/page.tsx) (Student app), [`apps/web/src/features/interactive-activities/gamification/engine.ts`](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/engine.ts) (Gamification engine), [`apps/mobile/app/(student)/student/(tabs)/courses.tsx`](https://github.com/kkazami/lms-cdm/blob/main/apps/mobile/app/(student)/student/(tabs)/courses.tsx) (Mobile app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User clients"]
  node_student["Student app<br/>[page.tsx]"]
  node_teacher["Teacher app<br/>[page.tsx]"]
  node_mobile["Mobile app<br/>[courses.tsx]"]
  node_desktop["Desktop console<br/>[main.ts]"]
end

subgraph group_learning["Learning workflow"]
  node_api["API client<br/>[index.ts]"]
  node_auth["Authentication<br/>[route.ts]"]
  node_courses["Course access<br/>[route.ts]"]
  node_classwork["Classwork submissions<br/>[route.ts]"]
  node_grading["Grades and gradebook<br/>[route.ts]"]
  node_flashcards["Flashcard study<br/>[route.ts]"]
  node_codelab["CodeLab activities<br/>[route.ts]"]
  node_exchange["Knowledge exchange<br/>[route.ts]"]
end

subgraph group_engagement["Engagement features"]
  node_gamification["Gamification engine<br/>[engine.ts]"]
  node_streak["Streak rules<br/>[streak.ts]"]
  node_badges["Badge rules<br/>[badges.ts]"]
  node_leaderboard["Leaderboard cache"]
end

subgraph group_operations["Institute operations"]
  node_institute["Institute administration<br/>[page.tsx]"]
  node_enrollment["Enrollment management"]
  node_skills["Skills execution<br/>[index.ts]"]
  node_desktopipc["Desktop IPC<br/>[handlers.ts]"]
end

node_learner(("Learner"))
node_instructor(("Instructor"))
node_database[("Application database")]

node_learner -.->|"uses"| node_student
node_instructor -.->|"uses"| node_teacher
node_learner -.->|"uses"| node_mobile
node_student -.->|"signs in"| node_auth
node_teacher -.->|"signs in"| node_auth
node_mobile -->|"calls"| node_api
node_student -.->|"requests data"| node_api
node_teacher -.->|"requests data"| node_api
node_api -->|"requests courses"| node_courses
node_api -->|"submits work"| node_classwork
node_api -->|"requests grades"| node_grading
node_mobile -.->|"studies"| node_flashcards
node_student -.->|"runs activities"| node_codelab
node_student -.->|"shares knowledge"| node_exchange
node_classwork -.->|"records activity"| node_gamification
node_gamification -->|"calculates"| node_streak
node_gamification -->|"evaluates"| node_badges
node_gamification -->|"refreshes"| node_leaderboard
node_teacher -.->|"manages enrollment"| node_enrollment
node_enrollment -->|"executes through"| node_skills
node_enrollment -->|"reads and writes"| node_database
node_gamification -->|"reads and writes"| node_database
node_desktop -->|"registers handlers"| node_desktopipc
node_desktop -->|"loads console"| node_institute

click node_student "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/(dashboard)/%5Binstitute%5D/courses/%5BcourseId%5D/page.tsx"
click node_teacher "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/(dashboard)/%5Binstitute%5D/courses/%5BcourseId%5D/page.tsx"
click node_mobile "https://github.com/kkazami/lms-cdm/blob/main/apps/mobile/app/(student)/student/(tabs)/courses.tsx"
click node_desktop "https://github.com/kkazami/lms-cdm/blob/main/apps/desktop/electron/main.ts"
click node_api "https://github.com/kkazami/lms-cdm/blob/main/packages/api-client/src/index.ts"
click node_auth "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/auth/login/route.ts"
click node_courses "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/courses/route.ts"
click node_classwork "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/courses/%5BcourseId%5D/submissions/route.ts"
click node_grading "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/courses/%5BcourseId%5D/gradebook/route.ts"
click node_flashcards "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/flashcards/auto-generate/route.ts"
click node_codelab "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/codelab/run/route.ts"
click node_exchange "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/knowledge-exchange/posts/route.ts"
click node_gamification "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/engine.ts"
click node_streak "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/streak.ts"
click node_badges "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/badges.ts"
click node_leaderboard "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/leaderboard-cache.ts"
click node_institute "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/(dashboard)/%5Binstitute%5D/admin/page.tsx"
click node_enrollment "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/lib/skills/enrollment-manager.ts"
click node_skills "https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/lib/skills/index.ts"
click node_desktopipc "https://github.com/kkazami/lms-cdm/blob/main/apps/desktop/electron/ipc/handlers.ts"

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_student,node_teacher,node_mobile,node_desktop toneBlue
class node_api,node_auth,node_courses,node_classwork,node_grading,node_flashcards,node_codelab,node_exchange,node_database toneAmber
class node_gamification,node_streak,node_badges,node_leaderboard toneMint
class node_institute,node_enrollment,node_skills,node_desktopipc toneRose
class node_learner,node_instructor toneIndigo
```

## Components

### User clients

- [Student app](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/(dashboard)/%5Binstitute%5D/courses/%5BcourseId%5D/page.tsx): `apps/web/src/app/(dashboard)/[institute]/courses/[courseId]/page.tsx`
- [Teacher app](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/(dashboard)/%5Binstitute%5D/courses/%5BcourseId%5D/page.tsx): `apps/web/src/app/(dashboard)/[institute]/courses/[courseId]/page.tsx`
- [Mobile app](https://github.com/kkazami/lms-cdm/blob/main/apps/mobile/app/(student)/student/(tabs)/courses.tsx): `apps/mobile/app/(student)/student/(tabs)/courses.tsx`
- [Desktop console](https://github.com/kkazami/lms-cdm/blob/main/apps/desktop/electron/main.ts): `apps/desktop/electron/main.ts`

### Learning workflow

- [API client](https://github.com/kkazami/lms-cdm/blob/main/packages/api-client/src/index.ts): `packages/api-client/src/index.ts`
- [Authentication](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/auth/login/route.ts): `apps/web/src/app/api/auth/login/route.ts`
- [Course access](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/courses/route.ts): `apps/web/src/app/api/courses/route.ts`
- [Classwork submissions](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/courses/%5BcourseId%5D/submissions/route.ts): `apps/web/src/app/api/courses/[courseId]/submissions/route.ts`
- [Grades and gradebook](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/courses/%5BcourseId%5D/gradebook/route.ts): `apps/web/src/app/api/courses/[courseId]/gradebook/route.ts`
- [Flashcard study](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/flashcards/auto-generate/route.ts): `apps/web/src/app/api/flashcards/auto-generate/route.ts`
- [CodeLab activities](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/codelab/run/route.ts): `apps/web/src/app/api/codelab/run/route.ts`
- [Knowledge exchange](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/api/knowledge-exchange/posts/route.ts): `apps/web/src/app/api/knowledge-exchange/posts/route.ts`

### Engagement features

- [Gamification engine](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/engine.ts): `apps/web/src/features/interactive-activities/gamification/engine.ts`
- [Streak rules](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/streak.ts): `apps/web/src/features/interactive-activities/gamification/streak.ts`
- [Badge rules](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/badges.ts): `apps/web/src/features/interactive-activities/gamification/badges.ts`
- [Leaderboard cache](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/features/interactive-activities/gamification/leaderboard-cache.ts): `apps/web/src/features/interactive-activities/gamification/leaderboard-cache.ts`

### Institute operations

- [Institute administration](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/app/(dashboard)/%5Binstitute%5D/admin/page.tsx): `apps/web/src/app/(dashboard)/[institute]/admin/page.tsx`
- [Enrollment management](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/lib/skills/enrollment-manager.ts): `apps/web/src/lib/skills/enrollment-manager.ts`
- [Skills execution](https://github.com/kkazami/lms-cdm/blob/main/apps/web/src/lib/skills/index.ts): `apps/web/src/lib/skills/index.ts`
- [Desktop IPC](https://github.com/kkazami/lms-cdm/blob/main/apps/desktop/electron/ipc/handlers.ts): `apps/desktop/electron/ipc/handlers.ts`

### Other components

- **Learner**
- **Instructor**
- **Application database**

## Connections

- Learner → Student app: uses
- Instructor → Teacher app: uses
- Learner → Mobile app: uses
- Student app → Authentication: signs in
- Teacher app → Authentication: signs in
- Mobile app → API client: calls
- Student app → API client: requests data
- Teacher app → API client: requests data
- API client → Course access: requests courses (evidence: `packages/api-client/src/index.ts`)
- API client → Classwork submissions: submits work (evidence: `packages/api-client/src/index.ts`)
- API client → Grades and gradebook: requests grades (evidence: `packages/api-client/src/index.ts`)
- Mobile app → Flashcard study: studies
- Student app → CodeLab activities: runs activities
- Student app → Knowledge exchange: shares knowledge
- Classwork submissions → Gamification engine: records activity
- Gamification engine → Streak rules: calculates (evidence: `apps/web/src/features/interactive-activities/gamification/engine.ts`)
- Gamification engine → Badge rules: evaluates (evidence: `apps/web/src/features/interactive-activities/gamification/engine.ts`)
- Gamification engine → Leaderboard cache: refreshes (evidence: `apps/web/src/features/interactive-activities/gamification/engine.ts`)
- Teacher app → Enrollment management: manages enrollment
- Enrollment management → Skills execution: executes through (evidence: `apps/web/src/lib/skills/enrollment-manager.ts`)
- Enrollment management → Application database: reads and writes (evidence: `apps/web/src/lib/skills/enrollment-manager.ts`)
- Gamification engine → Application database: reads and writes (evidence: `apps/web/src/features/interactive-activities/gamification/engine.ts`)
- Desktop console → Desktop IPC: registers handlers (evidence: `apps/desktop/electron/main.ts`)
- Desktop console → Institute administration: loads console (evidence: `apps/desktop/electron/main.ts`)
