# hernangonza/mapa-pronostico architecture

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

- Interactive diagram: https://gitdiagram.com/hernangonza/mapa-pronostico
- Repository: https://github.com/hernangonza/mapa-pronostico

## Overview

Mapa de Pronóstico — Misiones is an operator-facing weather publishing system with an embeddable public map and social-media graphics. Its documented daily workflow runs from uploading an Alerta Temprana DOCX, through review and live preview, to publishing a dataset and displaying it in an iframe; a separate action renders a PNG for social media. The repository also exposes alerting, hydrology, precipitation, fire-risk, historical and reporting capabilities. Edges are limited to README statements and visible imports, route mounts, or calls; some unsampled feature internals are therefore represented only at their route or directory level.

Main entry points: [`mapa-backend/src/server.js`](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/server.js) (Express API server), [`mapa-backend/src/routes/pronostico.js`](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/pronostico.js) (Forecast API), [`mapa-backend/src/lib/smn/service.mjs`](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/smn/service.mjs) (SMN alert intake), [`mapa-frontend/src/pages/AdminPage.jsx`](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/pages/AdminPage.jsx) (Operator panel)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_operator["Operator workflow"]
  node_admin["Operator panel<br/>[AdminPage.jsx]"]
  node_public_map["Embeddable map<br/>[EmbedPage.jsx]"]
end

subgraph group_forecast["Forecast publication"]
  node_forecast_editor["Forecast editor"]
  node_forecast_routes["Forecast API<br/>[pronostico.js]"]
  node_forecast_store[("Published forecast store<br/>[store.js]")]
  node_map_render["Map and PNG rendering<br/>[generateMap.js]"]
end

subgraph group_alerts["Alerts and hazards"]
  node_alert_routes["Meteorological alerts API"]
  node_alert_store[("Alert publication store")]
  node_smn_service["SMN alert intake<br/>[service.mjs]"]
  node_short_alerts[("Short-term notices")]
  node_fire_risk["Fire-risk service"]
end

subgraph group_data["Weather and reporting"]
  node_hydrology["Hydrology services<br/>[service.js]"]
  node_basin_service["Basin services<br/>[service.js]"]
  node_precipitation["Precipitation tools<br/>[precipitaciones.js]"]
  node_historical["Historical observations<br/>[historico.js]"]
  node_reports["Forecast reports"]
end

subgraph group_platform["API and access"]
  node_api_client["Frontend API client<br/>[api.js]"]
  node_auth["Session and identity<br/>[auth.js]"]
  node_auth_middleware["Session middleware<br/>[requireAuth.js]"]
  node_backend["Express API server<br/>[server.js]"]
  node_postgres[("Postgres / file storage<br/>[store.js]")]
end

node_operator(("Weather operator"))
node_smn_ingest(("SMN data source"))
node_ministry_site(("Ministry site"))
node_social_channels(("Social channels"))

node_operator -->|"uploads DOCX"| node_admin
node_admin -->|"reviews forecast"| node_forecast_editor
node_forecast_editor -->|"requests API"| node_api_client
node_api_client -->|"calls API"| node_forecast_routes
node_backend -->|"mounts route"| node_forecast_routes
node_forecast_routes -->|"reads and publishes"| node_forecast_store
node_forecast_routes -->|"renders map"| node_map_render
node_forecast_store -->|"persists forecast"| node_postgres
node_ministry_site -->|"embeds iframe"| node_public_map
node_backend -->|"mounts route"| node_alert_routes
node_alert_routes -->|"manages publications"| node_alert_store
node_smn_ingest -.->|"provides alerts"| node_smn_service
node_smn_service -->|"reads alert data"| node_alert_store
node_smn_service -->|"checks notices"| node_short_alerts
node_backend -->|"mounts route"| node_fire_risk
node_backend -->|"mounts hydrology routes"| node_hydrology
node_backend -->|"mounts basin routes"| node_basin_service
node_backend -->|"mounts route"| node_precipitation
node_backend -->|"mounts route"| node_historical
node_backend -->|"mounts forecast route"| node_reports
node_auth_middleware -->|"checks session"| node_auth
node_auth -->|"uses shared pool"| node_postgres
node_social_channels -->|"receives PNG"| node_map_render

click node_admin "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/pages/AdminPage.jsx"
click node_forecast_editor "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/components/InformePronostico.jsx"
click node_api_client "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/api.js"
click node_forecast_routes "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/pronostico.js"
click node_forecast_store "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/store.js"
click node_map_render "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/generateMap.js"
click node_public_map "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/pages/EmbedPage.jsx"
click node_alert_routes "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/alertasMeteorologicas.js"
click node_alert_store "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/alertasMeteorologicasStore.js"
click node_smn_service "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/smn/service.mjs"
click node_short_alerts "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/avisosCortoPlazoStore.js"
click node_fire_risk "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/riesgoIncendiosIndiceService.js"
click node_hydrology "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/arroyos/service.js"
click node_basin_service "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/cuencas/service.js"
click node_precipitation "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/precipitaciones.js"
click node_historical "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/historico.js"
click node_reports "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/informePronosticoPdf.js"
click node_auth "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/auth.js"
click node_auth_middleware "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/middleware/requireAuth.js"
click node_backend "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/server.js"
click node_postgres "https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/store.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_admin,node_public_map toneBlue
class node_forecast_editor,node_forecast_routes,node_forecast_store,node_map_render toneAmber
class node_alert_routes,node_alert_store,node_smn_service,node_short_alerts,node_fire_risk toneMint
class node_hydrology,node_basin_service,node_precipitation,node_historical,node_reports toneRose
class node_api_client,node_auth,node_auth_middleware,node_backend,node_postgres,node_operator,node_smn_ingest,node_ministry_site,node_social_channels toneIndigo
```

## Components

### Operator workflow

- [Operator panel](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/pages/AdminPage.jsx): `mapa-frontend/src/pages/AdminPage.jsx`
- [Embeddable map](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/pages/EmbedPage.jsx): `mapa-frontend/src/pages/EmbedPage.jsx`

### Forecast publication

- [Forecast editor](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/components/InformePronostico.jsx): `mapa-frontend/src/components/InformePronostico.jsx`
- [Forecast API](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/pronostico.js): `mapa-backend/src/routes/pronostico.js`
- [Published forecast store](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/store.js): `mapa-backend/src/lib/store.js`
- [Map and PNG rendering](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/generateMap.js): `mapa-backend/src/lib/generateMap.js`

### Alerts and hazards

- [Meteorological alerts API](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/alertasMeteorologicas.js): `mapa-backend/src/routes/alertasMeteorologicas.js`
- [Alert publication store](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/alertasMeteorologicasStore.js): `mapa-backend/src/lib/alertasMeteorologicasStore.js`
- [SMN alert intake](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/smn/service.mjs): `mapa-backend/src/lib/smn/service.mjs`
- [Short-term notices](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/avisosCortoPlazoStore.js): `mapa-backend/src/lib/avisosCortoPlazoStore.js`
- [Fire-risk service](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/riesgoIncendiosIndiceService.js): `mapa-backend/src/lib/riesgoIncendiosIndiceService.js`

### Weather and reporting

- [Hydrology services](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/arroyos/service.js): `mapa-backend/src/lib/arroyos/service.js`
- [Basin services](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/cuencas/service.js): `mapa-backend/src/lib/cuencas/service.js`
- [Precipitation tools](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/precipitaciones.js): `mapa-backend/src/routes/precipitaciones.js`
- [Historical observations](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/routes/historico.js): `mapa-backend/src/routes/historico.js`
- [Forecast reports](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/informePronosticoPdf.js): `mapa-backend/src/lib/informePronosticoPdf.js`

### API and access

- [Frontend API client](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-frontend/src/api.js): `mapa-frontend/src/api.js`
- [Session and identity](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/auth.js): `mapa-backend/src/lib/auth.js`
- [Session middleware](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/middleware/requireAuth.js): `mapa-backend/src/middleware/requireAuth.js`
- [Express API server](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/server.js): `mapa-backend/src/server.js`
- [Postgres / file storage](https://github.com/hernangonza/mapa-pronostico/blob/main/mapa-backend/src/lib/store.js): `mapa-backend/src/lib/store.js`

### Other components

- **Weather operator**
- **SMN data source**
- **Ministry site**
- **Social channels**

## Connections

- Weather operator → Operator panel: uploads DOCX (evidence: `README.md`)
- Operator panel → Forecast editor: reviews forecast (evidence: `README.md`)
- Forecast editor → Frontend API client: requests API (evidence: `mapa-frontend/src/components/InformePronostico.jsx`)
- Frontend API client → Forecast API: calls API (evidence: `mapa-frontend/src/api.js`)
- Express API server → Forecast API: mounts route (evidence: `mapa-backend/src/server.js`)
- Forecast API → Published forecast store: reads and publishes (evidence: `mapa-backend/src/routes/pronostico.js`)
- Forecast API → Map and PNG rendering: renders map (evidence: `mapa-backend/src/routes/pronostico.js`)
- Published forecast store → Postgres / file storage: persists forecast (evidence: `mapa-backend/src/lib/store.js`)
- Ministry site → Embeddable map: embeds iframe (evidence: `README.md`)
- Express API server → Meteorological alerts API: mounts route (evidence: `mapa-backend/src/server.js`)
- Meteorological alerts API → Alert publication store: manages publications (evidence: `mapa-backend/src/routes/alertasMeteorologicas.js`)
- SMN data source → SMN alert intake: provides alerts
- SMN alert intake → Alert publication store: reads alert data (evidence: `mapa-backend/src/lib/smn/service.mjs`)
- SMN alert intake → Short-term notices: checks notices (evidence: `mapa-backend/src/lib/smn/service.mjs`)
- Express API server → Fire-risk service: mounts route (evidence: `mapa-backend/src/server.js`)
- Express API server → Hydrology services: mounts hydrology routes (evidence: `mapa-backend/src/server.js`)
- Express API server → Basin services: mounts basin routes (evidence: `mapa-backend/src/server.js`)
- Express API server → Precipitation tools: mounts route (evidence: `mapa-backend/src/server.js`)
- Express API server → Historical observations: mounts route (evidence: `mapa-backend/src/server.js`)
- Express API server → Forecast reports: mounts forecast route (evidence: `mapa-backend/src/server.js`)
- Session middleware → Session and identity: checks session (evidence: `mapa-backend/src/middleware/requireAuth.js`)
- Session and identity → Postgres / file storage: uses shared pool (evidence: `mapa-backend/src/lib/auth.js`)
- Social channels → Map and PNG rendering: receives PNG (evidence: `README.md`)
