# alexandephilia/sitrep-osint architecture

> Architecture diagram of the GitHub repository alexandephilia/sitrep-osint, 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/alexandephilia/sitrep-osint
- Repository: https://github.com/alexandephilia/sitrep-osint

## Overview

SITREP is a local-first OSINT dashboard for monitoring Indonesian incidents. The main workflow is: the server exposes news and social collection, incident assessment/classification enriches candidate events, and the console presents the resulting wire, alerts, and geolocated views. Separate branches provide clean article reading, hazard and traffic layers, markets, and live CCTV/TV. The graph follows documented capabilities and shown references; several feature implementations were not sampled, so their internal connections are intentionally omitted.

Main entry points: [`server.js`](https://github.com/alexandephilia/sitrep-osint/blob/main/server.js) (HTTP API), [`public/index.html`](https://github.com/alexandephilia/sitrep-osint/blob/main/public/index.html) (OSINT console), [`src/news-service.js`](https://github.com/alexandephilia/sitrep-osint/blob/main/src/news-service.js) (News wire), [`cctv-gateway.js`](https://github.com/alexandephilia/sitrep-osint/blob/main/cctv-gateway.js) (CCTV and TV gateway)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["API and security"]
  node_server["HTTP API<br/>[server.js]"]
  node_security["Auth and network security<br/>[security.js]"]
end

subgraph group_intel["News and social intelligence"]
  node_news["News wire<br/>[news-service.js]"]
  node_feedtext["Feed text processing<br/>[feedtext.js]"]
  node_reader["Article reader<br/>[reader-service.js]"]
  node_extract["Article extraction<br/>[article-extract.js]"]
  node_media["Article media<br/>[article-media.js]"]
  node_socialservice["Social collection<br/>[social-service.js]"]
  node_social["Social signals<br/>[social.js]"]
  node_assessment["Incident assessment<br/>[assessment.js]"]
  node_nlp["Indonesian NLP<br/>[indonesian-nlp.js]"]
  node_geocode["Location resolution<br/>[geocode.js]"]
end

subgraph group_situational["Situation data"]
  node_geo["Hazard and environment sensors<br/>[geo-sensors.js]"]
  node_tomtom["Traffic and routing<br/>[tomtom.js]"]
  node_copernicus["Satellite tile proxy<br/>[copernicus.js]"]
  node_market["Market quotes<br/>[market.js]"]
end

subgraph group_live["Live media"]
  node_cctv["CCTV and TV gateway<br/>[cctv-gateway.js]"]
  node_catalog["Camera catalog<br/>[cctv-catalog.js]"]
end

subgraph group_console["Dashboard"]
  node_ui["OSINT console<br/>[index.html]"]
  node_globe["Incident globe and map<br/>[index.html]"]
  node_tvui["Live TV dock<br/>[index.html]"]
end

node_operator(("Analyst"))
node_externalfeeds(("News and social sources"))
node_hazardsources(("Hazard and weather sources"))
node_trafficprovider(("TomTom"))
node_cdse(("Copernicus CDSE"))
node_marketsource(("Market data sources"))
node_streamsource(("Camera and TV streams"))

node_operator -->|"uses"| node_ui
node_ui -->|"requests data"| node_server
node_server -->|"guards requests"| node_security
node_server -->|"wires service"| node_news
node_server -->|"wires service"| node_reader
node_server -->|"wires service"| node_socialservice
node_server -->|"wires service"| node_geo
node_server -->|"wires service"| node_tomtom
node_server -->|"wires service"| node_market
node_server -->|"routes gateway"| node_cctv
node_server -->|"serves tiles"| node_copernicus
node_externalfeeds -->|"supplies feeds"| node_news
node_externalfeeds -->|"supplies posts"| node_socialservice
node_social -->|"assesses signals"| node_assessment
node_assessment -->|"analyzes text"| node_nlp
node_assessment -->|"resolves places"| node_geocode
node_news -->|"filters feed text"| node_feedtext
node_news -->|"assesses items"| node_social
node_reader -->|"extracts articles"| node_extract
node_reader -->|"extracts media"| node_media
node_hazardsources -->|"supplies observations"| node_geo
node_trafficprovider -->|"provides traffic"| node_tomtom
node_cdse -->|"serves tiles"| node_copernicus
node_marketsource -.->|"provides quotes"| node_market
node_catalog -->|"configures streams"| node_cctv
node_streamsource -->|"provides streams"| node_cctv
node_ui -->|"renders incidents"| node_globe
node_ui -->|"renders player"| node_tvui
node_news -->|"feeds wire"| node_ui
node_socialservice -->|"feeds monitor"| node_ui
node_geo -->|"feeds map layers"| node_globe
node_tomtom -->|"feeds traffic"| node_globe
node_copernicus -->|"provides imagery"| node_globe
node_market -->|"feeds quotes"| node_ui
node_cctv -->|"streams video"| node_tvui

click node_server "https://github.com/alexandephilia/sitrep-osint/blob/main/server.js"
click node_security "https://github.com/alexandephilia/sitrep-osint/blob/main/security.js"
click node_news "https://github.com/alexandephilia/sitrep-osint/blob/main/src/news-service.js"
click node_feedtext "https://github.com/alexandephilia/sitrep-osint/blob/main/feedtext.js"
click node_reader "https://github.com/alexandephilia/sitrep-osint/blob/main/src/reader-service.js"
click node_extract "https://github.com/alexandephilia/sitrep-osint/blob/main/article-extract.js"
click node_media "https://github.com/alexandephilia/sitrep-osint/blob/main/article-media.js"
click node_socialservice "https://github.com/alexandephilia/sitrep-osint/blob/main/src/social-service.js"
click node_social "https://github.com/alexandephilia/sitrep-osint/blob/main/social.js"
click node_assessment "https://github.com/alexandephilia/sitrep-osint/blob/main/assessment.js"
click node_nlp "https://github.com/alexandephilia/sitrep-osint/blob/main/indonesian-nlp.js"
click node_geocode "https://github.com/alexandephilia/sitrep-osint/blob/main/geocode.js"
click node_geo "https://github.com/alexandephilia/sitrep-osint/blob/main/src/geo-sensors.js"
click node_tomtom "https://github.com/alexandephilia/sitrep-osint/blob/main/src/tomtom.js"
click node_copernicus "https://github.com/alexandephilia/sitrep-osint/blob/main/copernicus.js"
click node_market "https://github.com/alexandephilia/sitrep-osint/blob/main/src/market.js"
click node_cctv "https://github.com/alexandephilia/sitrep-osint/blob/main/cctv-gateway.js"
click node_catalog "https://github.com/alexandephilia/sitrep-osint/blob/main/src/cctv-catalog.js"
click node_ui "https://github.com/alexandephilia/sitrep-osint/blob/main/public/index.html"
click node_globe "https://github.com/alexandephilia/sitrep-osint/blob/main/public/index.html"
click node_tvui "https://github.com/alexandephilia/sitrep-osint/blob/main/public/index.html"

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_server,node_security toneBlue
class node_news,node_feedtext,node_reader,node_extract,node_media,node_socialservice,node_social,node_assessment,node_nlp,node_geocode toneAmber
class node_geo,node_tomtom,node_copernicus,node_market toneMint
class node_cctv,node_catalog toneRose
class node_ui,node_globe,node_tvui,node_operator,node_externalfeeds,node_hazardsources,node_trafficprovider,node_cdse,node_marketsource,node_streamsource toneIndigo
```

## Components

### API and security

- [HTTP API](https://github.com/alexandephilia/sitrep-osint/blob/main/server.js): `server.js`
- [Auth and network security](https://github.com/alexandephilia/sitrep-osint/blob/main/security.js): `security.js`

### News and social intelligence

- [News wire](https://github.com/alexandephilia/sitrep-osint/blob/main/src/news-service.js): `src/news-service.js`
- [Feed text processing](https://github.com/alexandephilia/sitrep-osint/blob/main/feedtext.js): `feedtext.js`
- [Article reader](https://github.com/alexandephilia/sitrep-osint/blob/main/src/reader-service.js): `src/reader-service.js`
- [Article extraction](https://github.com/alexandephilia/sitrep-osint/blob/main/article-extract.js): `article-extract.js`
- [Article media](https://github.com/alexandephilia/sitrep-osint/blob/main/article-media.js): `article-media.js`
- [Social collection](https://github.com/alexandephilia/sitrep-osint/blob/main/src/social-service.js): `src/social-service.js`
- [Social signals](https://github.com/alexandephilia/sitrep-osint/blob/main/social.js): `social.js`
- [Incident assessment](https://github.com/alexandephilia/sitrep-osint/blob/main/assessment.js): `assessment.js`
- [Indonesian NLP](https://github.com/alexandephilia/sitrep-osint/blob/main/indonesian-nlp.js): `indonesian-nlp.js`
- [Location resolution](https://github.com/alexandephilia/sitrep-osint/blob/main/geocode.js): `geocode.js`

### Situation data

- [Hazard and environment sensors](https://github.com/alexandephilia/sitrep-osint/blob/main/src/geo-sensors.js): `src/geo-sensors.js`
- [Traffic and routing](https://github.com/alexandephilia/sitrep-osint/blob/main/src/tomtom.js): `src/tomtom.js`
- [Satellite tile proxy](https://github.com/alexandephilia/sitrep-osint/blob/main/copernicus.js): `copernicus.js`
- [Market quotes](https://github.com/alexandephilia/sitrep-osint/blob/main/src/market.js): `src/market.js`

### Live media

- [CCTV and TV gateway](https://github.com/alexandephilia/sitrep-osint/blob/main/cctv-gateway.js): `cctv-gateway.js`
- [Camera catalog](https://github.com/alexandephilia/sitrep-osint/blob/main/src/cctv-catalog.js): `src/cctv-catalog.js`

### Dashboard

- [OSINT console](https://github.com/alexandephilia/sitrep-osint/blob/main/public/index.html): `public/index.html`
- [Incident globe and map](https://github.com/alexandephilia/sitrep-osint/blob/main/public/index.html): `public/index.html`
- [Live TV dock](https://github.com/alexandephilia/sitrep-osint/blob/main/public/index.html): `public/index.html`

### Other components

- **Analyst**
- **News and social sources**
- **Hazard and weather sources**
- **TomTom**
- **Copernicus CDSE**
- **Market data sources**
- **Camera and TV streams**

## Connections

- Analyst → OSINT console: uses (evidence: `README.md`)
- OSINT console → HTTP API: requests data (evidence: `README.md`)
- HTTP API → Auth and network security: guards requests (evidence: `README.md`)
- HTTP API → News wire: wires service (evidence: `server.js`)
- HTTP API → Article reader: wires service (evidence: `server.js`)
- HTTP API → Social collection: wires service (evidence: `README.md`)
- HTTP API → Hazard and environment sensors: wires service (evidence: `README.md`)
- HTTP API → Traffic and routing: wires service (evidence: `README.md`)
- HTTP API → Market quotes: wires service (evidence: `README.md`)
- HTTP API → CCTV and TV gateway: routes gateway (evidence: `README.md`)
- HTTP API → Satellite tile proxy: serves tiles (evidence: `README.md`)
- News and social sources → News wire: supplies feeds (evidence: `README.md`)
- News and social sources → Social collection: supplies posts (evidence: `README.md`)
- Social signals → Incident assessment: assesses signals (evidence: `social.js`)
- Incident assessment → Indonesian NLP: analyzes text (evidence: `assessment.js`)
- Incident assessment → Location resolution: resolves places (evidence: `assessment.js`)
- News wire → Feed text processing: filters feed text (evidence: `src/news-service.js`)
- News wire → Social signals: assesses items (evidence: `src/news-service.js`)
- Article reader → Article extraction: extracts articles (evidence: `README.md`)
- Article reader → Article media: extracts media (evidence: `src/reader-service.js`)
- Hazard and weather sources → Hazard and environment sensors: supplies observations (evidence: `README.md`)
- TomTom → Traffic and routing: provides traffic (evidence: `README.md`)
- Copernicus CDSE → Satellite tile proxy: serves tiles (evidence: `README.md`)
- Market data sources → Market quotes: provides quotes (evidence: `README.md`)
- Camera catalog → CCTV and TV gateway: configures streams (evidence: `src/cctv-catalog.js`)
- Camera and TV streams → CCTV and TV gateway: provides streams (evidence: `README.md`)
- OSINT console → Incident globe and map: renders incidents (evidence: `README.md`)
- OSINT console → Live TV dock: renders player (evidence: `README.md`)
- News wire → OSINT console: feeds wire (evidence: `README.md`)
- Social collection → OSINT console: feeds monitor (evidence: `README.md`)
- Hazard and environment sensors → Incident globe and map: feeds map layers (evidence: `README.md`)
- Traffic and routing → Incident globe and map: feeds traffic (evidence: `README.md`)
- Satellite tile proxy → Incident globe and map: provides imagery (evidence: `README.md`)
- Market quotes → OSINT console: feeds quotes (evidence: `README.md`)
- CCTV and TV gateway → Live TV dock: streams video (evidence: `README.md`)
