# danielrosehill/iran-israel-war-2026-osint-data architecture

> Architecture diagram of the GitHub repository danielrosehill/iran-israel-war-2026-osint-data, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/danielrosehill/iran-israel-war-2026-osint-data
- Repository: https://github.com/danielrosehill/iran-israel-war-2026-osint-data

## Overview

This repository publishes an OSINT dataset tracking Iranian attack waves across four escalation rounds. The principal workflow is to consult the structured wave records and reference data, then explore the information through the interactive map or obtain it in analysis-friendly formats. The README also documents Neo4j relationship analysis and Kaggle/Hugging Face distribution. The sampled Python sources confirm enrichment and export responsibilities; frontend wiring and unsampled integrations are represented only where the tree or README supports them.

Main entry points: [`data/tp4-2026/waves.json`](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/tp4-2026/waves.json) (Round Records), [`data/reference/iranian_weapons.json`](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/reference/iranian_weapons.json) (Reference Data), [`scripts/build_export.py`](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_export.py) (Export Bundle), [`scripts/build_neo4j.py`](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_neo4j.py) (Graph Builder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_records["Incident Data"]
  node_round_data["Round Records<br/>[waves.json]"]
  node_historical_data["Prior Rounds<br/>[waves.json]"]
  node_reference_data["Reference Data"]
  node_schemas["Data Schema<br/>[wave.schema.json]"]
end

subgraph group_enrichment["Data Enrichment"]
  node_normalization["Normalization<br/>[normalization.py]"]
  node_enrichment_logic["Wave Enrichment<br/>[wave_enrichment.py]"]
  node_coordinates["Coordinate Resolution<br/>[fill_coords.py]"]
  node_geojson_builder["GeoJSON Export<br/>[build_geojson.py]"]
  node_arcgis_builder["ArcGIS Export<br/>[build_arcgis.py]"]
  node_kaggle_builder["Tabular Export<br/>[build_kaggle.py]"]
end

subgraph group_access["User Access"]
  node_web_map["Interactive Map<br/>[map.html]"]
  node_web_data["Map Data Client<br/>[data.js]"]
  node_web_map_logic["Map Logic<br/>[map.js]"]
  node_dashboard["Dataset Dashboard<br/>[index.html]"]
end

subgraph group_distribution["Analysis and Distribution"]
  node_neo4j_builder["Graph Builder<br/>[build_neo4j.py]"]
  node_export_bundle["Export Bundle<br/>[build_export.py]"]
  node_latest_exports["Published Exports<br/>[incidents_all.json]"]
end

node_researcher(("Researcher"))
node_neo4j[("Neo4j Aura")]
node_kaggle(("Kaggle"))
node_huggingface(("Hugging Face"))

node_researcher -->|"explores"| node_web_map
node_web_map -->|"loads data"| node_web_data
node_web_map -->|"renders map"| node_web_map_logic
node_researcher -->|"views dataset"| node_dashboard
node_researcher -->|"downloads"| node_latest_exports
node_round_data -->|"fills coordinates"| node_coordinates
node_reference_data -->|"resolves locations"| node_coordinates
node_round_data -->|"builds layers"| node_geojson_builder
node_reference_data -->|"matches targets"| node_geojson_builder
node_round_data -->|"builds layers"| node_arcgis_builder
node_enrichment_logic -->|"enriches records"| node_arcgis_builder
node_round_data -->|"flattens records"| node_kaggle_builder
node_enrichment_logic -->|"enriches records"| node_kaggle_builder
node_reference_data -->|"indexes aliases"| node_normalization
node_round_data -->|"loads records"| node_neo4j_builder
node_reference_data -->|"loads entities"| node_neo4j_builder
node_normalization -->|"normalizes entities"| node_neo4j_builder
node_neo4j_builder -->|"writes graph"| node_neo4j
node_round_data -->|"bundles rounds"| node_export_bundle
node_export_bundle -->|"invokes builder"| node_geojson_builder
node_export_bundle -->|"invokes builder"| node_arcgis_builder
node_export_bundle -->|"publishes bundle"| node_latest_exports
node_kaggle_builder -.->|"supports upload"| node_kaggle
node_researcher -.->|"gets dataset"| node_kaggle
node_researcher -.->|"gets dataset"| node_huggingface

click node_round_data "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/tp4-2026/waves.json"
click node_historical_data "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/tp1-2024/waves.json"
click node_reference_data "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/reference/iranian_weapons.json"
click node_schemas "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/schema/wave.schema.json"
click node_normalization "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/normalization.py"
click node_enrichment_logic "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/wave_enrichment.py"
click node_coordinates "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/fill_coords.py"
click node_geojson_builder "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_geojson.py"
click node_arcgis_builder "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_arcgis.py"
click node_kaggle_builder "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_kaggle.py"
click node_web_map "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/docs/map.html"
click node_web_data "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/docs/js/data.js"
click node_web_map_logic "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/docs/js/map.js"
click node_dashboard "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/docs/index.html"
click node_neo4j_builder "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_neo4j.py"
click node_export_bundle "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_export.py"
click node_latest_exports "https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/exports/latest/json/incidents_all.json"

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_round_data,node_historical_data,node_reference_data,node_schemas toneBlue
class node_normalization,node_enrichment_logic,node_coordinates,node_geojson_builder,node_arcgis_builder,node_kaggle_builder,node_neo4j toneAmber
class node_web_map,node_web_data,node_web_map_logic,node_dashboard toneMint
class node_neo4j_builder,node_export_bundle,node_latest_exports toneRose
class node_researcher,node_kaggle,node_huggingface toneIndigo
```

## Components

### Incident Data

- [Round Records](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/tp4-2026/waves.json): `data/tp4-2026/waves.json`
- [Prior Rounds](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/tp1-2024/waves.json): `data/tp1-2024/waves.json`
- [Reference Data](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/reference/iranian_weapons.json): `data/reference/iranian_weapons.json`
- [Data Schema](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/data/schema/wave.schema.json): `data/schema/wave.schema.json`

### Data Enrichment

- [Normalization](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/normalization.py): `scripts/normalization.py`
- [Wave Enrichment](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/wave_enrichment.py): `scripts/wave_enrichment.py`
- [Coordinate Resolution](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/fill_coords.py): `scripts/fill_coords.py`
- [GeoJSON Export](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_geojson.py): `scripts/build_geojson.py`
- [ArcGIS Export](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_arcgis.py): `scripts/build_arcgis.py`
- [Tabular Export](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_kaggle.py): `scripts/build_kaggle.py`

### User Access

- [Interactive Map](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/docs/map.html): `docs/map.html`
- [Map Data Client](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/docs/js/data.js): `docs/js/data.js`
- [Map Logic](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/docs/js/map.js): `docs/js/map.js`
- [Dataset Dashboard](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/docs/index.html): `docs/index.html`

### Analysis and Distribution

- [Graph Builder](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_neo4j.py): `scripts/build_neo4j.py`
- [Export Bundle](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/scripts/build_export.py): `scripts/build_export.py`
- [Published Exports](https://github.com/danielrosehill/iran-israel-war-2026-osint-data/blob/main/exports/latest/json/incidents_all.json): `exports/latest/json/incidents_all.json`

### Other components

- **Researcher**
- **Neo4j Aura**
- **Kaggle**
- **Hugging Face**

## Connections

- Researcher → Interactive Map: explores
- Interactive Map → Map Data Client: loads data
- Interactive Map → Map Logic: renders map
- Researcher → Dataset Dashboard: views dataset
- Researcher → Published Exports: downloads
- Round Records → Coordinate Resolution: fills coordinates
- Reference Data → Coordinate Resolution: resolves locations
- Round Records → GeoJSON Export: builds layers
- Reference Data → GeoJSON Export: matches targets
- Round Records → ArcGIS Export: builds layers
- Wave Enrichment → ArcGIS Export: enriches records
- Round Records → Tabular Export: flattens records
- Wave Enrichment → Tabular Export: enriches records
- Reference Data → Normalization: indexes aliases
- Round Records → Graph Builder: loads records
- Reference Data → Graph Builder: loads entities
- Normalization → Graph Builder: normalizes entities
- Graph Builder → Neo4j Aura: writes graph
- Round Records → Export Bundle: bundles rounds
- Export Bundle → GeoJSON Export: invokes builder
- Export Bundle → ArcGIS Export: invokes builder
- Export Bundle → Published Exports: publishes bundle
- Tabular Export → Kaggle: supports upload
- Researcher → Kaggle: gets dataset
- Researcher → Hugging Face: gets dataset
