Economic Incident History: each spike now gets "likely factors" — plain
word-frequency across every headline in its window, stopwords dropped
(English + German), no AI/LLM involved (new backend/app/textutil.py, shared
with the existing cluster-topic labeling). Spikes across instruments within
an hour of each other now merge into one incident (new
GET /api/markets/incidents) rather than showing WTI/Brent-style correlated
moves as separate entries.
Also: IRNA (Iranian state news agency) added as a source; news cluster
icons flattened from a violet->pink gradient to a single bright magenta for
legibility against the globe's own violet tint (size still scales with
article count); lightweight column-migration mechanism in db.py so the new
MarketSpike field doesn't break existing deployments' SQLite files.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Um48tTvZDrEgDeweFyhPYC
nginx-fronted stack that pulls RSS from an ideologically mixed set of
outlets, geocodes stories onto a 3D globe with zoom-adaptive clustering,
tracks market/oil prices with spike-to-article correlation, and overlays
weather, conflict events, Wikipedia lookups, and parliament diagrams.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Um48tTvZDrEgDeweFyhPYC