# clandestine2002/projectlens architecture

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

- Interactive diagram: https://gitdiagram.com/clandestine2002/projectlens
- Repository: https://github.com/clandestine2002/projectlens

## Overview

ProjectLens is a small interactive-server Blazor app with the standard Home, Counter, and Weather pages plus error handling. Its host registers Razor and Radzen services and maps the root component; a separate reconnect script handles circuit retry and resume behavior. The page and routing files are present in the tree, but their contents were not sampled, so their internal routing and interactions are not asserted. The graph focuses on the runtime components and links visible in the excerpts.

Main entry points: [`Components/Layout/ReconnectModal.razor.js`](https://github.com/clandestine2002/projectlens/blob/master/Components/Layout/ReconnectModal.razor.js) (Reconnect handlers), [`Program.cs`](https://github.com/clandestine2002/projectlens/blob/master/Program.cs) (Web host), [`Components/App.razor`](https://github.com/clandestine2002/projectlens/blob/master/Components/App.razor) (Root app), [`Components/Layout/ReconnectModal.razor`](https://github.com/clandestine2002/projectlens/blob/master/Components/Layout/ReconnectModal.razor) (Reconnect dialog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_hosting["Hosting"]
  node_host["Web host<br/>[Program.cs]"]
  node_app["Root app<br/>[App.razor]"]
end

subgraph group_ui["Application UI"]
  node_routes["Route outlet<br/>[Routes.razor]"]
  node_layout["Main layout<br/>[MainLayout.razor]"]
  node_home["Home page<br/>[Home.razor]"]
  node_counter["Counter page<br/>[Counter.razor]"]
  node_weather["Weather page<br/>[Weather.razor]"]
  node_error["Error page<br/>[Error.razor]"]
  node_notfound["Not-found page<br/>[NotFound.razor]"]
end

subgraph group_recovery["Connection Recovery"]
  node_reconnectui["Reconnect dialog"]
  node_reconnectjs["Reconnect handlers"]
end

node_radzen["Radzen services"]
node_blazor["Blazor runtime"]

node_host -->|"maps root"| node_app
node_host -->|"registers services"| node_radzen
node_reconnectjs -->|"controls dialog"| node_reconnectui
node_reconnectjs -->|"retries circuit"| node_blazor
node_reconnectjs -->|"resumes circuit"| node_blazor

click node_host "https://github.com/clandestine2002/projectlens/blob/master/Program.cs"
click node_app "https://github.com/clandestine2002/projectlens/blob/master/Components/App.razor"
click node_routes "https://github.com/clandestine2002/projectlens/blob/master/Components/Routes.razor"
click node_layout "https://github.com/clandestine2002/projectlens/blob/master/Components/Layout/MainLayout.razor"
click node_home "https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/Home.razor"
click node_counter "https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/Counter.razor"
click node_weather "https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/Weather.razor"
click node_error "https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/Error.razor"
click node_notfound "https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/NotFound.razor"
click node_reconnectui "https://github.com/clandestine2002/projectlens/blob/master/Components/Layout/ReconnectModal.razor"
click node_reconnectjs "https://github.com/clandestine2002/projectlens/blob/master/Components/Layout/ReconnectModal.razor.js"

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_host,node_app toneBlue
class node_routes,node_layout,node_home,node_counter,node_weather,node_error,node_notfound toneAmber
class node_reconnectui,node_reconnectjs toneMint
class node_radzen,node_blazor toneIndigo
```

## Components

### Hosting

- [Web host](https://github.com/clandestine2002/projectlens/blob/master/Program.cs): `Program.cs`
- [Root app](https://github.com/clandestine2002/projectlens/blob/master/Components/App.razor): `Components/App.razor`

### Application UI

- [Route outlet](https://github.com/clandestine2002/projectlens/blob/master/Components/Routes.razor): `Components/Routes.razor`
- [Main layout](https://github.com/clandestine2002/projectlens/blob/master/Components/Layout/MainLayout.razor): `Components/Layout/MainLayout.razor`
- [Home page](https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/Home.razor): `Components/Pages/Home.razor`
- [Counter page](https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/Counter.razor): `Components/Pages/Counter.razor`
- [Weather page](https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/Weather.razor): `Components/Pages/Weather.razor`
- [Error page](https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/Error.razor): `Components/Pages/Error.razor`
- [Not-found page](https://github.com/clandestine2002/projectlens/blob/master/Components/Pages/NotFound.razor): `Components/Pages/NotFound.razor`

### Connection Recovery

- [Reconnect dialog](https://github.com/clandestine2002/projectlens/blob/master/Components/Layout/ReconnectModal.razor): `Components/Layout/ReconnectModal.razor`
- [Reconnect handlers](https://github.com/clandestine2002/projectlens/blob/master/Components/Layout/ReconnectModal.razor.js): `Components/Layout/ReconnectModal.razor.js`

### Other components

- **Radzen services**
- **Blazor runtime**

## Connections

- Web host → Root app: maps root (evidence: `Program.cs`)
- Web host → Radzen services: registers services (evidence: `Program.cs`)
- Reconnect handlers → Reconnect dialog: controls dialog (evidence: `Components/Layout/ReconnectModal.razor.js`)
- Reconnect handlers → Blazor runtime: retries circuit (evidence: `Components/Layout/ReconnectModal.razor.js`)
- Reconnect handlers → Blazor runtime: resumes circuit (evidence: `Components/Layout/ReconnectModal.razor.js`)
