# kaleimhc/dzikinabialolece.pl architecture

> Architecture diagram of the GitHub repository kaleimhc/dzikinabialolece.pl, 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/kaleimhc/dzikinabialolece.pl
- Repository: https://github.com/kaleimhc/dzikinabialolece.pl

## Overview

Dziki na Białołęce is a web map for crowdsourced wild-boar sightings and spatial encounter-risk analysis. The user workflow is to view risk on the map, submit a sighting, or choose and recalculate one of three modes: FAST, PUB, or RESEARCH. Results are served as map layers; RESEARCH additionally exposes pipeline progress and spatial-model diagnostics. The graph combines sampled source relationships with README-documented architecture; unsampled implementation details are not inferred.

Main entry points: [`frontend/src/panels/ResearchPanel/tabs/PipelineTab.jsx`](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/panels/ResearchPanel/tabs/PipelineTab.jsx) (Pipeline controls), [`frontend/src/App.jsx`](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/App.jsx) (App shell), [`src/analytics/orchestrator_research.py`](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/orchestrator_research.py) (Research orchestrator), [`src/analytics/views.py`](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/views.py) (Django API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Map and reporting"]
  node_app["App shell<br/>[App.jsx]"]
  node_map["Risk map<br/>[MapContainer.jsx]"]
  node_map_controls["Map controls<br/>[LayerToggles.jsx]"]
  node_report["Sightings report<br/>[ReportSheet.jsx]"]
  node_state["Client state<br/>[sightingsStore.js]"]
  node_recalc["Mode and recalc<br/>[RecalcPanel.jsx]"]
end

subgraph group_sightings["Sightings and spatial data"]
  node_api["Django API<br/>[views.py]"]
  node_sighting_api["Sighting endpoints<br/>[views.py]"]
  node_sighting_data[("Sightings data<br/>[models.py]")]
end

subgraph group_risk["Risk calculation"]
  node_mode_router["FAST/PUB router<br/>[mode_router.py]"]
  node_tasks["Risk tasks<br/>[tasks.py]"]
  node_grid_data[("Spatial grids<br/>[models.py]")]
end

subgraph group_research["Research workflow"]
  node_research_panel["Research panel<br/>[index.jsx]"]
  node_pipeline_tab["Pipeline controls<br/>[PipelineTab.jsx]"]
  node_pipeline_progress["Live progress"]
  node_research_tabs["Research materials"]
  node_diagnostics["Model diagnostics"]
  node_research_tasks["Research tasks<br/>[tasks_research.py]"]
  node_orchestrator["Research orchestrator"]
  node_research_models[("Research runs and logs<br/>[models_research.py]")]
  node_r_engine["R spatial models"]
  node_websocket["Progress WebSocket<br/>[consumers.py]"]
end

node_visitor(("Map user"))

node_visitor -->|"uses"| node_app
node_app -->|"renders"| node_map
node_app -->|"renders"| node_report
node_app -->|"renders"| node_research_panel
node_app -->|"reads"| node_state
node_map_controls -.->|"controls layers"| node_map
node_recalc -->|"reads state"| node_state
node_research_panel -->|"renders"| node_pipeline_tab
node_research_panel -->|"renders"| node_research_tabs
node_pipeline_tab -->|"tracks run"| node_pipeline_progress
node_pipeline_tab -.->|"shows diagnostics"| node_diagnostics
node_visitor -->|"submits sighting"| node_sighting_api
node_sighting_api -->|"reads and writes"| node_sighting_data
node_visitor -->|"requests risk"| node_api
node_api -->|"queues calculation"| node_tasks
node_tasks -->|"dispatches modes"| node_mode_router
node_mode_router -->|"calculates grid risk"| node_grid_data
node_mode_router -->|"runs PUB scripts"| node_r_engine
node_visitor -->|"starts research run"| node_pipeline_tab
node_pipeline_tab -.->|"requests run"| node_research_tasks
node_research_tasks -->|"invokes"| node_orchestrator
node_research_tasks -->|"loads run"| node_research_models
node_orchestrator -->|"logs run steps"| node_research_models
node_orchestrator -->|"runs R pipeline"| node_r_engine
node_orchestrator -->|"emits progress"| node_websocket
node_pipeline_progress -->|"receives events"| node_websocket
node_pipeline_tab -->|"fetches status"| node_api
node_map -.->|"loads risk layers"| node_api

click node_app "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/App.jsx"
click node_map "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/components/MapContainer.jsx"
click node_map_controls "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/components/LayerToggles.jsx"
click node_report "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/components/ReportSheet.jsx"
click node_state "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/stores/sightingsStore.js"
click node_recalc "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/components/RecalcPanel.jsx"
click node_research_panel "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/panels/ResearchPanel/index.jsx"
click node_pipeline_tab "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/panels/ResearchPanel/tabs/PipelineTab.jsx"
click node_pipeline_progress "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/hooks/usePipelineProgress.js"
click node_research_tabs "https://github.com/kaleimhc/dzikinabialolece.pl/tree/main/frontend/src/panels/ResearchPanel/tabs"
click node_diagnostics "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/panels/ResearchPanel/components/DiagnosticsReport.jsx"
click node_api "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/views.py"
click node_sighting_api "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/sightings/views.py"
click node_sighting_data "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/sightings/models.py"
click node_mode_router "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/mode_router.py"
click node_tasks "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/tasks.py"
click node_grid_data "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/sightings/models.py"
click node_research_tasks "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/tasks_research.py"
click node_orchestrator "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/orchestrator_research.py"
click node_research_models "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/models_research.py"
click node_r_engine "https://github.com/kaleimhc/dzikinabialolece.pl/tree/main/r_scripts"
click node_websocket "https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/consumers.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_map,node_map_controls,node_report,node_state,node_recalc,node_visitor toneBlue
class node_api,node_sighting_api,node_sighting_data toneAmber
class node_mode_router,node_tasks,node_grid_data toneMint
class node_research_panel,node_pipeline_tab,node_pipeline_progress,node_research_tabs,node_diagnostics,node_research_tasks,node_orchestrator,node_research_models,node_r_engine,node_websocket toneRose
```

## Components

### Map and reporting

- [App shell](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Risk map](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/components/MapContainer.jsx): `frontend/src/components/MapContainer.jsx`
- [Map controls](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/components/LayerToggles.jsx): `frontend/src/components/LayerToggles.jsx`
- [Sightings report](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/components/ReportSheet.jsx): `frontend/src/components/ReportSheet.jsx`
- [Client state](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/stores/sightingsStore.js): `frontend/src/stores/sightingsStore.js`
- [Mode and recalc](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/components/RecalcPanel.jsx): `frontend/src/components/RecalcPanel.jsx`

### Sightings and spatial data

- [Django API](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/views.py): `src/analytics/views.py`
- [Sighting endpoints](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/sightings/views.py): `src/sightings/views.py`
- [Sightings data](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/sightings/models.py): `src/sightings/models.py`

### Risk calculation

- [FAST/PUB router](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/mode_router.py): `src/analytics/mode_router.py`
- [Risk tasks](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/tasks.py): `src/analytics/tasks.py`
- [Spatial grids](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/sightings/models.py): `src/sightings/models.py`

### Research workflow

- [Research panel](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/panels/ResearchPanel/index.jsx): `frontend/src/panels/ResearchPanel/index.jsx`
- [Pipeline controls](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/panels/ResearchPanel/tabs/PipelineTab.jsx): `frontend/src/panels/ResearchPanel/tabs/PipelineTab.jsx`
- [Live progress](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/hooks/usePipelineProgress.js): `frontend/src/hooks/usePipelineProgress.js`
- [Research materials](https://github.com/kaleimhc/dzikinabialolece.pl/tree/main/frontend/src/panels/ResearchPanel/tabs): `frontend/src/panels/ResearchPanel/tabs`
- [Model diagnostics](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/frontend/src/panels/ResearchPanel/components/DiagnosticsReport.jsx): `frontend/src/panels/ResearchPanel/components/DiagnosticsReport.jsx`
- [Research tasks](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/tasks_research.py): `src/analytics/tasks_research.py`
- [Research orchestrator](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/orchestrator_research.py): `src/analytics/orchestrator_research.py`
- [Research runs and logs](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/models_research.py): `src/analytics/models_research.py`
- [R spatial models](https://github.com/kaleimhc/dzikinabialolece.pl/tree/main/r_scripts): `r_scripts`
- [Progress WebSocket](https://github.com/kaleimhc/dzikinabialolece.pl/blob/main/src/analytics/consumers.py): `src/analytics/consumers.py`

### Other components

- **Map user**

## Connections

- Map user → App shell: uses
- App shell → Risk map: renders (evidence: `frontend/src/App.jsx`)
- App shell → Sightings report: renders (evidence: `frontend/src/App.jsx`)
- App shell → Research panel: renders (evidence: `frontend/src/App.jsx`)
- App shell → Client state: reads (evidence: `frontend/src/App.jsx`)
- Map controls → Risk map: controls layers
- Mode and recalc → Client state: reads state (evidence: `frontend/src/components/RecalcPanel.jsx`)
- Research panel → Pipeline controls: renders (evidence: `frontend/src/panels/ResearchPanel/index.jsx`)
- Research panel → Research materials: renders (evidence: `frontend/src/panels/ResearchPanel/index.jsx`)
- Pipeline controls → Live progress: tracks run (evidence: `frontend/src/panels/ResearchPanel/tabs/PipelineTab.jsx`)
- Pipeline controls → Model diagnostics: shows diagnostics
- Map user → Sighting endpoints: submits sighting
- Sighting endpoints → Sightings data: reads and writes (evidence: `src/sightings/views.py`)
- Map user → Django API: requests risk
- Django API → Risk tasks: queues calculation
- Risk tasks → FAST/PUB router: dispatches modes (evidence: `src/analytics/tasks.py`)
- FAST/PUB router → Spatial grids: calculates grid risk (evidence: `src/analytics/mode_router.py`)
- FAST/PUB router → R spatial models: runs PUB scripts (evidence: `src/analytics/mode_router.py`)
- Map user → Pipeline controls: starts research run
- Pipeline controls → Research tasks: requests run
- Research tasks → Research orchestrator: invokes (evidence: `src/analytics/tasks_research.py`)
- Research tasks → Research runs and logs: loads run (evidence: `src/analytics/tasks_research.py`)
- Research orchestrator → Research runs and logs: logs run steps (evidence: `src/analytics/orchestrator_research.py`)
- Research orchestrator → R spatial models: runs R pipeline (evidence: `src/analytics/orchestrator_research.py`)
- Research orchestrator → Progress WebSocket: emits progress
- Live progress → Progress WebSocket: receives events (evidence: `frontend/src/hooks/usePipelineProgress.js`)
- Pipeline controls → Django API: fetches status (evidence: `frontend/src/panels/ResearchPanel/tabs/PipelineTab.jsx`)
- Risk map → Django API: loads risk layers
