# ljc798/veyon-campus-deployment architecture

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

- Interactive diagram: https://gitdiagram.com/ljc798/veyon-campus-deployment
- Repository: https://github.com/ljc798/veyon-campus-deployment

## Overview

Veyon Campus is a school deployment and classroom-management product: teachers configure classrooms and student policies, deploy student software, and control connected devices; administrators manage downloads and releases through a web workspace backed by CloudBase services. Student-side components enforce policy, communicate with teachers, and apply updates, with privileged maintenance and recovery support. The graph combines README-described capabilities with relationships visible in sampled source and the source index; unsampled subsystems are included where documented, but their internal wiring is not inferred.

Main entry points: [`src/VeyonCampus.App/TeacherViewModel.cs`](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/TeacherViewModel.cs) (Teacher console), [`src/VeyonCampus.Agent/Program.cs`](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Agent/Program.cs) (Student agent), [`website/src/cloud-admin.js`](https://github.com/ljc798/veyon-campus-deployment/blob/develop/website/src/cloud-admin.js) (Admin workspace), [`src/VeyonCampus.Core/StudentUpdateAtomicTransaction.cs`](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/StudentUpdateAtomicTransaction.cs) (Atomic updates)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_teacher["Teacher Console"]
  node_teacher["Teacher console"]
  node_classroom["Classroom controls"]
  node_mobile["Mobile control<br/>[app.js]"]
  node_maintenance_client["Maintenance client"]
  node_student_setup["Student setup"]
end

subgraph group_student["Student Runtime"]
  node_companion["Classroom companion<br/>[App.axaml.cs]"]
  node_agent["Student agent<br/>[Program.cs]"]
  node_edge_policy["Browser policy"]
  node_input_guard["Input guard"]
  node_maintenance_service["Privileged maintenance<br/>[Program.cs]"]
end

subgraph group_core["Shared Core"]
  node_update_tx["Atomic updates"]
  node_release_handoff["Release handoff"]
  node_maintenance_dispatch["Maintenance dispatch"]
  node_maintenance_update["Maintenance updates"]
  node_service_release_update["Service self-update"]
  node_trust_security["File and identity security"]
  node_policy_core["Policy and trust<br/>[WebsitePolicy.cs]"]
  node_package_catalog["Deployment packages"]
end

subgraph group_cloud["Cloud Services"]
  node_api["Package and release API<br/>[index.js]"]
  node_telemetry["Package endpoints"]
end

subgraph group_web["Web Workspace"]
  node_website["Admin workspace<br/>[cloud-admin.js]"]
  node_public_site["Public downloads<br/>[app.js]"]
end

node_admin(("School administrator"))
node_teacher_user(("Teacher"))
node_student_user(("Student"))
node_cloudbase[("CloudBase")]
node_release_hosts["Release downloads"]

node_teacher_user -->|"uses"| node_teacher
node_teacher -->|"controls classroom"| node_classroom
node_teacher -->|"controls by LAN"| node_mobile
node_teacher -->|"sets up students"| node_student_setup
node_student_user -->|"uses"| node_companion
node_classroom -->|"manages policies"| node_policy_core
node_student_setup -->|"deploys"| node_agent
node_agent -->|"enforces policy"| node_policy_core
node_agent -.->|"refreshes browser policy"| node_edge_policy
node_agent -.->|"uses input guard"| node_input_guard
node_maintenance_client -.->|"communicates"| node_maintenance_service
node_maintenance_dispatch -->|"prepares offers"| node_maintenance_update
node_maintenance_dispatch -->|"queries status"| node_service_release_update
node_maintenance_update -->|"uses transactions"| node_update_tx
node_service_release_update -->|"uses transactions"| node_update_tx
node_release_handoff -->|"uses transactions"| node_update_tx
node_trust_security -->|"secures files"| node_release_handoff
node_admin -->|"manages releases"| node_website
node_website -->|"authenticates and stores"| node_cloudbase
node_public_site -.->|"requests downloads"| node_api
node_api -.->|"validates release metadata"| node_cloudbase
node_website -->|"links downloads"| node_release_hosts
node_package_catalog -.->|"supports package storage"| node_telemetry

click node_teacher "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/TeacherViewModel.cs"
click node_classroom "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/TeacherClassroomQuickControlService.cs"
click node_mobile "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/MobileWeb/app.js"
click node_maintenance_client "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/Maintenance/TeacherMaintenanceServiceChannel.cs"
click node_student_setup "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/StudentSetupWindow.axaml.cs"
click node_companion "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Companion/App.axaml.cs"
click node_agent "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Agent/Program.cs"
click node_edge_policy "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.EdgePolicyExecutor/StudentEdgePolicyRefreshExecutor.cs"
click node_input_guard "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.InputGuard/StudentInputGuardServer.cs"
click node_maintenance_service "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.MaintenanceService/Program.cs"
click node_update_tx "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/StudentUpdateAtomicTransaction.cs"
click node_release_handoff "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/ApplicationReleaseUpdateHandoff.cs"
click node_maintenance_dispatch "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/Maintenance/MaintenanceServiceCommandDispatcher.cs"
click node_maintenance_update "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/Maintenance/MaintenanceServiceUpdateExecutor.cs"
click node_service_release_update "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/Maintenance/MaintenanceServiceReleaseUpdateExecutor.cs"
click node_trust_security "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/AgentFileSecurity.cs"
click node_policy_core "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/WebsitePolicy.cs"
click node_package_catalog "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/DeploymentPackageStorageNaming.cs"
click node_website "https://github.com/ljc798/veyon-campus-deployment/blob/develop/website/src/cloud-admin.js"
click node_public_site "https://github.com/ljc798/veyon-campus-deployment/blob/develop/website/app.js"
click node_api "https://github.com/ljc798/veyon-campus-deployment/blob/develop/cloudfunctions/veyon-api/index.js"
click node_telemetry "https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Telemetry.Server/DeploymentPackageEndpoints.cs"

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_teacher,node_classroom,node_mobile,node_maintenance_client,node_student_setup toneBlue
class node_companion,node_agent,node_edge_policy,node_input_guard,node_maintenance_service,node_cloudbase toneAmber
class node_update_tx,node_release_handoff,node_maintenance_dispatch,node_maintenance_update,node_service_release_update,node_trust_security,node_policy_core,node_package_catalog toneMint
class node_api,node_telemetry toneRose
class node_website,node_public_site,node_admin,node_teacher_user,node_student_user,node_release_hosts toneIndigo
```

## Components

### Teacher Console

- [Teacher console](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/TeacherViewModel.cs): `src/VeyonCampus.App/TeacherViewModel.cs`
- [Classroom controls](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/TeacherClassroomQuickControlService.cs): `src/VeyonCampus.App/TeacherClassroomQuickControlService.cs`
- [Mobile control](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/MobileWeb/app.js): `src/VeyonCampus.App/MobileWeb/app.js`
- [Maintenance client](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/Maintenance/TeacherMaintenanceServiceChannel.cs): `src/VeyonCampus.App/Maintenance/TeacherMaintenanceServiceChannel.cs`
- [Student setup](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.App/StudentSetupWindow.axaml.cs): `src/VeyonCampus.App/StudentSetupWindow.axaml.cs`

### Student Runtime

- [Classroom companion](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Companion/App.axaml.cs): `src/VeyonCampus.Companion/App.axaml.cs`
- [Student agent](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Agent/Program.cs): `src/VeyonCampus.Agent/Program.cs`
- [Browser policy](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.EdgePolicyExecutor/StudentEdgePolicyRefreshExecutor.cs): `src/VeyonCampus.EdgePolicyExecutor/StudentEdgePolicyRefreshExecutor.cs`
- [Input guard](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.InputGuard/StudentInputGuardServer.cs): `src/VeyonCampus.InputGuard/StudentInputGuardServer.cs`
- [Privileged maintenance](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.MaintenanceService/Program.cs): `src/VeyonCampus.MaintenanceService/Program.cs`

### Shared Core

- [Atomic updates](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/StudentUpdateAtomicTransaction.cs): `src/VeyonCampus.Core/StudentUpdateAtomicTransaction.cs`
- [Release handoff](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/ApplicationReleaseUpdateHandoff.cs): `src/VeyonCampus.Core/ApplicationReleaseUpdateHandoff.cs`
- [Maintenance dispatch](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/Maintenance/MaintenanceServiceCommandDispatcher.cs): `src/VeyonCampus.Core/Maintenance/MaintenanceServiceCommandDispatcher.cs`
- [Maintenance updates](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/Maintenance/MaintenanceServiceUpdateExecutor.cs): `src/VeyonCampus.Core/Maintenance/MaintenanceServiceUpdateExecutor.cs`
- [Service self-update](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/Maintenance/MaintenanceServiceReleaseUpdateExecutor.cs): `src/VeyonCampus.Core/Maintenance/MaintenanceServiceReleaseUpdateExecutor.cs`
- [File and identity security](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/AgentFileSecurity.cs): `src/VeyonCampus.Core/AgentFileSecurity.cs`
- [Policy and trust](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/WebsitePolicy.cs): `src/VeyonCampus.Core/WebsitePolicy.cs`
- [Deployment packages](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Core/DeploymentPackageStorageNaming.cs): `src/VeyonCampus.Core/DeploymentPackageStorageNaming.cs`

### Cloud Services

- [Package and release API](https://github.com/ljc798/veyon-campus-deployment/blob/develop/cloudfunctions/veyon-api/index.js): `cloudfunctions/veyon-api/index.js`
- [Package endpoints](https://github.com/ljc798/veyon-campus-deployment/blob/develop/src/VeyonCampus.Telemetry.Server/DeploymentPackageEndpoints.cs): `src/VeyonCampus.Telemetry.Server/DeploymentPackageEndpoints.cs`

### Web Workspace

- [Admin workspace](https://github.com/ljc798/veyon-campus-deployment/blob/develop/website/src/cloud-admin.js): `website/src/cloud-admin.js`
- [Public downloads](https://github.com/ljc798/veyon-campus-deployment/blob/develop/website/app.js): `website/app.js`

### Other components

- **School administrator**
- **Teacher**
- **Student**
- **CloudBase**
- **Release downloads**

## Connections

- Teacher → Teacher console: uses (evidence: `README.md`)
- Teacher console → Classroom controls: controls classroom (evidence: `README.md`)
- Teacher console → Mobile control: controls by LAN (evidence: `README.md`)
- Teacher console → Student setup: sets up students (evidence: `README.md`)
- Student → Classroom companion: uses (evidence: `README.md`)
- Classroom controls → Policy and trust: manages policies (evidence: `README.md`)
- Student setup → Student agent: deploys (evidence: `README.md`)
- Student agent → Policy and trust: enforces policy (evidence: `README.md`)
- Student agent → Browser policy: refreshes browser policy
- Student agent → Input guard: uses input guard
- Maintenance client → Privileged maintenance: communicates
- Maintenance dispatch → Maintenance updates: prepares offers (evidence: `src/VeyonCampus.Core/Maintenance/MaintenanceServiceCommandDispatcher.cs`)
- Maintenance dispatch → Service self-update: queries status (evidence: `src/VeyonCampus.Core/Maintenance/MaintenanceServiceCommandDispatcher.cs`)
- Maintenance updates → Atomic updates: uses transactions (evidence: `src/VeyonCampus.Core/Maintenance/MaintenanceServiceUpdateExecutor.cs`)
- Service self-update → Atomic updates: uses transactions (evidence: `src/VeyonCampus.Core/Maintenance/MaintenanceServiceReleaseUpdateExecutor.cs`)
- Release handoff → Atomic updates: uses transactions (evidence: `src/VeyonCampus.Core/ApplicationReleaseUpdateHandoff.cs`)
- File and identity security → Release handoff: secures files (evidence: `src/VeyonCampus.Core/ApplicationReleaseUpdateHandoff.cs`)
- School administrator → Admin workspace: manages releases (evidence: `README.md`)
- Admin workspace → CloudBase: authenticates and stores (evidence: `README.md`)
- Public downloads → Package and release API: requests downloads
- Package and release API → CloudBase: validates release metadata
- Admin workspace → Release downloads: links downloads (evidence: `README.md`)
- Deployment packages → Package endpoints: supports package storage (evidence: `src/VeyonCampus.Telemetry.Server/DeploymentPackageEndpoints.cs`)
