# kannan-a7801/schoolwebsite architecture

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

- Interactive diagram: https://gitdiagram.com/kannan-a7801/schoolwebsite
- Repository: https://github.com/kannan-a7801/schoolwebsite

## Overview

#### Purpose and deployable surfaces
This is a school LMS repository with a Java/Spring backend, a lightweight learner-facing static frontend, a separate React admin portal, and versioned curriculum documents for grades 3–10. The primary runtime entry points are `backend/src/main/java/com/school/lms/LmsApplication.java`, `frontend/index.html`, `frontend/app.js`, and `admin-portal/src/index.js`.

#### Backend API and application layering
The backend is a Spring Boot 3 application organized as REST controller → service → JPA repository → relational database. Controllers expose role-oriented API surfaces for authentication, courses, students, teachers, and administration:
- `backend/src/main/java/com/school/lms/controller/AuthController.java`
- `backend/src/main/java/com/school/lms/controller/CourseController.java`
- `backend/src/main/java/com/school/lms/controller/AdminController.java`

Business logic is separated by domain in `backend/src/main/java/com/school/lms/service/StudentService.java`, `backend/src/main/java/com/school/lms/service/TeacherService.java`, and `backend/src/main/java/com/school/lms/service/CourseService.java`. Error translation is centralized at `backend/src/main/java/com/school/lms/exception/GlobalExceptionHandler.java`.

#### Identity and authorization boundary
Authentication is JWT-based. Login/signup requests enter through the auth controller and service, then JWT issuance/validation and request authentication are handled by the security package. Role data exists as a persisted domain concept, supporting admin, teacher, and student-specific API behavior.
- `backend/src/main/java/com/school/lms/security/SecurityConfig.java`
- `backend/src/main/java/com/school/lms/security/JwtAuthenticationFilter.java`
- `backend/src/main/java/com/school/lms/security/JwtUtils.java`

The frontend/admin clients are expected to cross this boundary through authenticated HTTP requests rather than direct database access.

#### Learning and school operations domain
The persistent model covers course hierarchy and classroom activity: terms and chapters define curriculum, day classes and attendance capture delivery, and progress, quizzes, submissions, grades, and daily reports capture student work and evaluation.
- `backend/src/main/java/com/school/lms/entity/Term.java`
- `backend/src/main/java/com/school/lms/entity/Chapter.java`
- `backend/src/main/java/com/school/lms/entity/StudentProgress.java`

Related operational flows include quiz submission/results, teacher daily reporting, submission review, and administrative dashboard aggregation, represented by DTO contracts such as `backend/src/main/java/com/school/lms/dto/QuizSubmissionDto.java`, `backend/src/main/java/com/school/lms/dto/DailyReportDto.java`, and `backend/src/main/java/com/school/lms/dto/AdminDashboardStatsDto.java`.

#### Client applications
The learner-facing client is plain browser JavaScript, with course content/data separated from rendering logic:
- `frontend/index.html`
- `frontend/app.js`
- `frontend/coursesData.js`

The admin portal is a separate React application. `admin-portal/src/App.js` is its composition point; layout/navigation is shared through `admin-portal/src/components/layout/AdminLayout.js`; global auth state and API access are isolated in `admin-portal/src/context/AuthContext.js` and `admin-portal/src/services/api.js`. Its pages cover students, courses, approvals, submissions, analytics, and system administration.

#### Data, infrastructure, and external services
The backend uses Spring Data JPA/Hibernate with MySQL connectivity and HikariCP, configured through `backend/src/main/resources/application.yml`; repositories define database access boundaries, e.g. `backend/src/main/java/com/school/lms/repository/UserRepository.java` and `backend/src/main/java/com/school/lms/repository/SubmissionRepository.java`. It also includes `backend/src/main/java/com/school/lms/service/SupabaseStorageService.java`, indicating Supabase-backed object storage for uploaded/content files.

Curriculum source material is filesystem-managed rather than modeled solely in code. It is organized by grade, chapter, class session, assets, activities, and assessments under paths such as `asset/6th class/Chapter 2 Digital Technologies`, `asset/8th class/Chapter 3 Coding Fundamentals`, and `asset/10th class/chapter 1`. This document corpus is a major content boundary: ingestion, normalization, and storage mapping would need to accommodate inconsistent directory/file naming and mixed DOCX/PDF formats.

Main entry points: [`backend/src/main/java/com/school/lms/controller/AuthController.java`](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/controller/AuthController.java) (Role-oriented REST APIs), [`frontend/app.js`](https://github.com/kannan-a7801/schoolwebsite/blob/main/frontend/app.js) (Learner rendering), [`backend/src/main/java/com/school/lms/service/StudentService.java`](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/service/StudentService.java) (Learning domain services), [`backend/src/main/java/com/school/lms/repository/UserRepository.java`](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/repository/UserRepository.java) (JPA repositories)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Client applications"]
  node_learner_ui["Learner static UI<br/>browser app<br/>[index.html]"]
  node_learner_logic["Learner rendering<br/>browser JavaScript<br/>[app.js]"]
  node_learner_course_data["Learner course data<br/>browser content data<br/>[coursesData.js]"]
  node_admin_portal["Admin React portal<br/>React app<br/>[App.js]"]
  node_admin_layout["Admin layout<br/>React layout<br/>[AdminLayout.js]"]
  node_admin_auth_api["Admin auth and API client<br/>React context/service<br/>[AuthContext.js]"]
end

subgraph group_backend["Spring backend"]
  node_lms_application{{"LMS application<br/>Spring Boot entry point"}}
  node_rest_controllers["Role-oriented REST APIs<br/>Spring controllers"]
  node_security_boundary["JWT security boundary<br/>Spring Security"]
  node_jwt_filter["JWT request filter<br/>security filter"]
  node_jwt_utils["JWT token service<br/>JWT utility<br/>[JwtUtils.java]"]
  node_domain_services["Learning domain services<br/>Spring services"]
  node_exception_handler["API error translation<br/>exception handler"]
end

subgraph group_data["Data and content"]
  node_jpa_repositories["JPA repositories<br/>Spring Data repositories"]
  node_learning_model["Learning operations model<br/>JPA entities and DTOs"]
  node_mysql[("MySQL database<br/>relational database<br/>[application.yml]")]
  node_supabase_storage["Supabase object storage<br/>external object storage"]
  node_curriculum_corpus["Versioned curriculum corpus<br/>filesystem documents"]
end

node_learner_ui -->|"loads"| node_learner_logic
node_learner_logic -->|"renders from"| node_learner_course_data
node_learner_logic -->|"authenticated HTTP"| node_rest_controllers
node_admin_portal -->|"composes"| node_admin_layout
node_admin_portal -->|"uses"| node_admin_auth_api
node_admin_auth_api -->|"authenticated HTTP"| node_rest_controllers
node_lms_application -->|"configures"| node_security_boundary
node_security_boundary -->|"applies"| node_jwt_filter
node_jwt_filter -->|"validates token"| node_jwt_utils
node_rest_controllers -->|"protected by"| node_security_boundary
node_rest_controllers -->|"login token issuance"| node_jwt_utils
node_rest_controllers -->|"delegates workflows"| node_domain_services
node_rest_controllers -.->|"errors translated by"| node_exception_handler
node_domain_services -->|"persists through"| node_jpa_repositories
node_domain_services -->|"stores files"| node_supabase_storage
node_jpa_repositories -->|"maps"| node_learning_model
node_jpa_repositories -->|"reads and writes"| node_mysql
node_curriculum_corpus -.->|"content storage mapping"| node_supabase_storage

click node_learner_ui "https://github.com/kannan-a7801/schoolwebsite/blob/main/frontend/index.html"
click node_learner_logic "https://github.com/kannan-a7801/schoolwebsite/blob/main/frontend/app.js"
click node_learner_course_data "https://github.com/kannan-a7801/schoolwebsite/blob/main/frontend/coursesData.js"
click node_admin_portal "https://github.com/kannan-a7801/schoolwebsite/blob/main/admin-portal/src/App.js"
click node_admin_layout "https://github.com/kannan-a7801/schoolwebsite/blob/main/admin-portal/src/components/layout/AdminLayout.js"
click node_admin_auth_api "https://github.com/kannan-a7801/schoolwebsite/blob/main/admin-portal/src/context/AuthContext.js"
click node_lms_application "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/LmsApplication.java"
click node_rest_controllers "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/controller/AuthController.java"
click node_security_boundary "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/security/SecurityConfig.java"
click node_jwt_filter "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/security/JwtAuthenticationFilter.java"
click node_jwt_utils "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/security/JwtUtils.java"
click node_domain_services "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/service/StudentService.java"
click node_exception_handler "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/exception/GlobalExceptionHandler.java"
click node_jpa_repositories "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/repository/UserRepository.java"
click node_learning_model "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/entity/StudentProgress.java"
click node_mysql "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/resources/application.yml"
click node_supabase_storage "https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/service/SupabaseStorageService.java"
click node_curriculum_corpus "https://github.com/kannan-a7801/schoolwebsite/tree/main/asset/6th%20class/Chapter%202%20Digital%20Technologies"

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_learner_ui,node_learner_logic,node_learner_course_data,node_admin_portal,node_admin_layout,node_admin_auth_api toneBlue
class node_lms_application,node_rest_controllers,node_security_boundary,node_jwt_filter,node_jwt_utils,node_domain_services,node_exception_handler toneAmber
class node_jpa_repositories,node_learning_model,node_mysql,node_supabase_storage,node_curriculum_corpus toneMint
```

## Components

### Client applications

- [Learner static UI](https://github.com/kannan-a7801/schoolwebsite/blob/main/frontend/index.html): browser app · Learner-facing course experience. · `frontend/index.html`
- [Learner rendering](https://github.com/kannan-a7801/schoolwebsite/blob/main/frontend/app.js): browser JavaScript · Separates rendering from course data. · `frontend/app.js`
- [Learner course data](https://github.com/kannan-a7801/schoolwebsite/blob/main/frontend/coursesData.js): browser content data · `frontend/coursesData.js`
- [Admin React portal](https://github.com/kannan-a7801/schoolwebsite/blob/main/admin-portal/src/App.js): React app · Administrative pages for school operations. · `admin-portal/src/App.js`
- [Admin layout](https://github.com/kannan-a7801/schoolwebsite/blob/main/admin-portal/src/components/layout/AdminLayout.js): React layout · `admin-portal/src/components/layout/AdminLayout.js`
- [Admin auth and API client](https://github.com/kannan-a7801/schoolwebsite/blob/main/admin-portal/src/context/AuthContext.js): React context/service · Owns session state and authenticated API access. · `admin-portal/src/context/AuthContext.js`

### Spring backend

- [LMS application](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/LmsApplication.java): Spring Boot entry point · `backend/src/main/java/com/school/lms/LmsApplication.java`
- [Role-oriented REST APIs](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/controller/AuthController.java): Spring controllers · Authentication, course, and administration endpoints. · `backend/src/main/java/com/school/lms/controller/AuthController.java`
- [JWT security boundary](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/security/SecurityConfig.java): Spring Security · Authenticates requests and enforces role-based access. · `backend/src/main/java/com/school/lms/security/SecurityConfig.java`
- [JWT request filter](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/security/JwtAuthenticationFilter.java): security filter · `backend/src/main/java/com/school/lms/security/JwtAuthenticationFilter.java`
- [JWT token service](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/security/JwtUtils.java): JWT utility · Issues and validates login tokens. · `backend/src/main/java/com/school/lms/security/JwtUtils.java`
- [Learning domain services](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/service/StudentService.java): Spring services · Student, teacher, and course business workflows. · `backend/src/main/java/com/school/lms/service/StudentService.java`
- [API error translation](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/exception/GlobalExceptionHandler.java): exception handler · `backend/src/main/java/com/school/lms/exception/GlobalExceptionHandler.java`

### Data and content

- [JPA repositories](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/repository/UserRepository.java): Spring Data repositories · Persistence boundary for users, submissions, and learning data. · `backend/src/main/java/com/school/lms/repository/UserRepository.java`
- [Learning operations model](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/entity/StudentProgress.java): JPA entities and DTOs · Terms, chapters, attendance, progress, quizzes, submissions, grades, and reports. · `backend/src/main/java/com/school/lms/entity/StudentProgress.java`
- [MySQL database](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/resources/application.yml): relational database · JPA/Hibernate persistence with HikariCP connectivity. · `backend/src/main/resources/application.yml`
- [Supabase object storage](https://github.com/kannan-a7801/schoolwebsite/blob/main/backend/src/main/java/com/school/lms/service/SupabaseStorageService.java): external object storage · Stores uploaded and content files. · `backend/src/main/java/com/school/lms/service/SupabaseStorageService.java`
- [Versioned curriculum corpus](https://github.com/kannan-a7801/schoolwebsite/tree/main/asset/6th%20class/Chapter%202%20Digital%20Technologies): filesystem documents · Grade, chapter, session, asset, activity, and assessment material in mixed formats. · `asset/6th class/Chapter 2 Digital Technologies`

## Connections

- Learner static UI → Learner rendering: loads
- Learner rendering → Learner course data: renders from
- Learner rendering → Role-oriented REST APIs: authenticated HTTP
- Admin React portal → Admin layout: composes
- Admin React portal → Admin auth and API client: uses
- Admin auth and API client → Role-oriented REST APIs: authenticated HTTP
- LMS application → JWT security boundary: configures
- JWT security boundary → JWT request filter: applies
- JWT request filter → JWT token service: validates token
- Role-oriented REST APIs → JWT security boundary: protected by
- Role-oriented REST APIs → JWT token service: login token issuance
- Role-oriented REST APIs → Learning domain services: delegates workflows
- Role-oriented REST APIs → API error translation: errors translated by
- Learning domain services → JPA repositories: persists through
- Learning domain services → Supabase object storage: stores files
- JPA repositories → Learning operations model: maps
- JPA repositories → MySQL database: reads and writes
- Versioned curriculum corpus → Supabase object storage: content storage mapping · Requires normalization for inconsistent names and DOCX/PDF files.
