Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1096 commits
Select commit Hold shift + click to select a range
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
8cc31d5
feat: harden desktop updater flow
koala73 Feb 19, 2026
b828a15
feat: ultra-wide layout — panels wrap around map on 2000px+ screens
koala73 Feb 19, 2026
0eed90f
fix(sentry): broaden ignoreErrors regex for smart-quote apostrophe va…
koala73 Feb 19, 2026
8ce6908
release: v2.4.1 — README overhaul, sentry triage, ultra-wide layout
koala73 Feb 19, 2026
007f679
chore: fix spacing issues and formatting
Sethispr Feb 19, 2026
b3efe06
chore: fix spacing issues and formatting (#118)
koala73 Feb 19, 2026
28c691d
fix(sentry): triage 3 issues — 2 noise filters, 1 beforeSend fix
koala73 Feb 19, 2026
9b248e3
fix: exclude HTML from Workbox precache glob
koala73 Feb 19, 2026
f864812
feat: add llms.txt and llms-full.txt for LLM discoverability
koala73 Feb 19, 2026
3551984
feat(i18n): add Turkish language support (14th language)
koala73 Feb 19, 2026
5faf469
fix: restore update link fallback and PWA nav precache
koala73 Feb 19, 2026
b0372d7
Fix wide-screen panel layout gaps and drag reorder behavior
koala73 Feb 19, 2026
8821db0
fix(sentry): filter Safari "Importing a module script failed" noise
koala73 Feb 19, 2026
4a5a32b
Fix ultrawide map height mismatch and re-enable map resize
koala73 Feb 19, 2026
84a3735
feat(i18n): add theater name translations and webcam region localizat…
koala73 Feb 19, 2026
705be56
feat(i18n): localize remaining hardcoded English in 6 panel components
koala73 Feb 19, 2026
9fd166a
feat: add Ollama (OpenAI-compatible) local LLM summarization support
claude Feb 19, 2026
c2fe564
test: add Ollama provider tests across endpoint, sidecar, and chain l…
claude Feb 19, 2026
1fd0515
refactor: unify summarization providers behind common interfaces
claude Feb 19, 2026
080af26
fix: resolve TS build errors and add missing Ollama keys to Rust keyring
koala73 Feb 19, 2026
33e0b60
fix: harden OpenAI-compatible endpoint flow for Ollama/LM Studio
koala73 Feb 19, 2026
4cff5bf
fix: show URL and model inputs as plaintext instead of masked passwor…
koala73 Feb 19, 2026
1a08d8a
feat: split settings into LLMs and API Keys tabs, fix keychain vault …
koala73 Feb 19, 2026
4ca00c6
docs: add Ollama/local LLM coverage to community promotion guide
koala73 Feb 19, 2026
73492ac
fix(sentry): null guard getProjection crash and add 6 noise filters
koala73 Feb 19, 2026
bd8c94c
fix: resolve markdown lint errors in docs
koala73 Feb 19, 2026
3520530
Add Ollama support to summarization chain with shared handler factory…
koala73 Feb 19, 2026
5b4b9dd
fix(map): clear PathLayer cache on toggle-off to prevent stale WebGL …
koala73 Feb 19, 2026
493b8cf
feat: add 5 defense/intel RSS feeds (Military Times, Task & Purpose, …
koala73 Feb 19, 2026
def8de9
feat: add Koeberg nuclear power plant (South Africa) to facilities map
koala73 Feb 19, 2026
c7aeabb
release: v2.5.0 — Ollama/LM Studio local LLM support, settings tabs, …
koala73 Feb 19, 2026
8fe2271
fix: sync Cargo.toml version to 2.5.0 (was missed in release commit)
koala73 Feb 19, 2026
1ca0319
fix: add Desktop app (Linux), LLMs settings, and live webcams to bug …
koala73 Feb 19, 2026
3905094
fix: replace Polymarket prod proxy with local Vite middleware plugin
koala73 Feb 19, 2026
a2c0256
fix: implement live-stream detection in youtubeLivePlugin dev middleware
claude Feb 19, 2026
16bc9d5
Fix setInterval clock leak in startHeaderClock()
claude Feb 19, 2026
3008b68
chore: sync package-lock.json with package.json version
claude Feb 19, 2026
d60a4c2
feat: pre-render critical CSS skeleton in index.html for instant perc…
claude Feb 19, 2026
02d60fe
perf: tree-shake unused locale files from initial bundle
claude Feb 19, 2026
bb8c180
fix: replace hardcoded English strings with i18n t() calls
claude Feb 19, 2026
8896373
chore: sync package-lock.json version to 2.5.0
claude Feb 19, 2026
9c6fa07
fix: internationalize verification checklist labels
claude Feb 19, 2026
a1b4b9a
perf: add CSS contain: content to .panel for layout isolation
claude Feb 19, 2026
d85f1b7
perf: add will-change hints to animated elements for GPU compositing
claude Feb 19, 2026
be92813
chore: update package-lock.json
claude Feb 19, 2026
539b92e
fix(runtime): block cloud fallback for local-only api routes
lawyered0 Feb 20, 2026
50c3abb
fix(pwa): prevent stale HTML precache regression
lawyered0 Feb 19, 2026
b70cacc
fix(pwa): disable default navigateFallback in generated SW
lawyered0 Feb 19, 2026
a2ba2a0
fix: update Sentry noise filters for CSP regex and truncated loads
koala73 Feb 20, 2026
d799aca
Add Linux-safe fallback when DeckGL WebGL2 is unavailable
koala73 Feb 20, 2026
638c938
docs(runtime): document local-only API boundary
koala73 Feb 20, 2026
2ca033f
fix(runtime+pwa): block local-secret cloud fallback and stale HTML pr…
koala73 Feb 20, 2026
1384f0c
Handle per-cluster render failures in NewsPanel
koala73 Feb 20, 2026
dd4a2d5
Fix deep-link polling retries and timeout error
koala73 Feb 20, 2026
653d2cf
Add build-time Brotli precompression for static assets
koala73 Feb 20, 2026
035bcd0
Debounce panel content updates to reduce rerenders
koala73 Feb 20, 2026
69a1dc4
fix: harden map fallback and add regression coverage
koala73 Feb 20, 2026
e83f45d
WebGL2/DeckGL fails (Linux Mint example) (#142)
koala73 Feb 20, 2026
c10c22e
Fix memory leak: properly clear clock interval on cleanup (#143)
koala73 Feb 20, 2026
64f833b
fix: scope videoId and isLive to same videoDetails block
claude Feb 20, 2026
01695ed
Add i18n support for UI components and new features (#151)
koala73 Feb 20, 2026
ff9a1e1
Implement YouTube live stream detection via HTML parsing (#144)
koala73 Feb 20, 2026
3fbc06e
Track missing backend feeds in data freshness
koala73 Feb 20, 2026
918a96f
Missing GDELT Doc in Data Freshness Tracker (#165)
koala73 Feb 20, 2026
ce4accc
Add Brotli pre-compression for Vite build assets (#162)
koala73 Feb 20, 2026
0e7d707
Merge main into tree-shake-locale-files, resolve workbox conflict
claude Feb 20, 2026
d417520
Optimize i18n bundle with lazy-loaded locale files (#167)
koala73 Feb 20, 2026
7b3e56c
Add Brotli-first API compression for sidecar and nginx
koala73 Feb 20, 2026
ef8a40b
Add Brotli-first compression for local API sidecar and Nginx proxy (#…
koala73 Feb 20, 2026
1eb2932
Handle per-cluster render failures in NewsPanel (#159)
koala73 Feb 20, 2026
ea2079f
Fix deep-link polling from retrying indefinitely (#160)
koala73 Feb 20, 2026
af6292c
Add CSS containment to panel elements for performance (#152)
koala73 Feb 20, 2026
65e3c66
PERF-010: Debounce Panel.setContent to reduce re-renders (#163)
koala73 Feb 20, 2026
cd12f4f
Optimize GPU memory usage with will-change CSS property (#155)
koala73 Feb 20, 2026
375527a
Add skeleton loading screen to prevent FOUC (#146)
koala73 Feb 20, 2026
893279b
feat: integrate USNI fleet tracker and add parser tests
koala73 Feb 20, 2026
6d94e5e
fix: widen SW globIgnore to exclude all ML JS chunks
koala73 Feb 20, 2026
e882033
Add IndexedDB-backed persistent API caching
koala73 Feb 20, 2026
d7ef62c
fix: use graph edges for infra cascade capacity instead of hardcoded 0.1
koala73 Feb 20, 2026
c2503fc
IndexedDB-backed persistent cache + stale-while-revalidate API respon…
koala73 Feb 20, 2026
cb24b22
fix(sidecar): deduplicate Vary header tokens with appendVary helper
koala73 Feb 20, 2026
cf492c9
perf: split i18next, sentry, and panels into separate chunks
koala73 Feb 20, 2026
c7e753b
perf: move inline panel styles to panels.css, loaded once via main.cs…
koala73 Feb 20, 2026
b14a994
fix: update Sentry noise filters for Safari fullscreen and deck.gl nu…
koala73 Feb 20, 2026
ad82544
feat: abort in-flight fetch requests on panel destroy and page hide
koala73 Feb 20, 2026
a890151
refactor: replace innerHTML with programmatic DOM via h() hyperscript
koala73 Feb 20, 2026
b6905ae
fix: suppress maplibre-internal TypeErrors in Sentry beforeSend
koala73 Feb 20, 2026
52f1ffd
fix: add Sentry noise filter for Android WebView bridge errors
koala73 Feb 20, 2026
bf5e0ea
fix: stabilize E2E tests and fix InvestmentsPanel event delegation
koala73 Feb 20, 2026
d5a726a
fix: shared fetch abort isolation and USNI vessel augmentation
koala73 Feb 20, 2026
3e393f1
perf: reduce Vercel costs — extend API cache TTLs and skip non-code b…
koala73 Feb 20, 2026
8760187
refactor: extract duplicate layerToSource mapping to LAYER_TO_SOURCE …
koala73 Feb 20, 2026
9846afe
perf: add bot protection middleware and robots.txt to reduce API abuse
koala73 Feb 20, 2026
fb3a99b
fix: harden API routes, batch FRED requests, and sanitize tooltip HTML
koala73 Feb 20, 2026
56b1175
fix: use per-entry TTL for UCDP fallbackCache to expire partial resul…
koala73 Feb 20, 2026
a6894c7
fix: derive cache headers from partial flag on cache hits & widen Loa…
koala73 Feb 20, 2026
d311060
release: v2.5.1 — batch FRED, parallel UCDP, partial cache TTL, bot m…
koala73 Feb 20, 2026
4623576
fix: replace weak DJB2 hash with FNV-1a 64-bit and cancel GeoIP worke…
Rau1CS Feb 20, 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.
123 changes: 123 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# ============================================
# 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 Summarization (Vercel) ------

# Groq API (primary — 14,400 req/day on free tier)
# Get yours at: https://console.groq.com/
GROQ_API_KEY=

# OpenRouter API (fallback — 50 req/day on free tier)
# Get yours at: https://openrouter.ai/
OPENROUTER_API_KEY=


# ------ 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
88 changes: 88 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
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)
- Desktop app (Linux)
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
- Settings / LLMs (Ollama, Groq, OpenRouter)
- Live webcams
- 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