# brhnshn/corvus architecture

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

## Overview

Corvus is a self-hosted server launcher and monitoring dashboard. Users manage manual or discovered Docker services, opt services into uptime checks, and view health, incidents, metrics, and public status; the web UI talks to a .NET API backed by SQLite. The README documents container controls and logs, push monitors, backups, retention, notifications, and bilingual UI. The sampled source confirms service persistence and uptime-check behavior; wiring for several other documented features is represented only where the API registration and tree support it.

Main entry points: [`src/Corvus.Api/Program.cs`](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Program.cs) (API Host), [`src/Corvus.Web/src/App.tsx`](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/App.tsx) (Web App), [`src/Corvus.Api/BackgroundServices/UptimeCheckerService.cs`](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/UptimeCheckerService.cs) (Health Checker), [`src/Corvus.Api/Data/DbConnectionFactory.cs`](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/DbConnectionFactory.cs) (SQLite Database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web Dashboard"]
  node_web_app["Web App<br/>[App.tsx]"]
  node_service_ui["Service Management<br/>[index.tsx]"]
  node_uptime_ui["Uptime Console<br/>[index.tsx]"]
  node_dashboard_ui["Dashboard<br/>[index.tsx]"]
  node_container_ui["Container Console<br/>[index.tsx]"]
  node_metrics_ui["System Metrics<br/>[index.tsx]"]
  node_settings_ui["Settings<br/>[index.tsx]"]
  node_public_status_ui["Public Status<br/>[index.tsx]"]
end

subgraph group_api["API and Access"]
  node_api_host["API Host<br/>[Program.cs]"]
  node_service_endpoints["Service API"]
  node_auth_endpoints["Auth API<br/>[AuthEndpoints.cs]"]
  node_container_endpoints["Container API"]
  node_uptime_endpoints["Uptime API<br/>[UptimeEndpoints.cs]"]
  node_status_endpoints["Status API"]
  node_backup_api["Backup API<br/>[BackupEndpoints.cs]"]
  node_incident_api["Incident API"]
end

subgraph group_services["Service Operations"]
  node_docker_service["Docker Integration<br/>[DockerService.cs]"]
  node_discovery["Container Discovery"]
  node_logs_stream["Live Log Stream<br/>[StreamEndpoints.cs]"]
end

subgraph group_monitoring["Monitoring and Alerts"]
  node_uptime_checker["Health Checker"]
  node_notifications["Notification Delivery"]
  node_push_monitors["Push Monitors<br/>[PushEndpoints.cs]"]
  node_retention["Retention Cleanup"]
  node_metrics_collector["Metrics Collector"]
end

subgraph group_storage["Persistence"]
  node_database[("SQLite Database")]
  node_services_repo["Services Repository"]
  node_uptime_repo["Uptime Repository"]
  node_backup_repo["Backup Repository"]
  node_metrics_repo["Metrics Repository"]
end

node_operator(("Operator"))
node_public_visitor(("Status Visitor"))
node_docker_daemon["Docker Engine"]
node_monitored_targets["Monitored Targets"]
node_alert_channels["Alert Channels"]

node_operator -->|"uses"| node_web_app
node_public_visitor -->|"views"| node_public_status_ui
node_web_app -->|"navigates"| node_service_ui
node_web_app -->|"navigates"| node_uptime_ui
node_web_app -->|"navigates"| node_dashboard_ui
node_web_app -->|"navigates"| node_container_ui
node_web_app -->|"navigates"| node_metrics_ui
node_web_app -->|"navigates"| node_settings_ui
node_service_ui -->|"requests"| node_service_endpoints
node_uptime_ui -->|"requests"| node_uptime_endpoints
node_container_ui -->|"requests"| node_container_endpoints
node_public_status_ui -->|"requests"| node_status_endpoints
node_api_host -->|"maps"| node_service_endpoints
node_api_host -->|"maps"| node_auth_endpoints
node_api_host -->|"maps"| node_container_endpoints
node_api_host -->|"maps"| node_uptime_endpoints
node_api_host -->|"maps"| node_status_endpoints
node_api_host -->|"maps"| node_incident_api
node_api_host -->|"maps"| node_backup_api
node_api_host -->|"maps"| node_push_monitors
node_api_host -->|"hosts"| node_discovery
node_api_host -->|"hosts"| node_uptime_checker
node_api_host -->|"hosts"| node_metrics_collector
node_api_host -->|"hosts"| node_retention
node_service_endpoints -->|"reads/writes"| node_services_repo
node_discovery -->|"discovers"| node_docker_service
node_discovery -->|"syncs"| node_services_repo
node_docker_service -->|"controls"| node_docker_daemon
node_container_endpoints -->|"controls"| node_docker_service
node_logs_stream -->|"streams logs"| node_docker_service
node_uptime_checker -->|"loads services"| node_services_repo
node_uptime_checker -->|"probes"| node_monitored_targets
node_uptime_checker -->|"records checks"| node_uptime_repo
node_uptime_checker -->|"dispatches alerts"| node_notifications
node_notifications -->|"sends alerts"| node_alert_channels
node_push_monitors -->|"dispatches alerts"| node_notifications
node_metrics_collector -->|"records metrics"| node_metrics_repo
node_retention -->|"prunes data"| node_database
node_services_repo -->|"reads/writes"| node_database
node_uptime_repo -->|"reads/writes"| node_database
node_metrics_repo -->|"reads/writes"| node_database
node_backup_api -->|"manages backups"| node_backup_repo
node_backup_repo -->|"snapshots"| node_database

click node_web_app "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/App.tsx"
click node_service_ui "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Services/index.tsx"
click node_uptime_ui "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Uptime/index.tsx"
click node_dashboard_ui "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Dashboard/index.tsx"
click node_container_ui "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Containers/index.tsx"
click node_metrics_ui "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/SystemMetrics/index.tsx"
click node_settings_ui "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Settings/index.tsx"
click node_public_status_ui "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/PublicStatus/index.tsx"
click node_api_host "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Program.cs"
click node_service_endpoints "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/ServicesEndpoints.cs"
click node_auth_endpoints "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/AuthEndpoints.cs"
click node_container_endpoints "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/ContainersEndpoints.cs"
click node_uptime_endpoints "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/UptimeEndpoints.cs"
click node_status_endpoints "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/StatusPageEndpoints.cs"
click node_docker_service "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Services/DockerService.cs"
click node_discovery "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/ContainerDiscoveryService.cs"
click node_logs_stream "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/StreamEndpoints.cs"
click node_uptime_checker "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/UptimeCheckerService.cs"
click node_notifications "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Services/NotificationService.cs"
click node_push_monitors "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/PushEndpoints.cs"
click node_retention "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/RetentionCleanupService.cs"
click node_database "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/DbConnectionFactory.cs"
click node_services_repo "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/ServicesRepository.cs"
click node_uptime_repo "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/UptimeRepository.cs"
click node_backup_api "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/BackupEndpoints.cs"
click node_backup_repo "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/BackupRepository.cs"
click node_metrics_collector "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/SystemMetricsCollector.cs"
click node_metrics_repo "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/MetricsRepository.cs"
click node_incident_api "https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/IncidentEndpoints.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_web_app,node_service_ui,node_uptime_ui,node_dashboard_ui,node_container_ui,node_metrics_ui,node_settings_ui,node_public_status_ui toneBlue
class node_api_host,node_service_endpoints,node_auth_endpoints,node_container_endpoints,node_uptime_endpoints,node_status_endpoints,node_backup_api,node_incident_api toneAmber
class node_docker_service,node_discovery,node_logs_stream toneMint
class node_uptime_checker,node_notifications,node_push_monitors,node_retention,node_metrics_collector toneRose
class node_database,node_services_repo,node_uptime_repo,node_backup_repo,node_metrics_repo,node_operator,node_public_visitor,node_docker_daemon,node_monitored_targets,node_alert_channels toneIndigo
```

## Components

### Web Dashboard

- [Web App](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/App.tsx): `src/Corvus.Web/src/App.tsx`
- [Service Management](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Services/index.tsx): `src/Corvus.Web/src/pages/Services/index.tsx`
- [Uptime Console](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Uptime/index.tsx): `src/Corvus.Web/src/pages/Uptime/index.tsx`
- [Dashboard](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Dashboard/index.tsx): `src/Corvus.Web/src/pages/Dashboard/index.tsx`
- [Container Console](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Containers/index.tsx): `src/Corvus.Web/src/pages/Containers/index.tsx`
- [System Metrics](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/SystemMetrics/index.tsx): `src/Corvus.Web/src/pages/SystemMetrics/index.tsx`
- [Settings](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/Settings/index.tsx): `src/Corvus.Web/src/pages/Settings/index.tsx`
- [Public Status](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Web/src/pages/PublicStatus/index.tsx): `src/Corvus.Web/src/pages/PublicStatus/index.tsx`

### API and Access

- [API Host](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Program.cs): `src/Corvus.Api/Program.cs`
- [Service API](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/ServicesEndpoints.cs): `src/Corvus.Api/Endpoints/ServicesEndpoints.cs`
- [Auth API](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/AuthEndpoints.cs): `src/Corvus.Api/Endpoints/AuthEndpoints.cs`
- [Container API](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/ContainersEndpoints.cs): `src/Corvus.Api/Endpoints/ContainersEndpoints.cs`
- [Uptime API](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/UptimeEndpoints.cs): `src/Corvus.Api/Endpoints/UptimeEndpoints.cs`
- [Status API](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/StatusPageEndpoints.cs): `src/Corvus.Api/Endpoints/StatusPageEndpoints.cs`
- [Backup API](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/BackupEndpoints.cs): `src/Corvus.Api/Endpoints/BackupEndpoints.cs`
- [Incident API](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/IncidentEndpoints.cs): `src/Corvus.Api/Endpoints/IncidentEndpoints.cs`

### Service Operations

- [Docker Integration](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Services/DockerService.cs): `src/Corvus.Api/Services/DockerService.cs`
- [Container Discovery](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/ContainerDiscoveryService.cs): `src/Corvus.Api/BackgroundServices/ContainerDiscoveryService.cs`
- [Live Log Stream](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/StreamEndpoints.cs): `src/Corvus.Api/Endpoints/StreamEndpoints.cs`

### Monitoring and Alerts

- [Health Checker](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/UptimeCheckerService.cs): `src/Corvus.Api/BackgroundServices/UptimeCheckerService.cs`
- [Notification Delivery](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Services/NotificationService.cs): `src/Corvus.Api/Services/NotificationService.cs`
- [Push Monitors](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Endpoints/PushEndpoints.cs): `src/Corvus.Api/Endpoints/PushEndpoints.cs`
- [Retention Cleanup](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/RetentionCleanupService.cs): `src/Corvus.Api/BackgroundServices/RetentionCleanupService.cs`
- [Metrics Collector](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/BackgroundServices/SystemMetricsCollector.cs): `src/Corvus.Api/BackgroundServices/SystemMetricsCollector.cs`

### Persistence

- [SQLite Database](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/DbConnectionFactory.cs): `src/Corvus.Api/Data/DbConnectionFactory.cs`
- [Services Repository](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/ServicesRepository.cs): `src/Corvus.Api/Data/ServicesRepository.cs`
- [Uptime Repository](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/UptimeRepository.cs): `src/Corvus.Api/Data/UptimeRepository.cs`
- [Backup Repository](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/BackupRepository.cs): `src/Corvus.Api/Data/BackupRepository.cs`
- [Metrics Repository](https://github.com/brhnshn/corvus/blob/main/src/Corvus.Api/Data/MetricsRepository.cs): `src/Corvus.Api/Data/MetricsRepository.cs`

### Other components

- **Operator**
- **Status Visitor**
- **Docker Engine**
- **Monitored Targets**
- **Alert Channels**

## Connections

- Operator → Web App: uses
- Status Visitor → Public Status: views
- Web App → Service Management: navigates
- Web App → Uptime Console: navigates
- Web App → Dashboard: navigates
- Web App → Container Console: navigates
- Web App → System Metrics: navigates
- Web App → Settings: navigates
- Service Management → Service API: requests
- Uptime Console → Uptime API: requests
- Container Console → Container API: requests
- Public Status → Status API: requests
- API Host → Service API: maps
- API Host → Auth API: maps
- API Host → Container API: maps
- API Host → Uptime API: maps
- API Host → Status API: maps
- API Host → Incident API: maps
- API Host → Backup API: maps
- API Host → Push Monitors: maps
- API Host → Container Discovery: hosts
- API Host → Health Checker: hosts
- API Host → Metrics Collector: hosts
- API Host → Retention Cleanup: hosts
- Service API → Services Repository: reads/writes
- Container Discovery → Docker Integration: discovers
- Container Discovery → Services Repository: syncs
- Docker Integration → Docker Engine: controls
- Container API → Docker Integration: controls
- Live Log Stream → Docker Integration: streams logs
- Health Checker → Services Repository: loads services
- Health Checker → Monitored Targets: probes
- Health Checker → Uptime Repository: records checks
- Health Checker → Notification Delivery: dispatches alerts
- Notification Delivery → Alert Channels: sends alerts
- Push Monitors → Notification Delivery: dispatches alerts
- Metrics Collector → Metrics Repository: records metrics
- Retention Cleanup → SQLite Database: prunes data
- Services Repository → SQLite Database: reads/writes
- Uptime Repository → SQLite Database: reads/writes
- Metrics Repository → SQLite Database: reads/writes
- Backup API → Backup Repository: manages backups
- Backup Repository → SQLite Database: snapshots
