# cultura15/cyberkids architecture

> Architecture diagram of the GitHub repository cultura15/cyberkids, 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/cultura15/cyberkids
- Repository: https://github.com/cultura15/cyberkids

## Overview

CyberKids pairs a teacher-facing classroom dashboard with Roblox cybersecurity activities for students. Teachers authenticate, organize classes, configure game access and create tasks; students join by class code, retrieve active scenarios, play activities, and report performance. The backend supports feedback, rankings, classroom progress and real-time status/notification features. Source excerpts establish selected authentication, class, scenario, student and leaderboard behavior; several other documented capabilities are represented at subsystem level because their implementations were not sampled.

Main entry points: [`frontend/src/App.js`](https://github.com/cultura15/cyberkids/blob/main/frontend/src/App.js) (Web app routes), [`backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/ScenarioService.java`](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/ScenarioService.java) (Scenario management), [`frontend/src/pages/Auth`](https://github.com/cultura15/cyberkids/tree/main/frontend/src/pages/Auth) (Login and signup), [`frontend/src/archive/Class/WebSocketManager.jsx`](https://github.com/cultura15/cyberkids/blob/main/frontend/src/archive/Class/WebSocketManager.jsx) (Status listener)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Teacher dashboard"]
  node_app["Web app routes<br/>[App.js]"]
  node_dashboard["Dashboard pages"]
  node_login["Login and signup"]
  node_ws_client["Status listener"]
end

subgraph group_identity["Identity and access"]
  node_auth_api["JWT authentication"]
  node_auth_service["Auth service<br/>[AuthService.java]"]
  node_teacher_store[("Teacher records<br/>[TeacherRepo.java]")]
  node_backend_ms_oauth["Microsoft OAuth callback"]
end

subgraph group_classroom["Classroom operations"]
  node_class_api["Class API"]
  node_class_service["Class management<br/>[ClassService.java]"]
  node_class_store[("Class records<br/>[ClassRepo.java]")]
end

subgraph group_learning["Game learning services"]
  node_scenario_api["Student and game API"]
  node_scenario_service["Scenario management"]
  node_scenario_store[("Scenario records")]
  node_ai_service["AI feedback<br/>[AIService.java]"]
end

subgraph group_insights["Progress and updates"]
  node_score_api["Score API"]
  node_level_scores["Level rankings"]
  node_global_scores["Combined rankings<br/>[GlobalService.java]"]
  node_realtime["Live class updates"]
end

node_teacher(("Teacher"))
node_student(("Student"))
node_roblox["Roblox game"]
node_microsoft["Microsoft OAuth"]
node_ai_provider["AI provider"]

node_teacher -->|"uses"| node_app
node_app -->|"routes to"| node_login
node_app -->|"routes to"| node_dashboard
node_login -->|"authenticates"| node_auth_api
node_auth_api -->|"calls"| node_auth_service
node_auth_service -->|"reads"| node_teacher_store
node_microsoft -.->|"authenticates"| node_backend_ms_oauth
node_teacher -->|"manages classes"| node_class_api
node_class_api -->|"calls"| node_class_service
node_class_service -->|"reads/writes"| node_class_store
node_student -->|"plays"| node_roblox
node_roblox -->|"requests game data"| node_scenario_api
node_scenario_api -->|"calls"| node_scenario_service
node_scenario_service -->|"reads"| node_scenario_store
node_scenario_service -->|"requests feedback"| node_ai_service
node_ai_service -.->|"generates feedback"| node_ai_provider
node_roblox -->|"reports scores"| node_score_api
node_score_api -->|"records results"| node_level_scores
node_level_scores -->|"rebuilds rankings"| node_global_scores
node_global_scores -->|"checks class ownership"| node_class_store
node_ws_client -->|"subscribes"| node_realtime
node_realtime -->|"dispatches status events"| node_ws_client

click node_app "https://github.com/cultura15/cyberkids/blob/main/frontend/src/App.js"
click node_dashboard "https://github.com/cultura15/cyberkids/tree/main/frontend/src/pages/Dashboard"
click node_login "https://github.com/cultura15/cyberkids/tree/main/frontend/src/pages/Auth"
click node_auth_api "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/JWT/AuthController.java"
click node_auth_service "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/JWT/AuthService.java"
click node_teacher_store "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/TeacherRepo.java"
click node_backend_ms_oauth "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/MsTeams/OAuthController.java"
click node_class_api "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/ClassController.java"
click node_class_service "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/ClassService.java"
click node_class_store "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/ClassRepo.java"
click node_scenario_api "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/StudentController.java"
click node_scenario_service "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/ScenarioService.java"
click node_scenario_store "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/ScenarioRepository.java"
click node_ai_service "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/AIService.java"
click node_score_api "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/ScoreController.java"
click node_level_scores "https://github.com/cultura15/cyberkids/tree/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Leaderboard"
click node_global_scores "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Leaderboard/Global/GlobalService.java"
click node_realtime "https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Config/WebSocketConfig.java"
click node_ws_client "https://github.com/cultura15/cyberkids/blob/main/frontend/src/archive/Class/WebSocketManager.jsx"

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_app,node_dashboard,node_login,node_ws_client toneBlue
class node_auth_api,node_auth_service,node_teacher_store,node_backend_ms_oauth toneAmber
class node_class_api,node_class_service,node_class_store toneMint
class node_scenario_api,node_scenario_service,node_scenario_store,node_ai_service toneRose
class node_score_api,node_level_scores,node_global_scores,node_realtime,node_teacher,node_student,node_roblox,node_microsoft,node_ai_provider toneIndigo
```

## Components

### Teacher dashboard

- [Web app routes](https://github.com/cultura15/cyberkids/blob/main/frontend/src/App.js): `frontend/src/App.js`
- [Dashboard pages](https://github.com/cultura15/cyberkids/tree/main/frontend/src/pages/Dashboard): `frontend/src/pages/Dashboard`
- [Login and signup](https://github.com/cultura15/cyberkids/tree/main/frontend/src/pages/Auth): `frontend/src/pages/Auth`
- [Status listener](https://github.com/cultura15/cyberkids/blob/main/frontend/src/archive/Class/WebSocketManager.jsx): `frontend/src/archive/Class/WebSocketManager.jsx`

### Identity and access

- [JWT authentication](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/JWT/AuthController.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/JWT/AuthController.java`
- [Auth service](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/JWT/AuthService.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/JWT/AuthService.java`
- [Teacher records](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/TeacherRepo.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/TeacherRepo.java`
- [Microsoft OAuth callback](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/MsTeams/OAuthController.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/MsTeams/OAuthController.java`

### Classroom operations

- [Class API](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/ClassController.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/ClassController.java`
- [Class management](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/ClassService.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/ClassService.java`
- [Class records](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/ClassRepo.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/ClassRepo.java`

### Game learning services

- [Student and game API](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/StudentController.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/StudentController.java`
- [Scenario management](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/ScenarioService.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/ScenarioService.java`
- [Scenario records](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/ScenarioRepository.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Repository/ScenarioRepository.java`
- [AI feedback](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/AIService.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Service/AIService.java`

### Progress and updates

- [Score API](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/ScoreController.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Controller/ScoreController.java`
- [Level rankings](https://github.com/cultura15/cyberkids/tree/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Leaderboard): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Leaderboard`
- [Combined rankings](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Leaderboard/Global/GlobalService.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Leaderboard/Global/GlobalService.java`
- [Live class updates](https://github.com/cultura15/cyberkids/blob/main/backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Config/WebSocketConfig.java): `backend/CyberKids/src/main/java/capstone/cyberkids/CyberKids/Config/WebSocketConfig.java`

### Other components

- **Teacher**
- **Student**
- **Roblox game**
- **Microsoft OAuth**
- **AI provider**

## Connections

- Teacher → Web app routes: uses
- Web app routes → Login and signup: routes to
- Web app routes → Dashboard pages: routes to
- Login and signup → JWT authentication: authenticates
- JWT authentication → Auth service: calls
- Auth service → Teacher records: reads
- Microsoft OAuth → Microsoft OAuth callback: authenticates
- Teacher → Class API: manages classes
- Class API → Class management: calls
- Class management → Class records: reads/writes
- Student → Roblox game: plays
- Roblox game → Student and game API: requests game data
- Student and game API → Scenario management: calls
- Scenario management → Scenario records: reads
- Scenario management → AI feedback: requests feedback
- AI feedback → AI provider: generates feedback
- Roblox game → Score API: reports scores
- Score API → Level rankings: records results
- Level rankings → Combined rankings: rebuilds rankings
- Combined rankings → Class records: checks class ownership
- Status listener → Live class updates: subscribes
- Live class updates → Status listener: dispatches status events
