# junaidazizkhan/nat_glof_monitor architecture

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

- Interactive diagram: https://gitdiagram.com/junaidazizkhan/nat_glof_monitor
- Repository: https://github.com/junaidazizkhan/nat_glof_monitor

## Overview

GLOF Monitor is a web portal for glacial-lake inventories, hazard assessment, monitoring, and related glacier analytics. Users sign in, explore lake and glacier information, and can run extraction or assessment workflows; alerts and Ask J. provide monitoring and explanatory capabilities. The graph preserves the documented product branches and the sampled pipeline and susceptibility stages. Several endpoint relationships are supported by the source index; unsampled subsystem wiring is omitted rather than inferred.

Main entry points: [`backend/app/api/v1/router.py`](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/router.py) (API router), [`backend/app/api/v1/endpoints/criteria.py`](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/criteria.py) (Criteria assessment), [`backend/app/api/v1/endpoints/pipeline.py`](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/pipeline.py) (Extraction pipeline), [`backend/app/tasks/pipeline_tasks.py`](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/tasks/pipeline_tasks.py) (Pipeline worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Portal and API"]
  node_frontend["Web portal<br/>[App.tsx]"]
  node_api["FastAPI app<br/>[main.py]"]
  node_router["API router<br/>[router.py]"]
  node_assistant_api["Ask J. API<br/>[ai.py]"]
  node_assistant_engine["Assistant engine<br/>[engine.py]"]
end

subgraph group_lake["Lake Risk"]
  node_lake_api["Lake inventory<br/>[lakes.py]"]
  node_criteria_api["Criteria assessment<br/>[criteria.py]"]
  node_criteria_engine["GLOF criteria engine"]
  node_susceptibility_api["Susceptibility maps<br/>[susceptibility.py]"]
  node_risk_bands["Susceptibility bands"]
  node_alerts["Alerts<br/>[alerts.py]"]
end

subgraph group_pipeline["Satellite Pipeline"]
  node_pipeline_api["Extraction pipeline<br/>[pipeline.py]"]
  node_pipeline_worker["Pipeline worker<br/>[pipeline_tasks.py]"]
  node_pipeline_state[("Live run state<br/>[pipeline_state.py]")]
  node_pipeline_history[("Run history")]
end

subgraph group_glacier["Glacier Analytics"]
  node_glacier_api["Glacier analytics"]
  node_glacier_tasks["Glacier jobs<br/>[glacier_tasks.py]"]
end

subgraph group_platform["Platform Services"]
  node_database[("Postgres models<br/>[models.py]")]
  node_db_access["Database sessions<br/>[database.py]"]
  node_auth["Authentication<br/>[security.py]"]
  node_celery["Celery workers<br/>[celery_app.py]"]
end

node_user(("Portal user"))

node_user -->|"uses"| node_frontend
node_frontend -.->|"uses API"| node_api
node_api -->|"mounts routes"| node_router
node_router -->|"registers"| node_lake_api
node_router -->|"registers"| node_criteria_api
node_router -->|"registers"| node_susceptibility_api
node_router -->|"registers"| node_pipeline_api
node_router -->|"registers"| node_glacier_api
node_router -->|"registers"| node_alerts
node_router -->|"registers"| node_assistant_api
node_criteria_api -->|"assesses lakes"| node_criteria_engine
node_susceptibility_api -->|"uses assessment"| node_criteria_engine
node_criteria_engine -->|"uses bands"| node_risk_bands
node_pipeline_api -->|"enqueues work"| node_pipeline_worker
node_pipeline_worker -->|"updates state"| node_pipeline_state
node_pipeline_worker -->|"persists progress"| node_pipeline_history
node_glacier_api -->|"uses jobs"| node_glacier_tasks
node_assistant_api -.->|"streams answers"| node_assistant_engine
node_criteria_api -->|"reads and writes"| node_database
node_criteria_api -->|"checks access"| node_auth
node_database -.->|"uses sessions"| node_db_access
node_pipeline_api -->|"dispatches task"| node_celery

click node_frontend "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/frontend/src/App.tsx"
click node_api "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/main.py"
click node_router "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/router.py"
click node_lake_api "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/lakes.py"
click node_criteria_api "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/criteria.py"
click node_criteria_engine "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/glof_criteria_engine.py"
click node_susceptibility_api "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/susceptibility.py"
click node_risk_bands "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/susceptibility_bands.py"
click node_pipeline_api "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/pipeline.py"
click node_pipeline_worker "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/tasks/pipeline_tasks.py"
click node_pipeline_state "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/pipeline_state.py"
click node_pipeline_history "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/pipeline_history.py"
click node_glacier_api "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/glacier_analytics.py"
click node_glacier_tasks "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/tasks/glacier_tasks.py"
click node_alerts "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/alerts.py"
click node_assistant_api "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/ai.py"
click node_assistant_engine "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/portal_ai/engine.py"
click node_database "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/models/models.py"
click node_db_access "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/core/database.py"
click node_auth "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/core/security.py"
click node_celery "https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/tasks/celery_app.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_frontend,node_api,node_router,node_assistant_api,node_assistant_engine,node_user toneBlue
class node_lake_api,node_criteria_api,node_criteria_engine,node_susceptibility_api,node_risk_bands,node_alerts toneAmber
class node_pipeline_api,node_pipeline_worker,node_pipeline_state,node_pipeline_history toneMint
class node_glacier_api,node_glacier_tasks toneRose
class node_database,node_db_access,node_auth,node_celery toneIndigo
```

## Components

### Portal and API

- [Web portal](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [FastAPI app](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/main.py): `backend/main.py`
- [API router](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/router.py): `backend/app/api/v1/router.py`
- [Ask J. API](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/ai.py): `backend/app/api/v1/endpoints/ai.py`
- [Assistant engine](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/portal_ai/engine.py): `backend/app/services/portal_ai/engine.py`

### Lake Risk

- [Lake inventory](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/lakes.py): `backend/app/api/v1/endpoints/lakes.py`
- [Criteria assessment](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/criteria.py): `backend/app/api/v1/endpoints/criteria.py`
- [GLOF criteria engine](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/glof_criteria_engine.py): `backend/app/services/glof_criteria_engine.py`
- [Susceptibility maps](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/susceptibility.py): `backend/app/api/v1/endpoints/susceptibility.py`
- [Susceptibility bands](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/susceptibility_bands.py): `backend/app/services/susceptibility_bands.py`
- [Alerts](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/alerts.py): `backend/app/api/v1/endpoints/alerts.py`

### Satellite Pipeline

- [Extraction pipeline](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/pipeline.py): `backend/app/api/v1/endpoints/pipeline.py`
- [Pipeline worker](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/tasks/pipeline_tasks.py): `backend/app/tasks/pipeline_tasks.py`
- [Live run state](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/pipeline_state.py): `backend/app/services/pipeline_state.py`
- [Run history](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/services/pipeline_history.py): `backend/app/services/pipeline_history.py`

### Glacier Analytics

- [Glacier analytics](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/api/v1/endpoints/glacier_analytics.py): `backend/app/api/v1/endpoints/glacier_analytics.py`
- [Glacier jobs](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/tasks/glacier_tasks.py): `backend/app/tasks/glacier_tasks.py`

### Platform Services

- [Postgres models](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/models/models.py): `backend/app/models/models.py`
- [Database sessions](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/core/database.py): `backend/app/core/database.py`
- [Authentication](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/core/security.py): `backend/app/core/security.py`
- [Celery workers](https://github.com/junaidazizkhan/nat_glof_monitor/blob/main/backend/app/tasks/celery_app.py): `backend/app/tasks/celery_app.py`

### Other components

- **Portal user**

## Connections

- Portal user → Web portal: uses (evidence: `README.md`)
- Web portal → FastAPI app: uses API
- FastAPI app → API router: mounts routes (evidence: `backend/main.py`)
- API router → Lake inventory: registers (evidence: `backend/app/api/v1/router.py`)
- API router → Criteria assessment: registers (evidence: `backend/app/api/v1/router.py`)
- API router → Susceptibility maps: registers (evidence: `backend/app/api/v1/router.py`)
- API router → Extraction pipeline: registers (evidence: `backend/app/api/v1/router.py`)
- API router → Glacier analytics: registers (evidence: `backend/app/api/v1/router.py`)
- API router → Alerts: registers (evidence: `backend/app/api/v1/router.py`)
- API router → Ask J. API: registers (evidence: `backend/app/api/v1/router.py`)
- Criteria assessment → GLOF criteria engine: assesses lakes (evidence: `backend/app/api/v1/endpoints/criteria.py`)
- Susceptibility maps → GLOF criteria engine: uses assessment (evidence: `backend/app/api/v1/endpoints/susceptibility.py`)
- GLOF criteria engine → Susceptibility bands: uses bands (evidence: `backend/app/services/glof_criteria_engine.py`)
- Extraction pipeline → Pipeline worker: enqueues work (evidence: `backend/app/api/v1/endpoints/pipeline.py`)
- Pipeline worker → Live run state: updates state (evidence: `backend/app/tasks/pipeline_tasks.py`)
- Pipeline worker → Run history: persists progress (evidence: `backend/app/tasks/pipeline_tasks.py`)
- Glacier analytics → Glacier jobs: uses jobs (evidence: `backend/app/api/v1/endpoints/glacier_analytics.py`)
- Ask J. API → Assistant engine: streams answers (evidence: `backend/app/services/portal_ai/engine.py`)
- Criteria assessment → Postgres models: reads and writes (evidence: `backend/app/api/v1/endpoints/criteria.py`)
- Criteria assessment → Authentication: checks access (evidence: `backend/app/api/v1/endpoints/criteria.py`)
- Postgres models → Database sessions: uses sessions (evidence: `backend/app/models/models.py`)
- Extraction pipeline → Celery workers: dispatches task (evidence: `backend/app/api/v1/endpoints/pipeline.py`)
