# peixotoh/web-gis-risk-app architecture

> Architecture diagram of the GitHub repository peixotoh/web-gis-risk-app, 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/peixotoh/web-gis-risk-app
- Repository: https://github.com/peixotoh/web-gis-risk-app

## Overview

This is a browser-based WebGIS for assessing natural-hazard risk to Swiss buildings. The user selects a hazard and area, loads or uploads building and hazard data, draws an analysis polygon, runs spatial and damage-risk calculations, then inspects maps, tables, graphs, and reports. The graph preserves the documented analysis methods and visualization capabilities, while grouping implementation into mapping/data, analysis, and presentation layers. Several module connections are documented only at product level; unsampled implementation details are not asserted.

Main entry points: [`src/js/app.js`](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/app.js) (Application workflow), [`src/js/map-init.js`](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/map-init.js) (Interactive map), [`src/js/analysis-visualization.js`](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/analysis-visualization.js) (Results visualization), [`src/js/spatial-analysis.js`](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/spatial-analysis.js) (Polygon analysis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mapping["Map and data"]
  node_map["Interactive map<br/>[map-init.js]"]
  node_buildings["Building data"]
  node_supabase["Building data access"]
  node_processing["Custom data processing<br/>[data-processing.js]"]
  node_boundaries["Swiss boundary data"]
  node_hazarddata["Hazard datasets"]
end

subgraph group_analysis["Risk analysis"]
  node_buildinginfo["Building attributes<br/>[buildings_info.js]"]
  node_vulnerability["Vulnerability curves<br/>[vulnerability.js]"]
  node_spatial["Polygon analysis"]
  node_risk["Risk calculations"]
end

subgraph group_results["Results and exports"]
  node_results["Results visualization"]
  node_tables["Data transformation<br/>[functions_2.js]"]
end

subgraph group_shared["Shared runtime"]
  node_app["Application workflow<br/>[app.js]"]
  node_legacy["Backup application<br/>[app_backup.js]"]
  node_controls["UI controls<br/>[ui-controls.js]"]
  node_globals["Shared state<br/>[globals.js]"]
end

node_user(("Analyst"))
node_external{{"GeoAdmin and Swiss data"}}

node_user -->|"uses"| node_app
node_app -->|"displays map"| node_map
node_app -->|"loads buildings"| node_buildings
node_external -->|"provides records"| node_buildings
node_user -->|"uploads data"| node_processing
node_user -->|"draws analysis area"| node_spatial
node_app -->|"runs analysis"| node_spatial
node_spatial -.->|"provides spatial inputs"| node_risk
node_risk -.->|"uses damage model"| node_vulnerability
node_buildinginfo -->|"provides classifications"| node_risk
node_user -->|"adjusts curves"| node_vulnerability
node_app -->|"shows results"| node_results
node_results -->|"presents tables"| node_tables
node_results -->|"exports reports"| node_user
node_supabase -.->|"supports loading"| node_buildings
node_hazarddata -.->|"supplies hazards"| node_map
node_boundaries -.->|"supplies boundaries"| node_map
node_controls -.->|"configures layers"| node_map
node_globals -.->|"shares state"| node_app

click node_app "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/app.js"
click node_legacy "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/app_backup.js"
click node_map "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/map-init.js"
click node_buildings "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/building-management.js"
click node_supabase "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/supabase-buildings.js"
click node_processing "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/data-processing.js"
click node_boundaries "https://github.com/peixotoh/web-gis-risk-app/blob/main/data/json/suisse_admin_lim.js"
click node_buildinginfo "https://github.com/peixotoh/web-gis-risk-app/blob/main/data/json/buildings_info.js"
click node_vulnerability "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/vulnerability.js"
click node_spatial "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/spatial-analysis.js"
click node_risk "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/risk_calculation.js"
click node_hazarddata "https://github.com/peixotoh/web-gis-risk-app/blob/main/data/json/rockfall_hazards.js"
click node_results "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/analysis-visualization.js"
click node_tables "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/functions_2.js"
click node_controls "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/ui-controls.js"
click node_globals "https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/globals.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_map,node_buildings,node_supabase,node_processing,node_boundaries,node_hazarddata toneBlue
class node_buildinginfo,node_vulnerability,node_spatial,node_risk toneAmber
class node_results,node_tables toneMint
class node_app,node_legacy,node_controls,node_globals toneRose
class node_user,node_external toneIndigo
```

## Components

### Map and data

- [Interactive map](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/map-init.js): `src/js/map-init.js`
- [Building data](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/building-management.js): `src/js/building-management.js`
- [Building data access](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/supabase-buildings.js): `src/js/supabase-buildings.js`
- [Custom data processing](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/data-processing.js): `src/js/data-processing.js`
- [Swiss boundary data](https://github.com/peixotoh/web-gis-risk-app/blob/main/data/json/suisse_admin_lim.js): `data/json/suisse_admin_lim.js`
- [Hazard datasets](https://github.com/peixotoh/web-gis-risk-app/blob/main/data/json/rockfall_hazards.js): `data/json/rockfall_hazards.js`

### Risk analysis

- [Building attributes](https://github.com/peixotoh/web-gis-risk-app/blob/main/data/json/buildings_info.js): `data/json/buildings_info.js`
- [Vulnerability curves](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/vulnerability.js): `src/js/vulnerability.js`
- [Polygon analysis](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/spatial-analysis.js): `src/js/spatial-analysis.js`
- [Risk calculations](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/risk_calculation.js): `src/js/risk_calculation.js`

### Results and exports

- [Results visualization](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/analysis-visualization.js): `src/js/analysis-visualization.js`
- [Data transformation](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/functions_2.js): `src/js/functions_2.js`

### Shared runtime

- [Application workflow](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/app.js): `src/js/app.js`
- [Backup application](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/app_backup.js): `src/js/app_backup.js`
- [UI controls](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/ui-controls.js): `src/js/ui-controls.js`
- [Shared state](https://github.com/peixotoh/web-gis-risk-app/blob/main/src/js/globals.js): `src/js/globals.js`

### Other components

- **Analyst**
- **GeoAdmin and Swiss data**

## Connections

- Analyst → Application workflow: uses (evidence: `README.md`)
- Application workflow → Interactive map: displays map (evidence: `README.md`)
- Application workflow → Building data: loads buildings (evidence: `README.md`)
- GeoAdmin and Swiss data → Building data: provides records (evidence: `README.md`)
- Analyst → Custom data processing: uploads data (evidence: `README.md`)
- Analyst → Polygon analysis: draws analysis area (evidence: `README.md`)
- Application workflow → Polygon analysis: runs analysis (evidence: `README.md`)
- Polygon analysis → Risk calculations: provides spatial inputs
- Risk calculations → Vulnerability curves: uses damage model
- Building attributes → Risk calculations: provides classifications (evidence: `src/js/risk_calculation.js`)
- Analyst → Vulnerability curves: adjusts curves (evidence: `README.md`)
- Application workflow → Results visualization: shows results (evidence: `README.md`)
- Results visualization → Data transformation: presents tables (evidence: `README.md`)
- Results visualization → Analyst: exports reports (evidence: `README.md`)
- Building data access → Building data: supports loading
- Hazard datasets → Interactive map: supplies hazards
- Swiss boundary data → Interactive map: supplies boundaries
- UI controls → Interactive map: configures layers
- Shared state → Application workflow: shares state
