Four new intelligence domains for the dashboard:
1. Domestic flights (OpenSky) — global airborne aircraft count by
region with commercial/general breakdown. No API key needed.
2. Road traffic (TomTom) — real-time congestion % for 20 major world
cities + traffic incidents in 5 strategic regions. Needs
TOMTOM_API_KEY (free 2500 req/day at developer.tomtom.com).
3. CCTV webcams (Windy) — public traffic camera locations worldwide.
Needs WINDY_API_KEY (free 100 req/day at api.windy.com).
4. AI situation brief (Ollama) — LLM-generated 3-paragraph
intelligence brief synthesizing all dashboard data. Uses local
Ollama (llama3.2). Falls back to structured metrics summary.
New files: sources/traffic.py, sources/webcams.py, analysis/situation.py
Modified: sources/aviation.py (+fetch_domestic_flights), dashboard/app.py,
dashboard/index.html (drawer sections + HUD pills for all 4 domains).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add /api/static endpoint for instant geospatial data on boot (158 items)
- Add per-coroutine 45s timeout to prevent SSE first-frame blocking
- Dismiss loading overlay after static fetch instead of waiting for SSE
- Render 24 oil/gas/hydrogen pipelines as colored polylines on map
- Fix theaters dict-vs-list bug in posture.py and fleet.py
- Add exposure detail modal and color/label entries
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Strategic Posture section (top of drawer): composite score, 9 domain
grid with color-coded scores, top 5 threats
- Fleet Report section: readiness score/level, waterway status table,
aircraft count, active surges
- Population Exposure map layer: circle markers sized by population,
colored by threat type (red=conflict, orange=quake, yellow=fire)
- Population Exposure drawer section: total exposed, by event type,
city table with distance
- HUD pills: Posture score + Exposed population
- Layer toggle for Pop Exposure (purple, default on)
- Backend: exposure API now includes lat/lon for map rendering
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Static geospatial intelligence datasets with map visualization:
- 70 military bases from 9 operators (USA, RUS, CHN, GBR, FRA, NATO, etc.)
- 40 strategic ports (container, oil, LNG, naval, bulk)
- 24 oil/gas/hydrogen pipelines with capacity and status
- 24 nuclear facilities (power, enrichment, research, reprocessing)
- 4 new MCP tools: intel_military_bases, intel_strategic_ports,
intel_pipelines, intel_nuclear_facilities
- New "Infrastructure" map layer with base/port/facility markers
- Pipeline summary table in drawer with click-to-detail
- All geospatial items have detail modals on click
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- All external links open in iframe modal instead of navigating away
- 9 drawer item types (cyber, health, AI, social, elections, etc.)
expand into rich detail panel on click
- RSS feeds expanded from ~20 to ~80 across 14 categories with
source tier reliability scoring
- New intel_service_status tool monitoring AWS/Azure/GCP/CF/GitHub
- Cloud service incidents rendered in dashboard Security section
- Zero target=_blank links remain in dashboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- infrastructure.py: Add IODA (Georgia Tech) as fallback when Cloudflare
Radar returns 403 (no API token). Internet outage data now available
without CLOUDFLARE_API_TOKEN.
- conflict.py: Increase UCDP GED API timeout from 15s to 30s to handle
slow responses from ucdpapi.pcr.uu.se.
- dashboard/app.py: Add /api/report/pdf endpoint for PDF daily brief
export via weasyprint (optional dependency).
- pyproject.toml: Add dashboard + pdf optional deps, intel-dashboard
script entry point, update description for 55 tools.
- tests: Add 11 new tests covering health, sanctions, elections, shipping,
social, nuclear, infrastructure (IODA fallback + cable health), and
UCDP conflict. Fix cross-loop asyncio lock issue in conftest.
- Total: 50 tests passing, 55 tools verified.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When both ACLED (no API key) and UCDP (timeout/empty) fail, the
dashboard now falls back to 22 pre-coded conflict hotspots from
INTEL_HOTSPOTS with severity levels (critical/high/moderate/low).
Frontend updated with 3-tier fallback: ACLED → UCDP → conflict_zones.
Marker sizing uses escalation level for hotspots, tooltips show severity.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Backend: add 7 new data feeds to _fetch_overview() (33 total SSE streams).
Frontend: alert banner (critical/high/medium), health outbreak tracker,
election calendar with risk bars, shipping stress gauge, social signals
from Reddit, nuclear test site map layer with concern scoring, weekly
trends with anomaly tracking. New HUD pills for alerts, shipping stress,
outbreaks, nuclear flags.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Backend: wire stablecoin_status, etf_flows, acled_events, ucdp_events,
displacement, risk_scores, and signal_convergence into the SSE overview
endpoint (23 total feeds, up from 16).
Frontend: complete rewrite with 7-tab navigation (Overview, Markets,
Security, Conflict & Humanitarian, Natural & Climate, Geospatial Map,
Trend Charts), Leaflet dark-tile map with toggleable layers, Chart.js
rolling time-series, feed health counter, and DOMPurify sanitization.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>