Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1184 commits
Select commit Hold shift + click to select a range
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
d9b20ef
fix: sentry triage — quota guard, video ID validation, map race condi…
koala73 Feb 20, 2026
5b1c61b
Proto-first API rebuild: sebuf contracts, handlers, gateway, and gene…
SebastienMelki Feb 20, 2026
a8f6ab7
fix: prevent Vercel build skip when previous SHA is empty
koala73 Feb 20, 2026
62a1e03
release: v2.5.2 — quota guard, map race fixes, Vercel build skip fix
koala73 Feb 20, 2026
42beac5
docs: expand README with proto-first API, cable health, OG images, an…
koala73 Feb 20, 2026
37c94e1
perf: faster panel loading — instant flat render, higher concurrency …
Rau1CS Feb 21, 2026
6c38bd8
fix(sidecar): preserve Request body semantics in ipv4 shim (#205)
lawyered0 Feb 21, 2026
4c4da45
fix(sidecar): preserve request body on cloud fallback (#209)
lawyered0 Feb 21, 2026
6912079
fix: sentry triage — noise filters and formatOilValue NaN guard
koala73 Feb 21, 2026
a5f70e5
fix: harden OpenSky auth flow and proxy fallback
koala73 Feb 21, 2026
85ac512
security: escape user-facing strings in innerHTML template literals
koala73 Feb 21, 2026
b27c025
feat(i18n): add Thai and Vietnamese localization
koala73 Feb 21, 2026
1b53eaf
fix(relay): add in-flight request dedup for OpenSky and RSS endpoints
koala73 Feb 21, 2026
c239234
feat(crypto): add XRP (Ripple) to crypto panel
koala73 Feb 21, 2026
cd092f6
fix(feeds): replace dead RSS endpoints with Google News fallbacks
koala73 Feb 21, 2026
baa6375
fix(crypto): serve stale prices on CoinGecko failure instead of $0
koala73 Feb 21, 2026
ff22fc8
fix: remove dead /api/opensky fallback route (closes #212)
koala73 Feb 21, 2026
0562439
feat(feeds): add native-language feeds for th, vi, tr, pl, ru locales…
koala73 Feb 21, 2026
01da79b
perf(rss-proxy): increase CDN cache TTL to reduce origin invocations
koala73 Feb 21, 2026
5911fb0
feat: API key gating for desktop cloud fallback + registration (#215)
koala73 Feb 21, 2026
0013f20
feat: redesign settings World Monitor tab + sidecar RSS proxy + v2.5.3
koala73 Feb 21, 2026
517448a
fix: World Monitor tab first, registration proxy, empty key guard
koala73 Feb 21, 2026
b2da861
fix: registration via direct Convex call + compact WM tab layout
koala73 Feb 21, 2026
3735033
Add PostHog analytics with privacy-first design (#216)
koala73 Feb 21, 2026
e882a00
Fix deployment build: make WORLDMONITOR_API_KEY optional (#217)
koala73 Feb 21, 2026
04d13bb
fix: restore API-key gate and block fallback on config import failure…
koala73 Feb 21, 2026
34a4705
fix(csp): allow PostHog scripts from us-assets.i.posthog.com
koala73 Feb 21, 2026
0723bc3
fix(api): sanitize og-story level input (#219)
lawyered0 Feb 21, 2026
845e6e9
Add cable health scoring via sebuf InfrastructureService (#220)
SebastienMelki Feb 21, 2026
7eeb1ae
fix(i18n): add cable health evidence key to all locales
koala73 Feb 21, 2026
4e1a5b8
fix(ucdp): add negative cache, version cache, and stale-on-error fall…
koala73 Feb 21, 2026
f6b9d4c
fix(settings): skip API key re-verification when no keys were changed
koala73 Feb 21, 2026
56c9c9b
chore: add docs/internal/ to .gitignore
koala73 Feb 21, 2026
1e699e9
fix(analytics): proxy PostHog through own domain to bypass ad blockers
koala73 Feb 21, 2026
bac8789
fix(market): harden Yahoo Finance resilience and UCDP retry logic
koala73 Feb 22, 2026
2ec2ce4
chore: add TODO for Yahoo Finance cloud relay fallback
koala73 Feb 22, 2026
434c48f
chore: bump version to 2.5.4
koala73 Feb 22, 2026
e737d24
fix: add missing showRetrying method to Panel base class (#224)
koala73 Feb 22, 2026
6391fb9
Fix Vercel build failure when previous deploy SHA is missing (#225)
koala73 Feb 22, 2026
cd4d6a2
fix: shorten vercel.json ignoreCommand to fit 256-char limit
SebastienMelki Feb 22, 2026
dd2877b
docs: add community guidelines (contributing, code of conduct, securi…
SebastienMelki Feb 22, 2026
17901a0
Update .env.example (#228)
SebastienMelki Feb 22, 2026
37f755b
Format Rust code and fix Windows focus handling (#242)
koala73 Feb 23, 2026
1014168
feat: Upstash Redis shared caching + cache key contamination fixes (#…
koala73 Feb 23, 2026
6f68bb1
fix: reduce dedup coordinate rounding from 0.5° to 0.1° (~10km) (#235)
haosenwang1018 Feb 23, 2026
776613d
Fix Linux rendering issues and improve monospace font fallbacks (#243)
koala73 Feb 23, 2026
e92c404
fix: layer help, SW ingest routing, toggle colors, v2.5.5 (#244)
koala73 Feb 23, 2026
ae45b91
fix: correct Vietnam flag country code in language selector (#245)
koala73 Feb 23, 2026
e797587
fix: sentry triage + SW POST method for PostHog ingest (#246)
koala73 Feb 23, 2026
e9dc2f9
fix: restrict SW route patterns to same-origin only (#247)
koala73 Feb 23, 2026
ad4e897
fix: whitelist social preview bots + restrict SW routes to same-origi…
koala73 Feb 23, 2026
66456c4
feat: add Greek (Ελληνικά) locale (#256)
koala73 Feb 23, 2026
b88787c
fix: allow http:// origin from tauri.localhost for Windows CORS (#262)
koala73 Feb 23, 2026
13f1212
Optimize AIS relay: backpressure queue, spatial indexing, response ca…
koala73 Feb 23, 2026
4fb0d13
Fix GLib symbol mismatch when running as AppImage on newer distros (#…
koala73 Feb 23, 2026
7064780
Add Brasil Paralelo source (#260)
pedroddomingues Feb 23, 2026
96a1f22
fix: add negative caching + cascade-resistant dedup to RSS proxy (#270)
koala73 Feb 23, 2026
e681951
feat: add Nigeria feeds and Greek locale feeds (#271)
koala73 Feb 23, 2026
f462556
chore: bump version to 2.5.6 with changelog (#272)
koala73 Feb 23, 2026
caee7f7
fix: immediately refresh stale services when tab regains focus (#277)
elzalem Feb 23, 2026
53309c6
fix: circuit breaker persistent cache with safety fixes (#281)
koala73 Feb 23, 2026
93ea828
feat(live): custom channel management with review fixes (#282)
koala73 Feb 23, 2026
1a62ada
fix: infrastructure cost optimizations across caching, polling, and b…
koala73 Feb 23, 2026
13e86fb
fix: enforce military bbox filtering and add behavioral cache tests (…
koala73 Feb 23, 2026
d9f3933
fix: infra cost optimizations round 2 — polling, TTLs, ACLED dedup (#…
elzalem Feb 24, 2026
29780a1
feat(live): optional channels with tab-based region browse UI (#295)
koala73 Feb 24, 2026
bc98e3a
fix: add User-Agent and Cloudflare 403 detection to all secret valida…
koala73 Feb 24, 2026
49e290b
fix: open external links in system browser on Tauri desktop (#297)
koala73 Feb 24, 2026
ed708d0
fix: strip Ollama reasoning tokens and plain-text thinking from summa…
koala73 Feb 24, 2026
7caff46
fix: sync YouTube live panel mute state with native player controls (…
K35P Feb 24, 2026
167f99a
test: add Playwright e2e tests for flushStaleRefreshes (#280)
elzalem Feb 24, 2026
e42f0bb
fix: increase live channels window size to fit channel grid (#301)
koala73 Feb 24, 2026
503ee00
fix: harden embed postMessage origin check and add channel validation…
koala73 Feb 24, 2026
708d4b7
Build/runtime hardening and dependency security updates (#286)
toasterbook88 Feb 24, 2026
662186c
fix: add missing country brief i18n keys and export PDF option (#306)
koala73 Feb 24, 2026
cea43c1
fix: add Greek flag mapping to language selector (#305)
koala73 Feb 24, 2026
8985ff0
fix: add Greek flag mapping to language selector (#307)
koala73 Feb 24, 2026
9e266b2
fix: add missing country brief i18n keys and export PDF option (#308)
koala73 Feb 24, 2026
b1129d9
fix: open channel settings as inline modal instead of separate window…
koala73 Feb 24, 2026
ad2bd60
feat: add Bild RSS feed scoped to German locale (#312)
koala73 Feb 24, 2026
a16f2df
fix: replace HTML5 drag API with mouse events for WKWebView compatibi…
koala73 Feb 24, 2026
0dd2494
fix: add drag cleanup handlers and suppress click after drag-drop (#315)
koala73 Feb 24, 2026
d7052c0
fix: add Sentry noise filters and extend deck.gl crash suppression (#…
koala73 Feb 24, 2026
13e4dd0
Add AI Flow settings popup for web-only AI provider control (#314)
koala73 Feb 24, 2026
2fef4cb
feat: add Island Times (Palau) RSS feed for Asia Pacific coverage (#317)
koala73 Feb 24, 2026
ddee84e
chore: remove unused WORLDPOP_API_KEY from .env.example (#318)
koala73 Feb 24, 2026
3090adc
feat: consolidate settings into unified tabbed modal with variant-awa…
koala73 Feb 24, 2026
b5b3c5c
fix: use word-boundary regex for geo-tagging keyword matching (#324)
princelevant Feb 24, 2026
e538310
fix: switch geo-tagging to tokenization-based keyword matching (#324)
princelevant Feb 24, 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.
140 changes: 140 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# ============================================
# 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, no auth needed


# ------ 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=

# PostHog product analytics (optional). Leave empty to disable analytics.
VITE_POSTHOG_KEY=
VITE_POSTHOG_HOST=

# Map interaction mode:
# - "flat" keeps pitch/rotation disabled (2D interaction)
# - "3d" enables pitch/rotation interactions (default)
VITE_MAP_INTERACTION_MODE=3d


# ------ Desktop Cloud Fallback (Vercel) ------

# Comma-separated list of valid API keys for desktop cloud fallback.
# Generate with: openssl rand -hex 24 | sed 's/^/wm_/'
WORLDMONITOR_VALID_KEYS=


# ------ Registration DB (Convex) ------

# Convex deployment URL for email registration storage.
# Set up at: https://dashboard.convex.dev/
CONVEX_URL=
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