Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1004 commits
Select commit Hold shift + click to select a range
a7c3663
fix: tighten headline relevance, add Top News section, compact markets
koala73 Feb 15, 2026
2d885af
fix: add BR/AE to tier-1, resolve deep-link names, fix military timel…
koala73 Feb 15, 2026
081455a
Consolidate country detection around shared geometry service
koala73 Feb 15, 2026
f3fd9a4
refactor: consolidate news into Top News, remove redundant Evidence s…
koala73 Feb 15, 2026
8d2f7a5
fix: normalize country name from GeoJSON to canonical TIER1 name
koala73 Feb 15, 2026
071a086
Merge country-brief-page: full-page brief, geometry consolidation, ne…
koala73 Feb 15, 2026
2ea9ec0
chore: bump version to 2.2.2
koala73 Feb 15, 2026
88b77e2
Add country briefs to Cmd+K search
koala73 Feb 15, 2026
4949aa1
fix: fall back to cloud API when local sidecar returns non-OK status
koala73 Feb 15, 2026
531f7e7
perf: reduce idle CPU from pulse animation loop
koala73 Feb 15, 2026
6cfa8c2
fix: resolve z-index conflict between pinned map and panels grid
InlitX Feb 15, 2026
cd9c44b
feat: add download desktop app slide-in banner for web visitors
koala73 Feb 15, 2026
3f4ed66
feat: add cyber threat map layer with Feodo Tracker + URLhaus integra…
koala73 Feb 15, 2026
9067204
chore: bump version to 2.2.3
koala73 Feb 15, 2026
031b783
feat: add C2IntelFeeds, OTX, and AbuseIPDB as cyber threat sources
koala73 Feb 15, 2026
fe4f420
fix: replace ipwho.is/ipapi.co with ipinfo.io/freeipapi.com for geo e…
koala73 Feb 15, 2026
d245eb9
fix: cap geo enrichment at 12s overall timeout & prevent duplicate do…
koala73 Feb 15, 2026
952573e
fix: improve cyber threat tooltip/popup UX and dot visibility
koala73 Feb 15, 2026
ab3cbd1
feat: dramatically increase cyber threat map density
koala73 Feb 15, 2026
b15cccd
fix: add Cyber Threats to System Health status panel allowlists
koala73 Feb 15, 2026
f32a5c4
feat: redesign 4 panels with table layouts and scoped styles
koala73 Feb 15, 2026
5713979
feat: add trending keyword spike detection and e2e flow test
koala73 Feb 15, 2026
5804897
fix: resolve z-index conflict between pinned map and panels grid (#67)
koala73 Feb 15, 2026
959c260
fix: harden trending spike processing and optimize hot paths
koala73 Feb 15, 2026
de4438f
docs: document cyber threats, trending keywords, oil analytics, popul…
koala73 Feb 15, 2026
72d8d1c
feat: redesign population exposure panel and reorder UCDP columns
koala73 Feb 15, 2026
eddef2a
feat: cyber threat intelligence layer, trending keyword spikes, panel…
koala73 Feb 15, 2026
eb31ba6
fix: hide desktop config panel on web, route World Bank & Polymarket …
koala73 Feb 15, 2026
ace663a
fix: restrict Railway relay CORS to allowed origins only
koala73 Feb 15, 2026
c795f4f
fix: migrate all Vercel edge functions to CORS allowlist & bump v2.2.5
koala73 Feb 15, 2026
4c5b707
chore: move test harnesses from root to tests/
koala73 Feb 15, 2026
5989c85
docs: add cyber threat API keys to .env.example
koala73 Feb 15, 2026
7a8eecc
docs: add developer X/Twitter link to Support section
koala73 Feb 15, 2026
8f6c4fb
fix: remove Market Radar and Economic Data panels from tech variant
koala73 Feb 15, 2026
d9ea8e4
fix: filter trending noise, fix sidecar auth & restore tech panels — …
koala73 Feb 15, 2026
965b4ed
fix: security hardening — CORS, auth bypass, origin validation & bump…
koala73 Feb 15, 2026
fc68cb1
fix: force immediate SW activation to prevent stale asset errors
koala73 Feb 15, 2026
93b67f2
chore: bump v2.3.0 — security hardening release with changelog
koala73 Feb 15, 2026
d8366ba
settings: verify API keys via provider probes
koala73 Feb 15, 2026
645a9cd
fix: harden CORS patterns & URL validation
koala73 Feb 15, 2026
b003b3b
fix: make sidecar secret sync best-effort
koala73 Feb 15, 2026
1acfafd
fix: NER-gate trending spike alerts to suppress common-word noise
koala73 Feb 15, 2026
14ecb9f
fix: desktop settings UX overhaul & IPv4-safe fetch for sidecar
koala73 Feb 15, 2026
1e8703b
fix: harden sidecar verification, dedupe spikes, and bump v2.3.1
koala73 Feb 15, 2026
8c92881
fix: add missing tauri script to restore CI builds
koala73 Feb 15, 2026
cef7a26
feat: add 6 verified think tank RSS feeds
InlitX Feb 15, 2026
789827b
Integrate ML NER enrichment into trending keywords
koala73 Feb 15, 2026
e3b20c6
fix: settings UX — save verified keys, preserve inputs across renders…
koala73 Feb 15, 2026
9012be3
chore: lint markdown
Sethispr Feb 15, 2026
6b776a0
chore: add PR #71 think tank domains to RSS proxy allowlist
koala73 Feb 15, 2026
6764f9b
fix: add trailing slash to FPRI feed URL to avoid Cloudflare 403
koala73 Feb 15, 2026
774fcc8
feat: add 6 verified think tank RSS feeds (#71)
koala73 Feb 15, 2026
2a79d58
chore: lint markdown (#72)
koala73 Feb 15, 2026
28c5a38
fix: harden settings key persistence with soft-pass verification & re…
koala73 Feb 15, 2026
376156d
fix: enable macOS Keychain backend for keyring crate & bump v2.3.3
koala73 Feb 15, 2026
7a3ab89
fix: strip UNC path prefix for Windows sidecar, set explicit CWD & bu…
koala73 Feb 15, 2026
0cb1c4e
fix: sync package-lock.json with markdownlint-cli2 devDependency
koala73 Feb 15, 2026
e98da5d
feat: differentiated panel error messages & auto-hide desktop config …
koala73 Feb 16, 2026
944fde8
fix: hide node.exe console window on Windows & bump v2.3.6
koala73 Feb 16, 2026
d6ebeaf
Add GitHub issue and PR templates
SebastienMelki Feb 16, 2026
91790d8
docs: fix stale documentation across project
SebastienMelki Feb 16, 2026
fc85a4a
Add GitHub issue and PR templates (#79)
koala73 Feb 16, 2026
b7be482
docs: fix stale documentation across project (#80)
koala73 Feb 16, 2026
cebe716
feat(01-01): expand :root CSS custom properties and add light theme o…
SebastienMelki Feb 16, 2026
e3ed689
feat(01-01): create getCSSColor() utility with theme-aware cache
SebastienMelki Feb 16, 2026
c24c956
feat(01-03): convert settings-window.css hardcoded colors to CSS vari…
SebastienMelki Feb 16, 2026
42dbd7b
feat(01-03): convert embedded <style> blocks in 8 TS components to CS…
SebastienMelki Feb 16, 2026
46048eb
feat(01-02): convert hardcoded colors in main.css lines 1-6000 to CSS…
SebastienMelki Feb 16, 2026
4ce48a1
docs(01-03): complete settings window & embedded style block color co…
SebastienMelki Feb 16, 2026
d0040cb
feat(01-02): convert hardcoded colors in main.css lines 6001-12276 an…
SebastienMelki Feb 16, 2026
3bcfd03
fix: remove overly broad CORS origin regex
elzalem Feb 16, 2026
a17746a
docs(01-02): complete main.css color conversion plan
SebastienMelki Feb 16, 2026
4cb6d76
fix: remove overly broad CORS origin regex (#82)
koala73 Feb 16, 2026
125a678
feat(01-04): convert component inline style colors to getCSSColor()
SebastienMelki Feb 16, 2026
ff8fb73
feat(01-04): convert service and config color functions to getCSSColor()
SebastienMelki Feb 16, 2026
48b40e0
docs(01-04): complete dynamic inline style color conversion plan
SebastienMelki Feb 16, 2026
6bd79df
feat: add finance/trading variant with market-focused dashboard
claude Feb 15, 2026
0b324aa
fix: dynamically enumerate FEEDS categories in loadNews()
Rau1CS Feb 16, 2026
5e5dfd8
fix: add finance types to PopupData union and auto-create variant panels
Rau1CS Feb 16, 2026
50d4940
feat(i18n): Implement full internationalization support for 9 languag…
Lib-LOCALE Feb 16, 2026
150d997
fix(i18n): Replace remaining hardcoded strings with t() calls in 12 c…
Lib-LOCALE Feb 16, 2026
07311bd
fix(i18n): Replace all remaining hardcoded strings in PizzInt, Playba…
Lib-LOCALE Feb 16, 2026
9dc64ed
fix(i18n): Replace all showLoading/showError hardcoded strings across…
Lib-LOCALE Feb 16, 2026
d0bc88f
fix(i18n): Final deep scan - translate panel-empty, export, and disab…
Lib-LOCALE Feb 16, 2026
58bcc1e
fix(i18n): Translate remaining title attributes and panel-empty strings
Lib-LOCALE Feb 16, 2026
c7d0658
fix(i18n): Propagate common keys to all 9 locale files & fix CountryB…
Lib-LOCALE Feb 16, 2026
5fe5c7b
Merge branch 'main' into light_mode
SebastienMelki Feb 16, 2026
5ca5da1
feat(02-01): create ThemeManager module and barrel exports
SebastienMelki Feb 16, 2026
01e6f5a
feat(02-01): add FOUC prevention scripts and wire entry points
SebastienMelki Feb 16, 2026
da01497
docs(02-01): complete ThemeManager module plan
SebastienMelki Feb 16, 2026
5862409
feat(02-02): add theme toggle UI and event wiring in App.ts
SebastienMelki Feb 16, 2026
0a374f4
feat(02-02): add CSS styles for theme toggle section in settings modal
SebastienMelki Feb 16, 2026
d2e0901
feat(03-02): convert CountryTimeline hardcoded colors to theme-aware …
SebastienMelki Feb 16, 2026
cc51f02
feat(03-02): update Map light theme CSS and add theme-change re-render
SebastienMelki Feb 16, 2026
df5ec4e
feat(03-01): make Deck.GL overlay layer colors theme-aware
SebastienMelki Feb 16, 2026
a0218a6
docs(03-01): complete DeckGL basemap and overlay theming plan
SebastienMelki Feb 16, 2026
b884624
feat(04-01): add theme transition CSS rules and fix text-muted contrast
SebastienMelki Feb 16, 2026
e7920c6
feat(04-01): add no-transition class lifecycle for FOUC prevention
SebastienMelki Feb 16, 2026
a2000bd
chore: remove .planning files from git tracking
SebastienMelki Feb 16, 2026
c42226d
fix: darken neon semantic colors for light mode readability
SebastienMelki Feb 16, 2026
b165299
fix: use darken-* variables for dark overlay backgrounds
koala73 Feb 16, 2026
5c18f53
feat: add light mode theme with full UI, map, and chart theming (#84)
koala73 Feb 16, 2026
1c9e8e7
fix(windows): preserve UNC paths when sanitizing sidecar script path
koala73 Feb 16, 2026
8f7dafe
fix(markets): keep Yahoo-backed data visible when Finnhub is skipped
koala73 Feb 16, 2026
12764ed
feat(update): add desktop update check with architecture-aware downlo…
koala73 Feb 16, 2026
2de21f2
CORS fixes for Tauri desktop app
koala73 Feb 16, 2026
3a88718
feat(header): replace UTC clock with dark/light mode toggle
koala73 Feb 16, 2026
6561592
Adding Node in the Tauri Installer
koala73 Feb 16, 2026
712b9e4
docs: update documentation, release packaging, and validation report
koala73 Feb 16, 2026
17cf7fa
chore: add markdown linting config and CI workflow
koala73 Feb 16, 2026
4b2e8d6
chore: add ideas/ to .gitignore
koala73 Feb 16, 2026
08326b8
refactor(header): remove redundant theme toggle from panels modal
koala73 Feb 16, 2026
91c00a6
feat(panels): enable UCDP, UNHCR, Climate, and Population panels by d…
koala73 Feb 16, 2026
a016359
release: v2.3.7
koala73 Feb 16, 2026
2c32893
chore(ai): switch OpenRouter model to auto-routed free tier
koala73 Feb 16, 2026
78feaec
fix(desktop): batch keychain reads to reduce macOS password prompts
koala73 Feb 16, 2026
f56087d
fix(panels): standardize error messages with specific causes
koala73 Feb 16, 2026
70807b9
fix(banner): hide desktop download prompt on mobile devices
koala73 Feb 17, 2026
d43e62a
fix: wire timeline filtering across map and news panels
koala73 Feb 17, 2026
03feeb8
fix(finance): address PR review blocking issues
koala73 Feb 17, 2026
06abd95
fix(finance): keep data panels and add desktop finance map layers
koala73 Feb 17, 2026
a8a4f54
Fix finance variant runtime resiliency and API pressure
koala73 Feb 17, 2026
cb5ed08
Merge remote-tracking branch 'origin/main' into feature/finance-variant
koala73 Feb 17, 2026
2d60bc2
Harden full and tech variants against feed/API pressure
koala73 Feb 17, 2026
ca2f648
fix(trending): suppress noisy finance/generic terms from keyword spikes
koala73 Feb 17, 2026
ecdbcea
merge(main): integrate finance variant and resilience hardening
koala73 Feb 17, 2026
1ae0112
chore(release): finalize 2.3.8 changelog and version
koala73 Feb 17, 2026
23b20ba
i18n: restructure and translate popups section across all locales
Lib-LOCALE Feb 17, 2026
92d4a53
fix(deploy): prevent stale chunk 404s after Vercel redeployment
koala73 Feb 17, 2026
5ff2710
fix(trending): suppress month names and strip source attributions fro…
koala73 Feb 17, 2026
532ae7c
feat(header): move UTC clock from map overlay to centered header bar
koala73 Feb 17, 2026
30f9580
fix: resolve P2 reload guard and harness assertion drift
koala73 Feb 17, 2026
227777e
feat: add Gulf FDI investment database and panel component
aa5064 Feb 17, 2026
99d0350
feat(finance): integrate GCC investments into finance variant
koala73 Feb 17, 2026
7021995
fix(finance): enable GCC investments layer and stabilize GCC feeds
koala73 Feb 17, 2026
3c074bb
fix(cors): add finance.worldmonitor.app to Railway proxy allowlist
koala73 Feb 17, 2026
68c3fc6
chore: add finance variant to GitHub issue templates
koala73 Feb 17, 2026
834ab3e
fix: disable map repetition & use English-only vector labels
SebastienMelki Feb 17, 2026
786e888
feat: auto-detect OS in download banner, show only relevant platform
SebastienMelki Feb 17, 2026
6397d3d
fix(map): prevent popups from overflowing below viewport edge
koala73 Feb 17, 2026
2f557a9
docs: add finance variant, Gulf FDI, tri-variant architecture to README
koala73 Feb 17, 2026
4969ac2
fix: rehydrate country layers after setStyle theme switch
koala73 Feb 17, 2026
ac4b909
fix: persist country highlight across theme switches
koala73 Feb 17, 2026
84d33bf
Merge pull request #92 from koala73/fix/map-no-repeat-no-labels
koala73 Feb 17, 2026
d1015ce
fix: detect Intel Macs and fall back to showing both Mac options
koala73 Feb 17, 2026
e5da556
fix: show both Mac options (not Windows) for undetected Mac arch
koala73 Feb 17, 2026
de82d04
feat: auto-detect OS in download banner (#93)
koala73 Feb 17, 2026
6b0448d
test: add coverage for finance/trending/reload and stabilize map harness
koala73 Feb 17, 2026
b72b7c8
fix: guard invalid RSS dates and replace dead/blocked feed URLs
koala73 Feb 17, 2026
b2dc74d
fix: replace 7 more dead/blocked tech RSS feeds with Google News fall…
koala73 Feb 17, 2026
5612ecf
feat: add BBC Persian, Iran International, Fars News, MIIT & MOFCOM f…
koala73 Feb 17, 2026
573fd80
chore: trigger Vercel redeploy (edge function transient failure)
koala73 Feb 17, 2026
56f385d
chore: retrigger Vercel deploy
koala73 Feb 17, 2026
6372c83
chore(release): bump version to 2.3.8
koala73 Feb 17, 2026
6ae7b4b
feat: add toggle to disable Intelligence Findings badge
SebastienMelki Feb 17, 2026
d426010
fix: resolve findings toggle state and badge listener lifecycle
koala73 Feb 17, 2026
31dc382
feat: add toggle to disable Intelligence Findings badge (#97)
koala73 Feb 17, 2026
8236010
merge(main): update PR #86 and resolve merge conflicts
koala73 Feb 17, 2026
b7ed026
fix(css): define --panel-bg and --panel-border theme variables
koala73 Feb 17, 2026
8823952
fix(i18n): close key coverage gaps and localize merged UI strings
koala73 Feb 17, 2026
be44332
fix(trending): add missing English stopwords to suppressed terms
koala73 Feb 17, 2026
a019b1c
fix(trending): add missing English stopwords to suppressed terms
koala73 Feb 17, 2026
a1355d9
fix(i18n): localize remaining UI literals and expand locale coverage
koala73 Feb 17, 2026
dfe9924
fix(i18n): localize remaining map/tooltips/popups and close locale gaps
koala73 Feb 17, 2026
adb22c0
feat(i18n): add Russian locale and fix key parity across all 10 langu…
koala73 Feb 17, 2026
7a72c38
fix(trending): add proper-noun heuristic fallback when ML unavailable
koala73 Feb 17, 2026
c2f8968
fix(trending): add proper-noun heuristic fallback when ML unavailable
koala73 Feb 17, 2026
d7622a2
feat: add floating pill community discussion widget
koala73 Feb 17, 2026
afccb1c
feat: add community discussion floating pill widget
koala73 Feb 17, 2026
291621a
fix(trending): proper-noun heuristic handles headline-start and lower…
koala73 Feb 17, 2026
3fca5b7
fix(css): remove broken @import for missing lang-switcher and rtl-ove…
koala73 Feb 17, 2026
1d01899
feat(i18n): add Arabic (RTL) and Chinese Simplified locales
koala73 Feb 17, 2026
9124207
style(community): vibrant green accent for discussion pill widget
koala73 Feb 17, 2026
9817593
fix(community): point discussion link to main discussions page
koala73 Feb 17, 2026
da3c073
fix(css): restore intel-findings context menu styles removed in afccb1c
koala73 Feb 17, 2026
c874d93
feat(i18n): eliminate ~95 hardcoded English strings and remove dead U…
koala73 Feb 18, 2026
4c73cbb
fix(i18n): fix 5 P1/P2 bugs — timeAgo count, community widget, Linux …
koala73 Feb 18, 2026
e2c68d3
fix(i18n): normalize regional language codes in RTL detection
koala73 Feb 18, 2026
01cf5a3
fix(i18n): replace remaining hardcoded English in source and locales
koala73 Feb 18, 2026
c9c2047
feat(i18n): add Japanese locale (1132 keys)
koala73 Feb 18, 2026
d559af5
fix(i18n): remove dead English fallback literals in CountryIntelModal
koala73 Feb 18, 2026
79f9f49
fix(i18n): remove dead English fallback literals in StoryModal
koala73 Feb 18, 2026
304a04c
feat(feeds): add NHK World and Nikkei Asia RSS feeds for Japan coverage
koala73 Feb 18, 2026
20d26ee
feat(feeds): add NHK World and Nikkei Asia RSS feeds for Japan coverage
koala73 Feb 18, 2026
be2a01d
fix: community widget idempotency guard + suppress missing i18n help …
koala73 Feb 18, 2026
c798ba9
chore: bump version to 2.3.9
koala73 Feb 18, 2026
723a622
merge: resolve conflicts with main (community widget, trending keywor…
koala73 Feb 18, 2026
f0f34f8
feat(i18n): full internationalization — 14 locales, zero hardcoded En…
koala73 Feb 18, 2026
9ba2315
docs: add v2.3.9 changelog
koala73 Feb 18, 2026
41726df
fix: gate SignalModal auto-popup on findings toggle
SebastienMelki Feb 18, 2026
33e9f4a
feat: add La Silla Vacía (Colombia) to LATAM feeds
SebastienMelki Feb 18, 2026
7d393c6
feat: add La Silla Vacía (Colombia) to LATAM feeds (#102)
koala73 Feb 18, 2026
0eb2d4a
fix: gate SignalModal auto-popup on findings toggle (#101)
koala73 Feb 18, 2026
1d2300c
feat(i18n): comprehensive localization, RTL support, and regional fee…
Lib-LOCALE Feb 18, 2026
a54da82
feat: integrate Sentry browser error tracking
koala73 Feb 18, 2026
8dabec9
fix: gracefully handle YouTube IFrame API load failure
koala73 Feb 18, 2026
3ffe3da
fix: resolve Sentry errors — IndexedDB stale connection, USASpending …
koala73 Feb 18, 2026
ddc033c
fix: filter non-actionable Sentry errors (autoplay, WebView, deck.gl,…
koala73 Feb 18, 2026
a2ff961
fix: gracefully handle IndexedDB connection-closing errors on iOS
koala73 Feb 18, 2026
8f676b4
fix: expand Sentry noise filtering and address code review findings
koala73 Feb 18, 2026
35cffab
fix(sentry): broaden Failed to fetch filter to catch domain-suffixed …
koala73 Feb 18, 2026
ceaafcc
fix(sentry): guard deck.gl setProps during WebGL context loss and add…
koala73 Feb 18, 2026
af0053c
fix(sentry): fullscreen Promise catch, narrow fetch filter, and class…
koala73 Feb 18, 2026
23b8aac
fix(sentry): safari fullscreen void return, narrow module-import filt…
koala73 Feb 18, 2026
cc8ed95
fix: isolate baseline writes from fetch/render and guard snapshot rej…
koala73 Feb 18, 2026
df9e834
fix: add console.warn to silent storage catch blocks for diagnosability
koala73 Feb 18, 2026
f324652
fix: guard YT player .mute()/.unMute() with optional chaining, filter…
koala73 Feb 18, 2026
bb10add
fix(sentry): filter maplibre internal null-access crashes (light, pla…
koala73 Feb 18, 2026
2a53688
fix(sentry): narrow shader link filter to null-only to preserve real …
koala73 Feb 18, 2026
daa61c7
fix(sentry): broaden Failed to fetch filter to match domain-suffixed …
koala73 Feb 18, 2026
49cf1d4
fix: wire up missing API status indicators (GDELT Doc, EIA, USASpendi…
koala73 Feb 18, 2026
41ac5f3
fix: validate API response data before reporting ok, narrow maplibre …
koala73 Feb 18, 2026
8051043
fix(i18n): scope caches by locale and lazy-load translations
koala73 Feb 18, 2026
05962b2
feat: add developer beta mode for T5-small evaluation
koala73 Feb 18, 2026
512fb0f
feat: add developer beta mode for T5-small evaluation (#108)
koala73 Feb 18, 2026
06c7e52
merge: resolve main conflicts in App and feeds for PR #103
koala73 Feb 18, 2026
461113c
merge: sync latest main and resolve App import conflict
koala73 Feb 18, 2026
6ac38b6
feat(i18n): Comprehensive Localization & Regional Intelligence (#103)
koala73 Feb 18, 2026
d939c20
fix(sentry): guard .closest() call on non-Element event target in Pan…
koala73 Feb 18, 2026
779fa80
fix(ml): resolve beta mode race condition and timeout failures
koala73 Feb 18, 2026
48a30c4
Improve mobile map popup QA
koala73 Feb 18, 2026
7231ceb
Disable intelligence alerts on mdl
koala73 Feb 18, 2026
2706583
feat: add live webcams panel with localized labels
koala73 Feb 18, 2026
4bee723
fix(ui): repair malformed HTML tags in panel template literals
koala73 Feb 18, 2026
efba484
fix(rss): add 8 missing domains to proxy allowlist
koala73 Feb 18, 2026
a8ffd44
feat(download): add Linux (.AppImage) to download banner
koala73 Feb 18, 2026
33ba12d
fix(webcams): diverse ALL grid, reorder feeds, fix icons and Berlin
koala73 Feb 18, 2026
da99f55
fix(webcams): idle resume bug and mobile single-view escape
koala73 Feb 18, 2026
f631768
fix(webcams): replace dead Tokyo feed, reorder Asia-Pacific
koala73 Feb 18, 2026
ea5811b
fix(webcams): curate ALL grid to Jerusalem, Tehran, Kyiv, Washington
koala73 Feb 18, 2026
4547f24
feat(webcams): add LA and Miami to fill Americas grid to 4
koala73 Feb 18, 2026
c29ae4d
fix(webcams): replace Dubai/Istanbul with Tel Aviv/Mecca, RTL fix
koala73 Feb 18, 2026
ff71c11
fix: use viewport width only for mobile detection (fixes touch notebo…
Niboshi-Wasabi Feb 18, 2026
17b49c8
feat: add live webcams panel with localized labels (#111)
koala73 Feb 18, 2026
f778b9c
Disable intelligence alerts on mobile (#110)
koala73 Feb 18, 2026
4839361
Improve mobile map popup usability quirks (sheet/touch/controls layou…
koala73 Feb 18, 2026
09174fd
fix(sentry): triage 5 unresolved issues — 3 fixes, 2 noise filters
koala73 Feb 18, 2026
f04bf90
Merge branch 'fix/mobile-detection-width-only'
koala73 Feb 18, 2026
1c14201
release: v2.4.0 — live webcams, mobile detection fix, sentry triage
koala73 Feb 18, 2026
ce4c5ed
fix(css): replace undefined --bg-panel
cwnicoletti Feb 19, 2026
6924337
chore: switch license to AGPL-3.0, externalize Sentry DSN
koala73 Feb 19, 2026
0c94aad
fix: background transparency to correct colored background (#116)
koala73 Feb 19, 2026
f30b2dc
chore: enforce desktop version sync
koala73 Feb 19, 2026
60d8622
fix(tauri): suppress native WKWebView context menu for custom right-c…
koala73 Feb 19, 2026
3c8fd18
Integrate AI4U provider, add full vi locale parity, and apply maize/b…
AI4Unow Feb 19, 2026
40e0f16
Set Vietnamese as default locale
AI4Unow Feb 19, 2026
57305ee
Add inline translation for Live Intelligence and Predictions cards
AI4Unow Feb 19, 2026
af74ed0
Auto-translate card headlines for non-English locales
AI4Unow Feb 19, 2026
79e7e94
Allow worldmonitor Vercel preview domains in API CORS
AI4Unow Feb 19, 2026
ffb87e2
chore: trigger redeploy after AI4U_API_KEY update
AI4Unow Feb 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 32 additions & 0 deletions .claudedocs/sentry-triage/2026-02-19.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Sentry Triage — 2026-02-19

Commit: `09174fd` on `main`

## Issues Triaged (5)

### ACTIONABLE — Fixed in Code

| ID | Title | Events | Users | Fix |
|---|---|---|---|---|
| WORLDMONITOR-1G | `Error: ML request unload-model timed out after 120000ms` | 30 | 27 | Wrapped `unloadModel()` in try/catch; timeout no longer leaks as unhandled rejection. Cleans up `loadedModels` set on failure. |
| WORLDMONITOR-1F | `Error: ML request unload-model timed out after 120000ms` | 9 | 9 | Same root cause as 1G (different release build hash). |
| WORLDMONITOR-1K | `TypeError: this.player.playVideo is not a function` | 1 | 1 | Added optional chaining (`playVideo?.()`, `pauseVideo?.()`) in `LiveNewsPanel.ts`. YT IFrame API player object may not have methods ready during initialization race. |

### NOISE — Filtered

| ID | Title | Events | Users | Filter |
|---|---|---|---|---|
| WORLDMONITOR-1J | `InternalError: too much recursion` | 1 | 1 | i18next internal `translate -> extractFromKey` cycle on Firefox 147. Added `/too much recursion/` to `ignoreErrors`. |
| WORLDMONITOR-1H | `TypeError: Cannot read properties of null (reading 'id')` | 1 | 1 | maplibre-gl internal render crash (`_drawLayers -> renderLayers`). Extended `beforeSend` regex to suppress null `id`/`type` when stack is in map chunk. |

## Files Modified

| File | Change |
|---|---|
| `src/services/ml-worker.ts` | `unloadModel()`: try/catch around `this.request()`, clean `loadedModels` on failure |
| `src/components/LiveNewsPanel.ts` | Optional chaining on `playVideo?.()` and `pauseVideo?.()` |
| `src/main.ts` | Added `/too much recursion/` to `ignoreErrors`; extended maplibre `beforeSend` filter for null `id`/`type` |

## Sentry Status

All 5 issues marked **resolved (in next release)** via API. They will auto-reopen if errors recur after deployment.
130 changes: 130 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# ============================================
# World Monitor — Environment Variables
# ============================================
# Copy this file to .env.local and fill in the values you need.
# All keys are optional — the dashboard works without them,
# but the corresponding features will be disabled.
#
# cp .env.example .env.local
#
# ============================================


# ------ AI Provider (Vercel / Desktop Sidecar) ------

# Unified OpenAI-compatible provider at https://api.ai4u.now
# API docs: /Users/nad/My Drive (duc.a.nguyen@gmail.com)/ai4u.now/apps/api4llms/docs/llm-proxy-user-manual.md
AI4U_API_KEY=

# Optional: override base URL (defaults to https://api.ai4u.now/v1)
# AI4U_BASE_URL=https://api.ai4u.now/v1

# Optional: model overrides
# AI4U_CHAT_MODEL=sonnet-4.5
# AI4U_SUMMARY_MODEL=sonnet-4.5
# AI4U_SUMMARY_FALLBACK_MODEL=gemini-3-flash
# AI4U_CLASSIFY_MODEL=gemini-3-flash
# AI4U_COUNTRY_INTEL_MODEL=sonnet-4.5
# AI4U_EMBEDDING_MODEL=text-embedding-005


# ------ Cross-User Cache (Vercel — Upstash Redis) ------

# Used to deduplicate AI calls and cache risk scores across visitors.
# Create a free Redis database at: https://upstash.com/
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=


# ------ Market Data (Vercel) ------

# Finnhub (primary stock quotes — free tier available)
# Register at: https://finnhub.io/
FINNHUB_API_KEY=


# ------ Energy Data (Vercel) ------

# U.S. Energy Information Administration (oil prices, production, inventory)
# Register at: https://www.eia.gov/opendata/
EIA_API_KEY=


# ------ Economic Data (Vercel) ------

# FRED (Federal Reserve Economic Data)
# Register at: https://fred.stlouisfed.org/docs/api/api_key.html
FRED_API_KEY=


# ------ Aircraft Tracking (Vercel) ------

# Wingbits aircraft enrichment (owner, operator, type)
# Contact: https://wingbits.com/
WINGBITS_API_KEY=


# ------ Conflict & Protest Data (Vercel) ------

# ACLED (Armed Conflict Location & Event Data — free for researchers)
# Register at: https://acleddata.com/
ACLED_ACCESS_TOKEN=


# ------ Internet Outages (Vercel) ------

# Cloudflare Radar API (requires free Cloudflare account with Radar access)
CLOUDFLARE_API_TOKEN=


# ------ Satellite Fire Detection (Vercel) ------

# NASA FIRMS (Fire Information for Resource Management System)
# Register at: https://firms.modaps.eosdis.nasa.gov/
NASA_FIRMS_API_KEY=


# ------ Railway Relay (scripts/ais-relay.cjs) ------
# The relay server handles AIS vessel tracking and OpenSky aircraft data.
# Deploy on Railway with: node scripts/ais-relay.cjs

# AISStream API key for live vessel positions
# Get yours at: https://aisstream.io/
AISSTREAM_API_KEY=

# OpenSky Network OAuth2 credentials (higher rate limits for cloud IPs)
# Register at: https://opensky-network.org/
OPENSKY_CLIENT_ID=
OPENSKY_CLIENT_SECRET=


# ------ Railway Relay Connection (Vercel → Railway) ------

# Server-side URL (https://) — used by Vercel edge functions to reach the relay
WS_RELAY_URL=

# Client-side URL (wss://) — used by the browser to connect via WebSocket
VITE_WS_RELAY_URL=


# ------ Public Data Sources (no keys required) ------

# UCDP (Uppsala Conflict Data Program) — public API, no auth
# UNHCR (UN Refugee Agency) — public API, no auth (CC BY 4.0)
# Open-Meteo — public API, no auth (processes Copernicus ERA5)
# WorldPop — public API, optional key for higher rate limits
# WORLDPOP_API_KEY=


# ------ Site Configuration ------

# Site variant: "full" (worldmonitor.app) or "tech" (tech.worldmonitor.app)
VITE_VARIANT=full

# Client-side Sentry DSN (optional). Leave empty to disable error reporting.
VITE_SENTRY_DSN=

# Map interaction mode:
# - "flat" keeps pitch/rotation disabled (2D interaction)
# - "3d" enables pitch/rotation interactions (default)
VITE_MAP_INTERACTION_MODE=3d
85 changes: 85 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Bug Report
description: Report a bug in World Monitor
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report a bug! Please fill out the sections below so we can reproduce and fix it.

- type: dropdown
id: variant
attributes:
label: Variant
description: Which variant are you using?
options:
- worldmonitor.app (Full / Geopolitical)
- tech.worldmonitor.app (Tech / Startup)
- finance.worldmonitor.app (Finance)
- Desktop app (Windows)
- Desktop app (macOS)
validations:
required: true

- type: dropdown
id: area
attributes:
label: Affected area
description: Which part of the app is affected?
options:
- Map / Globe
- News panels / RSS feeds
- AI Insights / World Brief
- Market Radar / Crypto
- Service Status
- Trending Keywords
- Country Brief pages
- Live video streams
- Desktop app (Tauri)
- Settings / API keys
- Other
validations:
required: true

- type: textarea
id: description
attributes:
label: Bug description
description: A clear description of what the bug is.
placeholder: Describe the bug...
validations:
required: true

- type: textarea
id: steps
attributes:
label: Steps to reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See error
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
description: What you expected to happen.
validations:
required: true

- type: textarea
id: screenshots
attributes:
label: Screenshots / Console errors
description: If applicable, add screenshots or paste browser console errors.

- type: input
id: browser
attributes:
label: Browser & OS
description: e.g. Chrome 120 on Windows 11, Safari 17 on macOS Sonoma
placeholder: Chrome 120 on Windows 11
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Documentation
url: https://github.com/koala73/worldmonitor/blob/main/docs/DOCUMENTATION.md
about: Read the full documentation before opening an issue
- name: Discussions
url: https://github.com/koala73/worldmonitor/discussions
about: Ask questions and share ideas in Discussions
55 changes: 55 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Feature Request
description: Suggest a new feature or improvement
labels: ["enhancement"]
body:
- type: markdown
attributes:
value: |
Have an idea for World Monitor? We'd love to hear it!

- type: dropdown
id: area
attributes:
label: Feature area
description: Which area does this feature relate to?
options:
- Map / Globe / Data layers
- News panels / RSS feeds
- AI / Intelligence analysis
- Market data / Crypto
- Desktop app
- UI / UX
- API / Backend
- Other
validations:
required: true

- type: textarea
id: description
attributes:
label: Description
description: A clear description of the feature you'd like.
placeholder: I'd like to see...
validations:
required: true

- type: textarea
id: problem
attributes:
label: Problem it solves
description: What problem does this feature address? What's the use case?
placeholder: This would help with...
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Have you considered any alternative solutions or workarounds?

- type: textarea
id: context
attributes:
label: Additional context
description: Any mockups, screenshots, links, or references that help illustrate the idea.
69 changes: 69 additions & 0 deletions .github/ISSUE_TEMPLATE/new_data_source.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: New Data Source
description: Suggest a new RSS feed, API, or map layer
labels: ["data-source"]
body:
- type: markdown
attributes:
value: |
World Monitor aggregates 100+ feeds and data layers. Suggest a new one!

- type: dropdown
id: type
attributes:
label: Source type
description: What kind of data source is this?
options:
- RSS / News feed
- API integration
- Map layer (geospatial data)
- Live video stream
- Status page
- Other
validations:
required: true

- type: dropdown
id: variant
attributes:
label: Target variant
description: Which variant should this appear in?
options:
- Full (Geopolitical)
- Tech (Startup)
- Finance
- All variants
validations:
required: true

- type: input
id: source-name
attributes:
label: Source name
description: Name of the source or organization.
placeholder: e.g. RAND Corporation, CoinDesk, USGS
validations:
required: true

- type: input
id: url
attributes:
label: Feed / API URL
description: Direct URL to the RSS feed, API endpoint, or data source.
placeholder: https://example.com/rss
validations:
required: true

- type: textarea
id: description
attributes:
label: Why add this source?
description: What value does this source bring? What does it cover that existing sources don't?
placeholder: This source provides coverage of...
validations:
required: true

- type: textarea
id: notes
attributes:
label: Additional notes
description: Any details about rate limits, authentication requirements, data format, or category placement.
Loading