Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1250 commits
Select commit Hold shift + click to select a range
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
468f18a
feat: add category pills and search filter to Panels tab (#322)
koala73 Feb 24, 2026
c0b35a6
fix: add CARTO and OpenStreetMap attribution to map (#323)
koala73 Feb 24, 2026
a6f112c
feat: add Mexico and LatAm security feeds for instability coverage (#…
koala73 Feb 24, 2026
a382605
feat: add Mexico as CII hotspot for cartel/security monitoring (#327)
koala73 Feb 24, 2026
fe882f9
Harden Railway relay auth, caching, and proxy routing (#320)
koala73 Feb 24, 2026
85958a6
fix: OpenSky auth resilience — retry, IPv4, no negative cache on auth…
koala73 Feb 24, 2026
b55c741
fix: replace RSSHub feeds with native/Google News alternatives (#331)
koala73 Feb 24, 2026
1ec73d1
fix: serialize OpenSky requests with global 429 cooldown (#332)
koala73 Feb 24, 2026
4b40c3f
fix: make OpenSky cache TTLs env-configurable, bump positive to 60s (…
koala73 Feb 24, 2026
313908b
fix: add Mexico to CII scoring (TIER1, keywords, ports, mappings) (#337)
koala73 Feb 24, 2026
fde6fad
fix: add Mexico to COUNTRY_BOUNDS and COUNTRY_ALIASES for brief news/…
koala73 Feb 24, 2026
54322d3
fix: prevent entity conflation in pane summarization (#339)
koala73 Feb 24, 2026
ae97d2f
fix: prevent entity conflation in pane summarization (#341)
koala73 Feb 24, 2026
32a53f3
feat: universal country detection — CII scoring for all countries (#344)
koala73 Feb 24, 2026
4c92ec8
Security hardening: SSRF protection, auth gating, and token generatio…
koala73 Feb 24, 2026
d1ea374
perf: defer YouTube/map init and stagger data loads to reduce blockin…
koala73 Feb 24, 2026
86c1e54
fix: suppress notification sound when alerts disabled + bump v2.5.7 (…
koala73 Feb 25, 2026
bc390c3
feat: HappyMonitor — positive news dashboard (happy.worldmonitor.app)…
SebastienMelki Feb 25, 2026
7ae7b4b
security: harden IPC, gate DevTools, isolate external windows, exempt…
koala73 Feb 25, 2026
39f48ba
fix: narrow markdown lint scope to product docs only (#349)
koala73 Feb 25, 2026
3c18758
feat: add command palette to Cmd+K search modal (#350)
koala73 Feb 25, 2026
6ca0b7a
fix: desktop updater toast notification + XSS hardening (#351)
koala73 Feb 25, 2026
88ab865
perf: reduce OpenSky API calls from 4 to 2 via merged query regions (…
koala73 Feb 25, 2026
a3aa8ff
fix: guard data-loader against post-destroy work (#353)
koala73 Feb 25, 2026
133b686
feat: country commands + command palette UX improvements (#355)
koala73 Feb 25, 2026
298ea7f
chore: remove .claudedocs + tighten Sentry noise filters (#356)
koala73 Feb 25, 2026
b940d2d
fix: add redirect target domains to RSS proxy allowlist (#357)
SebastienMelki Feb 25, 2026
5c4094b
feat: add trade route & chokepoint visualization layer (#358)
koala73 Feb 25, 2026
1a3de0b
chore: bump version to 2.5.8 and align README with recent features (#…
koala73 Feb 25, 2026
012777f
fix: RSS proxy allowlist + add 9 new positive news feeds (#360)
SebastienMelki Feb 25, 2026
3889473
fix: improve API key signup link discoverability in settings (#361)
koala73 Feb 25, 2026
424ad75
fix: filter deck.gl Uint8Array WebGL pick noise in Sentry (#362)
koala73 Feb 25, 2026
752e35f
Add BIS central bank data integration (policy rates, exchange rates, …
koala73 Feb 25, 2026
fb06f48
Add WTO trade policy intelligence service with tariffs, flows, and ba…
koala73 Feb 25, 2026
46ff923
fix: WTO API indicator codes, disable giving panel, update README (#371)
koala73 Feb 25, 2026
a00cfb4
fix: use cachedFetchJson for WTO endpoints + add 10-min refresh sched…
koala73 Feb 25, 2026
b881561
fix: add diagnostic logging to WTO API fetch for silent failures (#376)
koala73 Feb 25, 2026
0a92971
fix: correct trade policy panel data display issues (#383)
koala73 Feb 25, 2026
18bef0d
fix: economic panel showing wrong values and unresponsive tabs (#384)
koala73 Feb 25, 2026
e470338
fix: trade policy panel visual overhaul and false unavailable banner …
koala73 Feb 25, 2026
0f32b5f
fix: eliminate cache stampede across all server handlers (#389)
koala73 Feb 26, 2026
856eb47
feat: add Supply Chain Disruption Intelligence service (#387)
koala73 Feb 26, 2026
62c5926
feat: dynamic sidecar port with EADDRINUSE fallback + let scoping bu…
koala73 Feb 26, 2026
1fa5af4
fix: respect Browser Local Model toggle — skip ML worker init when di…
koala73 Feb 26, 2026
6cabb68
fix: supply chain panel bugs — invalid FRED series, global banner, fe…
koala73 Feb 26, 2026
e100c8b
fix: keep flat news on cluster failure and fix deckgl filter typing (…
FayezBast Feb 26, 2026
c8df3ec
fix: restore FilterSpecification type annotation on country highlight…
koala73 Feb 26, 2026
f7eb825
feat: add Ransomware.live RSS feed to cyber/security sources (#392)
koala73 Feb 26, 2026
2e94d5b
ci: add TypeScript type-check workflow on PRs (#394)
koala73 Feb 26, 2026
36d898c
fix: Linux AppImage crashes, RSS proxy 403s, and console noise (#395)
koala73 Feb 26, 2026
785620e
feat: add global streaming video quality setting (#365) (#396)
koala73 Feb 26, 2026
7e36ecf
fix: restore Linux AppImage updater routing and fallback port reporti…
koala73 Feb 26, 2026
feaf371
fix: sort tariff datapoints newest-first and fix cachedFetchJson test…
koala73 Feb 26, 2026
2e10f77
fix: sort supply chain chokepoints by disruption score descending (#399)
koala73 Feb 26, 2026
f757f6f
chore: bump v2.5.9 and update README for recent features (#398)
koala73 Feb 26, 2026
0b230dc
fix: Sentry triage — escape CSS selector, guard player.destroy, add n…
koala73 Feb 26, 2026
4da7ebb
fix: rename settings modal title from "PANELS" to "SETTINGS" in all 1…
koala73 Feb 26, 2026
76d082e
fix: tighten AI summary prompts to 2 sentences / 60 words max (#404)
koala73 Feb 26, 2026
8bfdc13
fix: sequential Yahoo calls, sector fallback, and missing try-catch g…
koala73 Feb 26, 2026
5ea021e
fix: surface Yahoo rate-limit status to user, auth retry, verbose per…
koala73 Feb 26, 2026
ca9949e
chore: bump v2.5.10 and update README for recent fixes (#408)
koala73 Feb 26, 2026
2e7013a
fix(live-news): destroy player before showing offline/error message (…
koala73 Feb 26, 2026
0b3fe16
fix(linux): address AppImage black screen on WebKit/GStreamer (#411)
koala73 Feb 26, 2026
2b8adf7
chore: bump v2.5.11 (#412)
koala73 Feb 26, 2026
3494754
ci(linux): add AppImage smoke test to desktop build (#413)
koala73 Feb 26, 2026
d21f4cf
ci: add standalone Test Linux App workflow, revert build-desktop.yml …
koala73 Feb 26, 2026
1e3b907
feat(docker): add container support
hwcopeland Feb 26, 2026
624171d
Update deploy/k8s/worldmonitor.yaml
hwcopeland Feb 26, 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
  •  
  •  
  •  
166 changes: 166 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
# ============================================
# 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 + OpenSky aircraft data + RSS proxy.
# It can also run the Telegram OSINT poller (stateful MTProto) when configured.
# 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=


# ------ Telegram OSINT (Railway relay) ------
# Telegram MTProto keys (free): https://my.telegram.org/apps
TELEGRAM_API_ID=
TELEGRAM_API_HASH=

# GramJS StringSession generated locally (see: scripts/telegram/session-auth.mjs)
TELEGRAM_SESSION=

# Which curated list bucket to ingest: full | tech | finance
TELEGRAM_CHANNEL_SET=full

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

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

# Optional client-side URL (wss://) — local/dev fallback only
VITE_WS_RELAY_URL=

# Shared secret between Vercel and Railway relay.
# Must be set to the SAME value on both platforms in production.
RELAY_SHARED_SECRET=

# Header name used to send the relay secret (must match on both platforms)
RELAY_AUTH_HEADER=x-relay-key

# Emergency production override to allow unauthenticated relay traffic.
# Leave unset/false in production.
ALLOW_UNAUTHENTICATED_RELAY=false

# Rolling window size (seconds) used by relay /metrics endpoint.
RELAY_METRICS_WINDOW_SECONDS=60


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