# volpan28/nebo architecture

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

- Interactive diagram: https://gitdiagram.com/volpan28/nebo
- Repository: https://github.com/volpan28/nebo

## Overview

AstroMonitor is an astronomy observation and sky-visualization application with a React client and ASP.NET API. Users can explore sky objects, query catalogs and visibility, manage watchlists, authenticate, and export visibility reports. The sampled handlers show SQL-backed catalog reads, coordinate calculations, and report generation; the tree documents additional asteroid and import capabilities. Client-to-endpoint wiring and several unsampled handlers are inferred only at the subsystem level, so uncertain internal calls are omitted.

Main entry points: [`AstroMonitor.Api/Program.cs`](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Program.cs) (HTTP host), [`AstroMonitor.Persistence/Connections/SqlConnectionFactory.cs`](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Persistence/Connections/SqlConnectionFactory.cs) (SQL connection factory), [`AstroMonitor.Client/src/App.tsx`](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/App.tsx) (Sky interface), [`AstroMonitor.Application/Features/Reports/Queries`](https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Reports/Queries) (Visibility reports)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Sky client"]
  node_web["Sky interface<br/>[App.tsx]"]
  node_skyview["Sky visualization<br/>[SkyCanvas.tsx]"]
  node_clientpanels["Search and controls<br/>[SearchPanel.tsx]"]
  node_reportsui["Report export UI<br/>[ExportPanel.tsx]"]
end

subgraph group_api["API surface"]
  node_apiapp["HTTP host<br/>[Program.cs]"]
  node_starsapi["Star endpoints<br/>[StarController.cs]"]
  node_skyapi["Sky map endpoint"]
  node_asteroidsapi["Asteroid endpoints"]
  node_reportsapi["Report endpoint"]
  node_authapi["Authentication endpoints"]
  node_profileapi["Profile endpoint"]
  node_watchapi["Watchlist endpoints"]
end

subgraph group_application["Application workflows"]
  node_stars["Star catalog queries<br/>[Queries]"]
  node_skymap["Sky map calculation"]
  node_asteroids["Asteroid queries and sync<br/>[Asteroids]"]
  node_reports["Visibility reports<br/>[Queries]"]
  node_auth["User authentication<br/>[Auth]"]
  node_profile["Profile lookup"]
  node_watchlist["Watchlist operations<br/>[Watchlist]"]
  node_starimport["Star import<br/>[ImportStars]"]
end

subgraph group_services["Domain services"]
  node_math["Astronomy calculations"]
  node_reportgen["File generation"]
  node_usersvc["Identity service"]
  node_jwt["JWT generation"]
end

subgraph group_data["Persistence"]
  node_database[("Application database<br/>[AMDbContext.cs]")]
  node_sqlfactory["SQL connection factory"]
end

node_user(("Observer"))
node_nasa["NASA NEO service"]

node_user -->|"uses"| node_web
node_web -->|"renders"| node_skyview
node_web -->|"presents"| node_clientpanels
node_web -->|"presents"| node_reportsui
node_web -->|"sends requests"| node_apiapp
node_apiapp -->|"routes"| node_starsapi
node_apiapp -->|"routes"| node_skyapi
node_apiapp -->|"routes"| node_asteroidsapi
node_apiapp -->|"routes"| node_reportsapi
node_apiapp -->|"routes"| node_authapi
node_apiapp -->|"routes"| node_profileapi
node_apiapp -->|"routes"| node_watchapi
node_starsapi -->|"dispatches"| node_stars
node_skyapi -->|"dispatches"| node_skymap
node_asteroidsapi -->|"dispatches"| node_asteroids
node_reportsapi -->|"dispatches"| node_reports
node_authapi -->|"dispatches"| node_auth
node_profileapi -->|"dispatches"| node_profile
node_watchapi -->|"dispatches"| node_watchlist
node_stars -->|"queries through"| node_sqlfactory
node_skymap -->|"queries through"| node_sqlfactory
node_skymap -->|"calculates coordinates"| node_math
node_reports -->|"queries through"| node_sqlfactory
node_reports -->|"calculates visibility"| node_math
node_reports -->|"generates files"| node_reportgen
node_profile -->|"queries through"| node_sqlfactory
node_watchlist -->|"queries through"| node_sqlfactory
node_auth -->|"manages accounts"| node_usersvc
node_auth -->|"creates tokens"| node_jwt
node_starimport -->|"imports into"| node_database
node_asteroids -.->|"retrieves asteroid data"| node_nasa
node_sqlfactory -->|"connects to"| node_database

click node_web "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/App.tsx"
click node_skyview "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/components/SkyCanvas.tsx"
click node_clientpanels "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/components/SearchPanel.tsx"
click node_reportsui "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/components/ExportPanel.tsx"
click node_apiapp "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Program.cs"
click node_starsapi "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/StarController.cs"
click node_skyapi "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/SkyMapController.cs"
click node_asteroidsapi "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/AsteroidsController.cs"
click node_reportsapi "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/ReportController.cs"
click node_authapi "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/AuthenticationController.cs"
click node_profileapi "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/GetUserProfileController.cs"
click node_watchapi "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/WatchlistController.cs"
click node_stars "https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Stars/Queries"
click node_skymap "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Application/Features/SkyMap/Queries/Get/GetSkyMapQueryHandler.cs"
click node_asteroids "https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Asteroids"
click node_reports "https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Reports/Queries"
click node_auth "https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Auth"
click node_profile "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Application/Features/Auth/Queries/GetProfileQueryHandler.cs"
click node_watchlist "https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Watchlist"
click node_starimport "https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Imports/ImportStars"
click node_math "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Infrastructure/Services/AstronomyMathService.cs"
click node_reportgen "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Infrastructure/Services/ReportGeneratorService.cs"
click node_usersvc "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Infrastructure/Services/UserManagerService.cs"
click node_jwt "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Infrastructure/Services/JwtTokenGenerator.cs"
click node_database "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Persistence/Context/AMDbContext.cs"
click node_sqlfactory "https://github.com/volpan28/nebo/blob/main/AstroMonitor.Persistence/Connections/SqlConnectionFactory.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,node_skyview,node_clientpanels,node_reportsui toneBlue
class node_apiapp,node_starsapi,node_skyapi,node_asteroidsapi,node_reportsapi,node_authapi,node_profileapi,node_watchapi toneAmber
class node_stars,node_skymap,node_asteroids,node_reports,node_auth,node_profile,node_watchlist,node_starimport,node_user toneMint
class node_math,node_reportgen,node_usersvc,node_jwt toneRose
class node_database,node_sqlfactory,node_nasa toneIndigo
```

## Components

### Sky client

- [Sky interface](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/App.tsx): `AstroMonitor.Client/src/App.tsx`
- [Sky visualization](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/components/SkyCanvas.tsx): `AstroMonitor.Client/src/components/SkyCanvas.tsx`
- [Search and controls](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/components/SearchPanel.tsx): `AstroMonitor.Client/src/components/SearchPanel.tsx`
- [Report export UI](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Client/src/components/ExportPanel.tsx): `AstroMonitor.Client/src/components/ExportPanel.tsx`

### API surface

- [HTTP host](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Program.cs): `AstroMonitor.Api/Program.cs`
- [Star endpoints](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/StarController.cs): `AstroMonitor.Api/Controllers/StarController.cs`
- [Sky map endpoint](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/SkyMapController.cs): `AstroMonitor.Api/Controllers/SkyMapController.cs`
- [Asteroid endpoints](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/AsteroidsController.cs): `AstroMonitor.Api/Controllers/AsteroidsController.cs`
- [Report endpoint](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/ReportController.cs): `AstroMonitor.Api/Controllers/ReportController.cs`
- [Authentication endpoints](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/AuthenticationController.cs): `AstroMonitor.Api/Controllers/AuthenticationController.cs`
- [Profile endpoint](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/GetUserProfileController.cs): `AstroMonitor.Api/Controllers/GetUserProfileController.cs`
- [Watchlist endpoints](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Api/Controllers/WatchlistController.cs): `AstroMonitor.Api/Controllers/WatchlistController.cs`

### Application workflows

- [Star catalog queries](https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Stars/Queries): `AstroMonitor.Application/Features/Stars/Queries`
- [Sky map calculation](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Application/Features/SkyMap/Queries/Get/GetSkyMapQueryHandler.cs): `AstroMonitor.Application/Features/SkyMap/Queries/Get/GetSkyMapQueryHandler.cs`
- [Asteroid queries and sync](https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Asteroids): `AstroMonitor.Application/Features/Asteroids`
- [Visibility reports](https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Reports/Queries): `AstroMonitor.Application/Features/Reports/Queries`
- [User authentication](https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Auth): `AstroMonitor.Application/Features/Auth`
- [Profile lookup](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Application/Features/Auth/Queries/GetProfileQueryHandler.cs): `AstroMonitor.Application/Features/Auth/Queries/GetProfileQueryHandler.cs`
- [Watchlist operations](https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Watchlist): `AstroMonitor.Application/Features/Watchlist`
- [Star import](https://github.com/volpan28/nebo/tree/main/AstroMonitor.Application/Features/Imports/ImportStars): `AstroMonitor.Application/Features/Imports/ImportStars`

### Domain services

- [Astronomy calculations](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Infrastructure/Services/AstronomyMathService.cs): `AstroMonitor.Infrastructure/Services/AstronomyMathService.cs`
- [File generation](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Infrastructure/Services/ReportGeneratorService.cs): `AstroMonitor.Infrastructure/Services/ReportGeneratorService.cs`
- [Identity service](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Infrastructure/Services/UserManagerService.cs): `AstroMonitor.Infrastructure/Services/UserManagerService.cs`
- [JWT generation](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Infrastructure/Services/JwtTokenGenerator.cs): `AstroMonitor.Infrastructure/Services/JwtTokenGenerator.cs`

### Persistence

- [Application database](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Persistence/Context/AMDbContext.cs): `AstroMonitor.Persistence/Context/AMDbContext.cs`
- [SQL connection factory](https://github.com/volpan28/nebo/blob/main/AstroMonitor.Persistence/Connections/SqlConnectionFactory.cs): `AstroMonitor.Persistence/Connections/SqlConnectionFactory.cs`

### Other components

- **Observer**
- **NASA NEO service**

## Connections

- Observer → Sky interface: uses
- Sky interface → Sky visualization: renders
- Sky interface → Search and controls: presents
- Sky interface → Report export UI: presents
- Sky interface → HTTP host: sends requests
- HTTP host → Star endpoints: routes
- HTTP host → Sky map endpoint: routes
- HTTP host → Asteroid endpoints: routes
- HTTP host → Report endpoint: routes
- HTTP host → Authentication endpoints: routes
- HTTP host → Profile endpoint: routes
- HTTP host → Watchlist endpoints: routes
- Star endpoints → Star catalog queries: dispatches
- Sky map endpoint → Sky map calculation: dispatches
- Asteroid endpoints → Asteroid queries and sync: dispatches
- Report endpoint → Visibility reports: dispatches
- Authentication endpoints → User authentication: dispatches
- Profile endpoint → Profile lookup: dispatches
- Watchlist endpoints → Watchlist operations: dispatches
- Star catalog queries → SQL connection factory: queries through
- Sky map calculation → SQL connection factory: queries through
- Sky map calculation → Astronomy calculations: calculates coordinates
- Visibility reports → SQL connection factory: queries through
- Visibility reports → Astronomy calculations: calculates visibility
- Visibility reports → File generation: generates files
- Profile lookup → SQL connection factory: queries through
- Watchlist operations → SQL connection factory: queries through
- User authentication → Identity service: manages accounts
- User authentication → JWT generation: creates tokens
- Star import → Application database: imports into
- Asteroid queries and sync → NASA NEO service: retrieves asteroid data
- SQL connection factory → Application database: connects to
