What's Changed
- feat: add finance/trading variant with market-focused dashboard
- feat(finance): integrate GCC investments into finance variant
- feat: add Gulf FDI investment database and panel component
- fix: wire timeline filtering across map and news panels
- fix(banner): hide desktop download prompt on mobile devices
- fix(desktop): batch keychain reads to reduce macOS password prompts
- feat: auto-detect OS in download banner, show only relevant platform
- fix(map): prevent popups from overflowing below viewport edge
- fix: disable map repetition & use English-only vector labels
- feat: add BBC Persian, Iran International, Fars News, MIIT & MOFCOM feeds
- fix: replace 7 more dead/blocked tech RSS feeds with Google News fallbacks
- fix: guard invalid RSS dates and replace dead/blocked feed URLs
- test: add coverage for finance/trending/reload and stabilize map harness
- fix: persist country highlight across theme switches
- fix: rehydrate country layers after setStyle theme switch
- docs: add finance variant, Gulf FDI, tri-variant architecture to README
- chore: add finance variant to GitHub issue templates
- fix(cors): add finance.worldmonitor.app to Railway proxy allowlist
- fix: resolve P2 reload guard and harness assertion drift
- feat(header): move UTC clock from map overlay to centered header bar
- fix(trending): suppress month names and strip source attributions from titles
- chore(release): finalize 2.3.8 changelog and version
- fix(trending): suppress noisy finance/generic terms from keyword spikes
- Harden full and tech variants against feed/API pressure
- Fix finance variant runtime resiliency and API pressure
- fix(panels): standardize error messages with specific causes
- chore(ai): switch OpenRouter model to auto-routed free tier
- fix: add finance types to PopupData union and auto-create variant panels
- fix: dynamically enumerate FEEDS categories in loadNews()
Full Changelog: v2.3.7...v2.3.8