# erjoneox/elearningplatform architecture

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

- Interactive diagram: https://gitdiagram.com/erjoneox/elearningplatform
- Repository: https://github.com/erjoneox/elearningplatform

## Overview

EduFlow is a course-learning platform for students, instructors, and administrators. Users authenticate, browse courses, enroll, and access course lessons and materials; they can take quizzes and submit assignments, while instructors manage course content and grade work. The React client calls an Express API, whose controllers enforce domain rules and use SQL-backed models. The index documents additional user, category, progress, and dashboard capabilities. Some backend routes and controllers were not sampled, so those branches are shown only where the source index establishes their wiring.

Main entry points: [`backend/models`](https://github.com/erjoneox/elearningplatform/tree/main/backend/models) (SQL data models), [`frontend/src/api/axios.js`](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/api/axios.js) (HTTP client), [`frontend/src/App.jsx`](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/App.jsx) (Application routes), [`frontend/src/pages/CourseDetails.jsx`](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/pages/CourseDetails.jsx) (Course details)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_webapp["Application routes<br/>[App.jsx]"]
  node_authstate["Authentication state<br/>[AuthContext.jsx]"]
  node_http["HTTP client<br/>[axios.js]"]
  node_courseui["Course browsing<br/>[Courses.jsx]"]
  node_detailsui["Course details<br/>[CourseDetails.jsx]"]
  node_quizui["Quiz interface<br/>[CourseQuizzes.jsx]"]
  node_dashboardui["Dashboard<br/>[Dashboard.jsx]"]
end

subgraph group_api["API and access"]
  node_apiapp["Express API<br/>[app.js]"]
  node_authroutes["Authentication routes<br/>[authRoutes.js]"]
  node_authcontroller["Authentication<br/>[authController.js]"]
  node_guard["Token and role checks<br/>[authMiddleware.js]"]
  node_enrollroutes["Enrollment routes"]
  node_enrollcontroller["Enrollment management"]
end

subgraph group_learning["Course learning"]
  node_coursecontroller["Course management"]
  node_lessoncontroller["Lessons and materials"]
end

subgraph group_assessment["Assessment and records"]
  node_assignmentcontroller["Assignments and grading"]
  node_quizcontroller["Quizzes and attempts<br/>[quizController.js]"]
  node_progresscontroller["Learning progress"]
  node_dashboardcontroller["Dashboard data"]
end

subgraph group_data["Persistence"]
  node_sqlmodels[("SQL data models")]
  node_sqlserver[("SQL Server")]
end

node_learner(("Platform user"))

node_learner -->|"uses"| node_webapp
node_webapp -->|"provides auth"| node_authstate
node_webapp -->|"routes to"| node_courseui
node_webapp -->|"routes to"| node_detailsui
node_webapp -->|"routes to"| node_dashboardui
node_authstate -->|"requests"| node_http
node_courseui -->|"requests"| node_http
node_detailsui -->|"requests"| node_http
node_detailsui -->|"renders"| node_quizui
node_quizui -->|"requests"| node_http
node_dashboardui -->|"requests"| node_http
node_http -.->|"calls API"| node_apiapp
node_apiapp -->|"mounts"| node_authroutes
node_apiapp -->|"mounts"| node_enrollroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_enrollroutes -->|"dispatches"| node_enrollcontroller
node_enrollroutes -->|"checks access"| node_guard
node_authcontroller -->|"uses users"| node_sqlmodels
node_enrollcontroller -->|"reads and writes"| node_sqlmodels
node_coursecontroller -->|"uses course and user data"| node_sqlmodels
node_lessoncontroller -->|"uses lesson data"| node_sqlmodels
node_assignmentcontroller -->|"uses assignment data"| node_sqlmodels
node_quizcontroller -->|"uses quiz data"| node_sqlmodels
node_progresscontroller -->|"uses progress data"| node_sqlmodels
node_dashboardcontroller -.->|"uses dashboard data"| node_sqlmodels
node_sqlmodels -.->|"queries"| node_sqlserver

click node_webapp "https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/App.jsx"
click node_authstate "https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/context/AuthContext.jsx"
click node_http "https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/api/axios.js"
click node_courseui "https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/pages/Courses.jsx"
click node_detailsui "https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/pages/CourseDetails.jsx"
click node_quizui "https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/components/CourseQuizzes.jsx"
click node_dashboardui "https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/pages/Dashboard.jsx"
click node_apiapp "https://github.com/erjoneox/elearningplatform/blob/main/backend/app.js"
click node_authroutes "https://github.com/erjoneox/elearningplatform/blob/main/backend/routes/authRoutes.js"
click node_authcontroller "https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/authController.js"
click node_guard "https://github.com/erjoneox/elearningplatform/blob/main/backend/middleware/authMiddleware.js"
click node_enrollroutes "https://github.com/erjoneox/elearningplatform/blob/main/backend/routes/enrollmentRoutes.js"
click node_enrollcontroller "https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/enrollmentController.js"
click node_coursecontroller "https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/courseController.js"
click node_lessoncontroller "https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/lessonController.js"
click node_assignmentcontroller "https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/assignmentController.js"
click node_quizcontroller "https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/quizController.js"
click node_progresscontroller "https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/progressController.js"
click node_dashboardcontroller "https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/dashboardController.js"
click node_sqlmodels "https://github.com/erjoneox/elearningplatform/tree/main/backend/models"

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_authstate,node_http,node_courseui,node_detailsui,node_quizui,node_dashboardui,node_learner toneBlue
class node_apiapp,node_authroutes,node_authcontroller,node_guard,node_enrollroutes,node_enrollcontroller toneAmber
class node_coursecontroller,node_lessoncontroller toneMint
class node_assignmentcontroller,node_quizcontroller,node_progresscontroller,node_dashboardcontroller toneRose
class node_sqlmodels,node_sqlserver toneIndigo
```

## Components

### Web client

- [Application routes](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Authentication state](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [HTTP client](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/api/axios.js): `frontend/src/api/axios.js`
- [Course browsing](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/pages/Courses.jsx): `frontend/src/pages/Courses.jsx`
- [Course details](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/pages/CourseDetails.jsx): `frontend/src/pages/CourseDetails.jsx`
- [Quiz interface](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/components/CourseQuizzes.jsx): `frontend/src/components/CourseQuizzes.jsx`
- [Dashboard](https://github.com/erjoneox/elearningplatform/blob/main/frontend/src/pages/Dashboard.jsx): `frontend/src/pages/Dashboard.jsx`

### API and access

- [Express API](https://github.com/erjoneox/elearningplatform/blob/main/backend/app.js): `backend/app.js`
- [Authentication routes](https://github.com/erjoneox/elearningplatform/blob/main/backend/routes/authRoutes.js): `backend/routes/authRoutes.js`
- [Authentication](https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/authController.js): `backend/controllers/authController.js`
- [Token and role checks](https://github.com/erjoneox/elearningplatform/blob/main/backend/middleware/authMiddleware.js): `backend/middleware/authMiddleware.js`
- [Enrollment routes](https://github.com/erjoneox/elearningplatform/blob/main/backend/routes/enrollmentRoutes.js): `backend/routes/enrollmentRoutes.js`
- [Enrollment management](https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/enrollmentController.js): `backend/controllers/enrollmentController.js`

### Course learning

- [Course management](https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/courseController.js): `backend/controllers/courseController.js`
- [Lessons and materials](https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/lessonController.js): `backend/controllers/lessonController.js`

### Assessment and records

- [Assignments and grading](https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/assignmentController.js): `backend/controllers/assignmentController.js`
- [Quizzes and attempts](https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/quizController.js): `backend/controllers/quizController.js`
- [Learning progress](https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/progressController.js): `backend/controllers/progressController.js`
- [Dashboard data](https://github.com/erjoneox/elearningplatform/blob/main/backend/controllers/dashboardController.js): `backend/controllers/dashboardController.js`

### Persistence

- [SQL data models](https://github.com/erjoneox/elearningplatform/tree/main/backend/models): `backend/models`
- **SQL Server**

### Other components

- **Platform user**

## Connections

- Platform user → Application routes: uses
- Application routes → Authentication state: provides auth (evidence: `frontend/src/App.jsx`)
- Application routes → Course browsing: routes to (evidence: `frontend/src/App.jsx`)
- Application routes → Course details: routes to (evidence: `frontend/src/App.jsx`)
- Application routes → Dashboard: routes to (evidence: `frontend/src/App.jsx`)
- Authentication state → HTTP client: requests (evidence: `frontend/src/context/AuthContext.jsx`)
- Course browsing → HTTP client: requests (evidence: `frontend/src/pages/Courses.jsx`)
- Course details → HTTP client: requests (evidence: `frontend/src/pages/CourseDetails.jsx`)
- Course details → Quiz interface: renders (evidence: `frontend/src/pages/CourseDetails.jsx`)
- Quiz interface → HTTP client: requests (evidence: `frontend/src/components/CourseQuizzes.jsx`)
- Dashboard → HTTP client: requests (evidence: `frontend/src/pages/Dashboard.jsx`)
- HTTP client → Express API: calls API
- Express API → Authentication routes: mounts (evidence: `backend/app.js`)
- Express API → Enrollment routes: mounts (evidence: `backend/app.js`)
- Authentication routes → Authentication: dispatches (evidence: `backend/routes/authRoutes.js`)
- Enrollment routes → Enrollment management: dispatches (evidence: `backend/routes/enrollmentRoutes.js`)
- Enrollment routes → Token and role checks: checks access (evidence: `backend/routes/enrollmentRoutes.js`)
- Authentication → SQL data models: uses users (evidence: `backend/controllers/authController.js`)
- Enrollment management → SQL data models: reads and writes (evidence: `backend/controllers/enrollmentController.js`)
- Course management → SQL data models: uses course and user data (evidence: `backend/controllers/courseController.js`)
- Lessons and materials → SQL data models: uses lesson data (evidence: `backend/controllers/lessonController.js`)
- Assignments and grading → SQL data models: uses assignment data (evidence: `backend/controllers/assignmentController.js`)
- Quizzes and attempts → SQL data models: uses quiz data (evidence: `backend/controllers/quizController.js`)
- Learning progress → SQL data models: uses progress data (evidence: `backend/controllers/progressController.js`)
- Dashboard data → SQL data models: uses dashboard data
- SQL data models → SQL Server: queries
