Skip to main content
The geopolitics group aggregates conflict reporting, active frontline data, and intelligence news into a unified layer set. All sources are public and require no API keys.

Global incidents (GDELT)

The Global Incidents layer plots conflict events from the GDELT Project — a real-time database of media-reported global events. ShadowBroker aggregates the last 8 hours of GDELT export data, downloading 32 export files (one per 15-minute interval) in parallel from the GDELT v2 export CDN.

What is shown

Only events matching GDELT CAMEO conflict codes are included:
CAMEO code prefixEvent type
14Protest, demonstrate, or rally
17Coerce
18Assault
19Fight
20Use unconventional mass violence
Events are aggregated by geographic grid cell (rounded to 0.1°). Multiple events at the same location are merged into a single marker with a count and up to 10 unique source URLs (deduplicated by domain). This typically produces ~1,000 conflict locations from the 8-hour window.

Article title enrichment

When GDELT data loads, article titles are initially derived from URL slug parsing (instant, no network). A background thread then fetches real og:title or <title> tags from up to 16 article URLs in parallel and updates the map markers in-place. This two-phase approach means the layer loads immediately while headlines improve over the next few seconds.

Update cadence

GDELT data is fetched every 15 minutes via the very-slow scheduler tier. The GDELT Project updates its export files every 15 minutes.

Ukraine frontline

The Ukraine Frontline layer renders the current warfront as a GeoJSON polygon overlay sourced from the cyterat/deepstate-map-data GitHub mirror of the DeepState Map.

Zone types

The GeoJSON features are indexed by position in the array, mapping to these zone types:
IndexZone
0Russian-occupied areas
1Russian advance
2Liberated area
3Russian-occupied areas (Crimea / LPR / DPR)
4Directions of Ukrainian attacks

Update cadence

Frontline data is cached for 30 minutes (TTL cache) and re-fetched every 15 minutes via the scheduler. The underlying DeepState Map updates approximately every 30 minutes.
The backend queries the GitHub API tree to find the alphabetically latest file in the data/ directory (named deepstatemap_data_YYYYMMDD.geojson), then downloads it directly from GitHub raw.

SIGINT/RISINT news feed

The SIGINT panel on the right side of the dashboard shows a real-time RSS aggregation feed from intelligence-focused news sources.

Configuration

  • Up to 20 RSS sources configurable
  • Each source has a priority weight from 1 to 5 that influences ranking
  • Feed list persists across restarts in backend/config/news_feeds.json
  • Sources and weights are manageable from Settings → News Feeds in the dashboard UI
You can add, remove, or reweight feeds without restarting the backend. See the news feeds configuration guide.

Region dossier

Right-clicking anywhere on the map opens a floating Region Dossier panel with intelligence about the clicked location’s country:
FieldSource
Country name, capital, population, areaRestCountries API (cached 24h)
Official languages, currencies, flagRestCountries API (cached 24h)
Government typeWikidata SPARQL query (cached 24h)
Head of state / head of governmentWikidata SPARQL query (cached 24h)
Wikipedia summary and thumbnailWikipedia API (cached)
The right-click also triggers a Sentinel-2 imagery search for the clicked coordinates — if a clear scene exists within the last 30 days, a floating intel card appears showing the capture date, cloud cover %, and a link to the full-resolution image. See satellite imagery for details.
Right-click over conflict zones, contested regions, or key geographic chokepoints to get instant country context without leaving the map.

Build docs developers (and LLMs) love