# matiasboldrini/azotadores-de-agentes- architecture

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

- Interactive diagram: https://gitdiagram.com/matiasboldrini/azotadores-de-agentes-
- Repository: https://github.com/matiasboldrini/azotadores-de-agentes-

## Overview

SELENARC is a lunar landing-site navigator for comparing illumination and Earth visibility across terrain positions, mast heights, and UTC windows, then searching for a constrained station configuration. The main workflow runs through the interactive app, hybrid science-window loading, analysis and visualization, and optional optimizer search. The repository also includes monthly fixed-site comparisons and local FastAPI science endpoints. Some frontend and backend relationships are documented or indexed but their implementations were not excerpted; those limits are reflected in the edges.

Main entry points: [`frontend/src/App.tsx`](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/App.tsx) (App orchestration), [`frontend/src/TerrainView.tsx`](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/TerrainView.tsx) (Terrain explorer), [`frontend/src/DesignerAnalysisPanels.tsx`](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/DesignerAnalysisPanels.tsx) (Analysis panels), [`frontend/src/lib/hybridScience.ts`](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/hybridScience.ts) (Hybrid science selector)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Navigator experience"]
  node_app["App orchestration<br/>[App.tsx]"]
  node_globe["Moon landing view<br/>[MoonLanding.tsx]"]
  node_terrain["Terrain explorer<br/>[TerrainView.tsx]"]
  node_position["Position picker<br/>[PositionPicker.tsx]"]
  node_date["Date window picker"]
  node_compare["Window comparison<br/>[MonthlyCompare.tsx]"]
  node_charts["Timeline charts<br/>[Charts.tsx]"]
  node_panels["Analysis panels"]
  node_results["Results and export<br/>[Results.tsx]"]
  node_story["Analysis narrative<br/>[story.ts]"]
  node_panorama["Mast panorama<br/>[MastPanorama.tsx]"]
  node_skydome["Sky dome<br/>[SkyDome.tsx]"]
end

subgraph group_analysis["Science and analysis"]
  node_window["Observation window hook"]
  node_hybrid["Hybrid science selector<br/>[hybridScience.ts]"]
  node_backendclient["Backend science client<br/>[backendScience.ts]"]
  node_ephemeris[("Cached ephemeris")]
  node_science["Analysis and optimizer<br/>[science.ts]"]
end

subgraph group_backend["Science backend"]
  node_api["Science API<br/>[api.py]"]
  node_engine["Terrain science engine<br/>[engine.py]"]
  node_horizons["Horizon calculations<br/>[horizons.py]"]
end

node_user(("Mission planner"))
node_backendservice["Configured API service"]

node_user -->|"uses"| node_app
node_app -->|"shows"| node_globe
node_app -->|"shows"| node_terrain
node_app -->|"selects positions"| node_position
node_app -->|"selects windows"| node_date
node_app -->|"opens comparison"| node_compare
node_app -->|"renders timelines"| node_charts
node_app -->|"renders analysis"| node_panels
node_app -->|"shows results"| node_results
node_app -.->|"loads windows"| node_window
node_window -->|"requests analysis"| node_hybrid
node_hybrid -->|"tries backend"| node_backendclient
node_hybrid -->|"falls back"| node_ephemeris
node_backendclient -.->|"calls endpoints"| node_backendservice
node_app -->|"uses metrics"| node_science
node_panels -->|"renders charts"| node_charts
node_panels -->|"reads analyses"| node_science
node_results -->|"builds narrative"| node_story
node_story -->|"uses optimizer"| node_science
node_terrain -->|"uses picker"| node_position
node_terrain -->|"renders sky"| node_skydome
node_terrain -.->|"uses panorama"| node_panorama
node_backendservice -.->|"serves requests"| node_api
node_api -->|"evaluates terrain"| node_engine

click node_app "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/App.tsx"
click node_globe "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/moon/MoonLanding.tsx"
click node_terrain "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/TerrainView.tsx"
click node_position "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/PositionPicker.tsx"
click node_date "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/DateWindowPicker.tsx"
click node_compare "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/MonthlyCompare.tsx"
click node_charts "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/Charts.tsx"
click node_panels "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/DesignerAnalysisPanels.tsx"
click node_results "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/Results.tsx"
click node_story "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/story.ts"
click node_window "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/useObservationWindow.ts"
click node_hybrid "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/hybridScience.ts"
click node_backendclient "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/backendScience.ts"
click node_ephemeris "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/observationEphemeris.ts"
click node_science "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/science.ts"
click node_panorama "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/MastPanorama.tsx"
click node_skydome "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/SkyDome.tsx"
click node_api "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/siteforge/api.py"
click node_engine "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/siteforge/engine.py"
click node_horizons "https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/siteforge/horizons.py"

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_app,node_globe,node_terrain,node_position,node_date,node_compare,node_charts,node_panels,node_results,node_story,node_panorama,node_skydome toneBlue
class node_window,node_hybrid,node_backendclient,node_ephemeris,node_science toneAmber
class node_api,node_engine,node_horizons,node_backendservice toneMint
class node_user toneIndigo
```

## Components

### Navigator experience

- [App orchestration](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Moon landing view](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/moon/MoonLanding.tsx): `frontend/src/moon/MoonLanding.tsx`
- [Terrain explorer](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/TerrainView.tsx): `frontend/src/TerrainView.tsx`
- [Position picker](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/PositionPicker.tsx): `frontend/src/PositionPicker.tsx`
- [Date window picker](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/DateWindowPicker.tsx): `frontend/src/DateWindowPicker.tsx`
- [Window comparison](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/MonthlyCompare.tsx): `frontend/src/MonthlyCompare.tsx`
- [Timeline charts](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/Charts.tsx): `frontend/src/Charts.tsx`
- [Analysis panels](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/DesignerAnalysisPanels.tsx): `frontend/src/DesignerAnalysisPanels.tsx`
- [Results and export](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/Results.tsx): `frontend/src/Results.tsx`
- [Analysis narrative](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/story.ts): `frontend/src/lib/story.ts`
- [Mast panorama](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/MastPanorama.tsx): `frontend/src/MastPanorama.tsx`
- [Sky dome](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/SkyDome.tsx): `frontend/src/SkyDome.tsx`

### Science and analysis

- [Observation window hook](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/useObservationWindow.ts): `frontend/src/useObservationWindow.ts`
- [Hybrid science selector](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/hybridScience.ts): `frontend/src/lib/hybridScience.ts`
- [Backend science client](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/backendScience.ts): `frontend/src/lib/backendScience.ts`
- [Cached ephemeris](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/observationEphemeris.ts): `frontend/src/lib/observationEphemeris.ts`
- [Analysis and optimizer](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/frontend/src/lib/science.ts): `frontend/src/lib/science.ts`

### Science backend

- [Science API](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/siteforge/api.py): `siteforge/api.py`
- [Terrain science engine](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/siteforge/engine.py): `siteforge/engine.py`
- [Horizon calculations](https://github.com/matiasboldrini/azotadores-de-agentes-/blob/main/siteforge/horizons.py): `siteforge/horizons.py`

### Other components

- **Mission planner**
- **Configured API service**

## Connections

- Mission planner → App orchestration: uses (evidence: `README.md`)
- App orchestration → Moon landing view: shows (evidence: `frontend/src/App.tsx`)
- App orchestration → Terrain explorer: shows (evidence: `frontend/src/App.tsx`)
- App orchestration → Position picker: selects positions (evidence: `frontend/src/App.tsx`)
- App orchestration → Date window picker: selects windows (evidence: `frontend/src/App.tsx`)
- App orchestration → Window comparison: opens comparison (evidence: `frontend/src/App.tsx`)
- App orchestration → Timeline charts: renders timelines (evidence: `frontend/src/App.tsx`)
- App orchestration → Analysis panels: renders analysis (evidence: `frontend/src/App.tsx`)
- App orchestration → Results and export: shows results (evidence: `frontend/src/App.tsx`)
- App orchestration → Observation window hook: loads windows (evidence: `frontend/src/App.tsx`)
- Observation window hook → Hybrid science selector: requests analysis (evidence: `frontend/src/useObservationWindow.ts`)
- Hybrid science selector → Backend science client: tries backend (evidence: `frontend/src/lib/hybridScience.ts`)
- Hybrid science selector → Cached ephemeris: falls back (evidence: `frontend/src/lib/hybridScience.ts`)
- Backend science client → Configured API service: calls endpoints
- App orchestration → Analysis and optimizer: uses metrics (evidence: `frontend/src/App.tsx`)
- Analysis panels → Timeline charts: renders charts (evidence: `frontend/src/DesignerAnalysisPanels.tsx`)
- Analysis panels → Analysis and optimizer: reads analyses (evidence: `frontend/src/DesignerAnalysisPanels.tsx`)
- Results and export → Analysis narrative: builds narrative (evidence: `frontend/src/Results.tsx`)
- Analysis narrative → Analysis and optimizer: uses optimizer (evidence: `frontend/src/lib/story.ts`)
- Terrain explorer → Position picker: uses picker (evidence: `frontend/src/TerrainView.tsx`)
- Terrain explorer → Sky dome: renders sky (evidence: `frontend/src/TerrainView.tsx`)
- Terrain explorer → Mast panorama: uses panorama
- Configured API service → Science API: serves requests
- Science API → Terrain science engine: evaluates terrain (evidence: `siteforge/api.py`)
