feat: expand intelligence dashboard with 7 new feeds, tabbed UI, map, and charts

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>
This commit is contained in:
Marc Shade
2026-02-23 12:49:11 -05:00
co-authored by Claude Opus 4.6
parent 5af243d7a5
commit 15ecc8e3e1
2 changed files with 533 additions and 161 deletions
+9
View File
@@ -31,6 +31,8 @@ from world_intel_mcp.sources import (
displacement,
aviation,
climate,
conflict,
intelligence,
)
logger = logging.getLogger(__name__)
@@ -78,6 +80,13 @@ async def _fetch_overview() -> dict:
"airport_delays": aviation.fetch_airport_delays(fetcher),
"climate_anomalies": climate.fetch_climate_anomalies(fetcher),
"energy_prices": economic.fetch_energy_prices(fetcher),
"stablecoin_status": markets.fetch_stablecoin_status(fetcher),
"etf_flows": markets.fetch_etf_flows(fetcher),
"acled_events": conflict.fetch_acled_events(fetcher),
"ucdp_events": conflict.fetch_ucdp_events(fetcher),
"displacement": displacement.fetch_displacement_summary(fetcher),
"risk_scores": intelligence.fetch_risk_scores(fetcher),
"signal_convergence": intelligence.fetch_signal_convergence(fetcher),
}
gathered = await asyncio.gather(