# steveandjeff999/obsidianscout-java architecture

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

- Interactive diagram: https://gitdiagram.com/steveandjeff999/obsidianscout-java
- Repository: https://github.com/steveandjeff999/obsidianscout-java

## Overview

Obsidianscout is a web-based robotics-team scouting and event-analysis application. The principal workflow is scouts entering match, pit, and qualitative observations; the server persists scouting data, which teams can use for analytics, prediction, and alliance decisions. The repository also contains authentication, event-data synchronization, collaboration, and operational administration capabilities. The README only points to external documentation, so subsystem links beyond the sampled source are limited to the application entry point and clearly evidenced interactions.

Main entry points: [`src/main/kotlin/com/obsidianscout/db/DatabaseFactory.kt`](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/DatabaseFactory.kt) (Application database), [`src/main/kotlin/com/obsidianscout/routes/Routes.kt`](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/routes/Routes.kt) (HTTP routes), [`src/main/kotlin/com/obsidianscout/App.kt`](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/App.kt) (Server startup), [`src/main/kotlin/com/obsidianscout/integrations/IntegrationService.kt`](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/integrations/IntegrationService.kt) (Event data sync)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web client"]
  node_webclient["Browser client"]
  node_scoutui["Scouting screens<br/>[scout.js]"]
  node_analyticsui["Analytics screens<br/>[analytics.js]"]
  node_authui["Login client<br/>[login.js]"]
end

subgraph group_scouting["Scouting and analysis"]
  node_scoutingservice["Scouting records<br/>[ScoutingService.kt]"]
  node_pitservice["Pit scouting"]
  node_qualservice["Qualitative scouting"]
  node_assignments["Scouting assignments"]
  node_analytics["Scouting analytics"]
  node_predictor["Event predictor"]
  node_alliances["Alliance selection"]
end

subgraph group_platform["Server platform"]
  node_routes["HTTP routes<br/>[Routes.kt]"]
  node_mobileroutes["Mobile routes<br/>[MobileRoutes.kt]"]
  node_app["Server startup<br/>[App.kt]"]
  node_auth["Authentication<br/>[AuthService.kt]"]
end

subgraph group_data["Persistence and sync"]
  node_database[("Application database<br/>[DatabaseFactory.kt]")]
  node_tables["Domain tables<br/>[Tables.kt]"]
  node_integration["Event data sync"]
  node_backup["Backup and snapshots<br/>[BackupService.kt]"]
  node_snapshot["Database snapshots<br/>[SnapshotService.kt]"]
end

subgraph group_operations["Administration"]
  node_cluster["Cluster management"]
  node_storageadmin["Storage administration"]
end

node_scouts(("Scouts and team users"))
node_tba(("The Blue Alliance"))

node_scouts -->|"use"| node_webclient
node_webclient -->|"HTTP requests"| node_routes
node_app -->|"registers"| node_routes
node_app -->|"registers"| node_mobileroutes
node_authui -->|"auth requests"| node_routes
node_routes -->|"authenticate"| node_auth
node_scoutui -->|"submit scouting"| node_routes
node_analyticsui -->|"request analysis"| node_routes
node_scoutingservice -->|"read and write"| node_database
node_pitservice -->|"read and write"| node_database
node_qualservice -->|"read and write"| node_database
node_assignments -->|"read and write"| node_database
node_analytics -->|"read scouting data"| node_database
node_predictor -->|"read event data"| node_database
node_alliances -->|"read and write"| node_database
node_database -->|"uses schema"| node_tables
node_integration -.->|"fetch event data"| node_tba
node_integration -->|"cache synced data"| node_database
node_backup -->|"export and restore"| node_database
node_snapshot -->|"copy database"| node_database
node_storageadmin -->|"inspect and prune"| node_database
node_cluster -->|"inspect cluster"| node_database

click node_webclient "https://github.com/steveandjeff999/obsidianscout-java/tree/master/src/main/resources/static/js"
click node_scoutui "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/resources/static/js/scout.js"
click node_analyticsui "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/resources/static/js/analytics.js"
click node_authui "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/resources/static/js/login.js"
click node_routes "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/routes/Routes.kt"
click node_mobileroutes "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/routes/MobileRoutes.kt"
click node_app "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/App.kt"
click node_auth "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/auth/AuthService.kt"
click node_scoutingservice "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/ScoutingService.kt"
click node_pitservice "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/PitScoutingService.kt"
click node_qualservice "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/QualitativeScoutingService.kt"
click node_assignments "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/ScoutingAssignmentService.kt"
click node_analytics "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/analytics/AnalyticsService.kt"
click node_predictor "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/analytics/PredictorService.kt"
click node_alliances "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/AllianceSelectionService.kt"
click node_database "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/DatabaseFactory.kt"
click node_tables "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/Tables.kt"
click node_integration "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/integrations/IntegrationService.kt"
click node_backup "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/BackupService.kt"
click node_snapshot "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/SnapshotService.kt"
click node_cluster "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/admin/ClusterManagementService.kt"
click node_storageadmin "https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/admin/StorageManagementService.kt"

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_webclient,node_scoutui,node_analyticsui,node_authui,node_scouts toneBlue
class node_scoutingservice,node_pitservice,node_qualservice,node_assignments,node_analytics,node_predictor,node_alliances toneAmber
class node_routes,node_mobileroutes,node_app,node_auth toneMint
class node_database,node_tables,node_integration,node_backup,node_snapshot toneRose
class node_cluster,node_storageadmin,node_tba toneIndigo
```

## Components

### Web client

- [Browser client](https://github.com/steveandjeff999/obsidianscout-java/tree/master/src/main/resources/static/js): `src/main/resources/static/js`
- [Scouting screens](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/resources/static/js/scout.js): `src/main/resources/static/js/scout.js`
- [Analytics screens](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/resources/static/js/analytics.js): `src/main/resources/static/js/analytics.js`
- [Login client](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/resources/static/js/login.js): `src/main/resources/static/js/login.js`

### Scouting and analysis

- [Scouting records](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/ScoutingService.kt): `src/main/kotlin/com/obsidianscout/scouting/ScoutingService.kt`
- [Pit scouting](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/PitScoutingService.kt): `src/main/kotlin/com/obsidianscout/scouting/PitScoutingService.kt`
- [Qualitative scouting](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/QualitativeScoutingService.kt): `src/main/kotlin/com/obsidianscout/scouting/QualitativeScoutingService.kt`
- [Scouting assignments](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/ScoutingAssignmentService.kt): `src/main/kotlin/com/obsidianscout/scouting/ScoutingAssignmentService.kt`
- [Scouting analytics](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/analytics/AnalyticsService.kt): `src/main/kotlin/com/obsidianscout/analytics/AnalyticsService.kt`
- [Event predictor](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/analytics/PredictorService.kt): `src/main/kotlin/com/obsidianscout/analytics/PredictorService.kt`
- [Alliance selection](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/scouting/AllianceSelectionService.kt): `src/main/kotlin/com/obsidianscout/scouting/AllianceSelectionService.kt`

### Server platform

- [HTTP routes](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/routes/Routes.kt): `src/main/kotlin/com/obsidianscout/routes/Routes.kt`
- [Mobile routes](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/routes/MobileRoutes.kt): `src/main/kotlin/com/obsidianscout/routes/MobileRoutes.kt`
- [Server startup](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/App.kt): `src/main/kotlin/com/obsidianscout/App.kt`
- [Authentication](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/auth/AuthService.kt): `src/main/kotlin/com/obsidianscout/auth/AuthService.kt`

### Persistence and sync

- [Application database](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/DatabaseFactory.kt): `src/main/kotlin/com/obsidianscout/db/DatabaseFactory.kt`
- [Domain tables](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/Tables.kt): `src/main/kotlin/com/obsidianscout/db/Tables.kt`
- [Event data sync](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/integrations/IntegrationService.kt): `src/main/kotlin/com/obsidianscout/integrations/IntegrationService.kt`
- [Backup and snapshots](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/BackupService.kt): `src/main/kotlin/com/obsidianscout/db/BackupService.kt`
- [Database snapshots](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/db/SnapshotService.kt): `src/main/kotlin/com/obsidianscout/db/SnapshotService.kt`

### Administration

- [Cluster management](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/admin/ClusterManagementService.kt): `src/main/kotlin/com/obsidianscout/admin/ClusterManagementService.kt`
- [Storage administration](https://github.com/steveandjeff999/obsidianscout-java/blob/master/src/main/kotlin/com/obsidianscout/admin/StorageManagementService.kt): `src/main/kotlin/com/obsidianscout/admin/StorageManagementService.kt`

### Other components

- **Scouts and team users**
- **The Blue Alliance**

## Connections

- Scouts and team users → Browser client: use
- Browser client → HTTP routes: HTTP requests
- Server startup → HTTP routes: registers
- Server startup → Mobile routes: registers
- Login client → HTTP routes: auth requests
- HTTP routes → Authentication: authenticate
- Scouting screens → HTTP routes: submit scouting
- Analytics screens → HTTP routes: request analysis
- Scouting records → Application database: read and write
- Pit scouting → Application database: read and write
- Qualitative scouting → Application database: read and write
- Scouting assignments → Application database: read and write
- Scouting analytics → Application database: read scouting data
- Event predictor → Application database: read event data
- Alliance selection → Application database: read and write
- Application database → Domain tables: uses schema
- Event data sync → The Blue Alliance: fetch event data
- Event data sync → Application database: cache synced data
- Backup and snapshots → Application database: export and restore
- Database snapshots → Application database: copy database
- Storage administration → Application database: inspect and prune
- Cluster management → Application database: inspect cluster
