Problem
Staying informed about the world in 2024–2026 is broken in exactly the opposite way people expect: there's too much information, not too little.
- Fragmentation: Geopolitical news, market signals, military activity, cyber threats, and natural disasters live in completely separate tools. Connecting them requires 10+ tabs, paid subscriptions, and domain expertise.
- No geospatial context: Text-based news has no spatial grounding. "Tensions in the South China Sea" means nothing without knowing where naval assets are, what undersea cables run through the area, and what military bases sit nearby.
- AI tools are cloud-dependent. Services like Perplexity, ChatGPT, or Bloomberg Terminal send your queries (and your patterns) to the cloud. For analysts, researchers, and privacy-conscious users, this is unacceptable.
- Cost: Serious OSINT tools — Jane's, Palantir, Bloomberg — cost thousands of dollars per month. There's a gap between consumer news apps and enterprise intelligence platforms.
- Static feeds: RSS readers display a firehose of unprocessed text. There's no synthesis, no anomaly detection, no "what should I care about right now."
Target audience: Analysts, journalists, researchers, OSINT practitioners, finance professionals, and globally curious power users who need situational awareness without paying for enterprise tools.
Research & Discovery
World Monitor was designed by someone deeply immersed in the OSINT and geopolitics communities — spaces that have developed informal workflows using combinations of Twitter/X, Telegram channels, TradingView, Windy.com, and custom Notion dashboards.
Key insights that shaped the product:
- The OSINT community curates Telegram channels obsessively — 27 high-signal channels were identified and integrated directly via MTProto. This is information that doesn't appear in mainstream RSS feeds.
- Geopolitical context requires layered spatial data: knowing there's an "infrastructure attack" is useless without knowing what infrastructure — undersea cables? pipelines? datacenters? The map layer system was designed around this.
- Local LLM support is a non-negotiable for serious users. Running Ollama locally for AI summaries means no API keys, no usage costs, and no data leaving the machine.
- Finance and geopolitics are deeply interconnected but served by separate tools. The Finance variant was created to serve the macro investing community, not just analysts.
- The free-vs-paid gap: there was nothing between "generic news app" and "$2,000/month Bloomberg." World Monitor fills this gap.
Competitive gap:
| Problem | Existing Solution | World Monitor Answer |
|---|---|---|
| 100+ scattered news sources | Manual tab management | Single unified dashboard |
| No geospatial context | Static maps | 3D WebGL globe with 40+ layers |
| AI is cloud-dependent | Perplexity, ChatGPT | Local LLM (Ollama) + 4-tier fallback |
| Expensive OSINT tools | Palantir, Jane's ($$$) | 100% free & open source |
| Web-only tools | Browser tabs | Native desktop (Tauri) + PWA |
Solution & Approach
World Monitor unifies the four pillars of situational awareness into a single, configurable interface: news, maps, AI, and market data.
Core architectural decisions:
- Single codebase, 4 variants — World Monitor, Tech Monitor, Finance Monitor, and Happy Monitor all run from one codebase. A variant flag swaps the feed set, map layer defaults, and color theme. This means zero duplication and one deployment pipeline.
- Proto-first API contracts — 92 Protocol Buffer files define 20 typed service domains. Auto-generated TypeScript clients, servers, and OpenAPI 3.1 docs eliminate the "undocumented fragile API" problem common in dashboard projects.
- 4-tier AI fallback chain — Ollama (local) → Groq (cloud) → OpenRouter → browser-side T5. The app is never blocked waiting for AI. Local-first means privacy by default.
- Vercel + Railway architecture — Vercel handles 60+ edge functions for news, market, and API proxying. Railway hosts the WebSocket relay for data sources requiring persistent connections (AIS maritime tracking, Telegram MTProto, Israel OREF rocket alerts).
- Client-side vector RAG — "Headline Memory" embeds every incoming headline using an ONNX model in a Web Worker, stores vectors in IndexedDB, and enables semantic search over your personal headline archive. Zero server dependency.
- Tauri for desktop — Tauri (Rust) provides native OS integration: system keychain for API keys, native TLS, OS notifications, and desktop auto-updater. Electron was evaluated and rejected for its 100MB+ overhead.
What makes this different:
- The only open-source OSINT dashboard with Telegram MTProto integration, local LLM support, and native desktop builds
- 16-language localization with region-specific RSS feeds — the first load in French automatically enables Le Monde and France24
- 22 live webcam feeds from geopolitical hotspots, with a dedicated Iran/Attacks 2×2 grid for real-time visual monitoring
- Country Brief pages: click any country for an AI-generated intelligence dossier with CII score, prediction markets, 7-day event timeline, and exportable JSON/CSV/PNG
Features & Functionality
Core panel system (configurable layout):
- Interactive 3D Globe — deck.gl + MapLibre GL, WebGL-accelerated, 40+ toggleable data layers, smart clustering, zoom-adaptive opacity, URL-shareable map state
- Live News — 150+ RSS feeds across 20+ categories, virtual scrolling, ML-based topic clustering, breaking news banners
- AI World Brief — LLM-synthesized summary of top global developments, refreshed on demand
- Live Video — 30+ news channels (8 default), native HLS streams (18+ channels), fullscreen toggle, idle-aware pause
- Market Intelligence — 7-signal macro radar with composite BUY/CASH verdict, crypto prices, ETF flows, stablecoin peg monitor, Gulf markets
- Cyber Threats — IOC geo-location, APT attribution, GPS/GNSS jamming zones
- Country Briefs — full-page AI dossiers for any country: CII score ring, AI analysis, top news, prediction markets, 7-day timeline
Hero features (detailed):
3D WebGL Globe — deck.gl + MapLibre GL with 40+ toggleable data layers: active conflicts (UCDP + ACLED), military bases (220+ from 9 operators), undersea cables with health advisories, oil pipelines, nuclear facilities, satellite fire detection (NASA FIRMS), cyber IOCs, GPS jamming zones, stock exchanges, Gulf FDI investments, and more. Smart clustering (Supercluster), zoom-adaptive opacity (0.2 world view → 1.0 street level), 8 regional presets, URL-shareable state.
AI Intelligence Engine — World Brief uses a 4-tier provider chain (Ollama → Groq → OpenRouter → browser T5) with 5-second per-tier timeouts. Results Redis-cached (24h TTL) with cross-user deduplication (identical queries from concurrent users trigger exactly one LLM call). AI Deduction tool enables free-text forecasting queries with auto-injected context from the 15 most recent live headlines.
Headline Memory (RAG) — opt-in client-side vector store. Every incoming headline is embedded using
all-MiniLM-L6-v2(ONNX, 384-dim) in a Web Worker, stored in IndexedDB (5,000 vector cap, LRU eviction). Semantic search over your archive runs entirely in the browser — zero server dependency, persistent across sessions.Country Instability Index (CII) — real-time stability scores for every country. 23 curated tier-1 nations have tuned baseline risk profiles; universal scoring covers all other nations when event data (protests, conflicts, outages, displacement, climate anomalies) is detected. OREF rocket alerts and travel advisory aggregation (4 governments + 13 embassies) feed into CII in real time.
Finance Variant — 92 stock exchanges, 19 financial centers, 13 central banks, 10 commodity hubs, 64 Gulf FDI investments, BIS central bank data, WTO trade policy intelligence. Gulf Economies panel: live data for GCC markets (Tadawul, DFM, ADX, QSE) with mini sparklines, Redis-cached 8 minutes, 60-second polling.
Native Desktop App (Tauri) — macOS (Apple Silicon + Intel), Windows (.exe), Linux (.AppImage). OS keychain integration for API keys (single prompt on startup), native TLS, auto-updater, desktop embed bridge for YouTube playback (bypasses WKWebView restrictions), dynamic sidecar port allocation.
Multilingual UI — 16 languages (EN, FR, DE, ES, IT, PL, PT, NL, SV, RU, AR, ZH, JA, TR, TH, VI). RTL support for Arabic and Hebrew. 17 locales have dedicated native-language RSS feed sets that auto-activate on first load.
Data sources integrated:
- Geopolitical: GDELT, ACLED, UCDP, USGS, GDACS, NASA EONET/FIRMS, HAPI, WorldPop, gpsjam.org, OREF (Israel sirens)
- Maritime/Aviation: OpenSky (AIS), ADS-B transponders, AviationStack, ICAO NOTAM, USNI Fleet Intelligence
- Cyber: abuse.ch (Feodo/URLhaus), AlienVault OTX, AbuseIPDB, C2IntelFeeds, Ransomware.live
- Markets: Yahoo Finance, CoinGecko, mempool.space, alternative.me, FRED, EIA, Finnhub
- News: 150+ curated RSS feeds + 27 Telegram OSINT channels (MTProto)
- Video: 30+ YouTube streams + 18+ native HLS channels + 22 live webcams
Design & UX
Design philosophy:
- Information density without overwhelm. Dashboard products fail when they cram everything visible at once. World Monitor uses collapsible panels, progressive disclosure (detail layers appear only when zoomed in), and virtual scrolling to keep the cognitive load manageable.
- Customizable for every use case. The layout is fully user-configurable: panel order (drag-and-drop), panel heights (resizable), active data layers, active RSS feeds, language preference — all persisted in localStorage. No two users have the same dashboard.
- Local-first, privacy-respecting. Where possible, AI runs locally (Ollama), vectors store locally (IndexedDB), and preferences persist locally (localStorage). The server does what the client can't.
Key UI decisions:
- 3D globe is the centerpiece — it gives spatial grounding to every other data stream
- Breaking news click-through: clicking a banner scrolls to the source RSS panel with a 1.5-second flash highlight — keeps context intact
- Cmd+K command palette (~250 commands) for keyboard-first power users: country navigation, layer presets, fuzzy search
- Ultra-wide support: L-shaped panel wrapping on 2000px+ screens
- Mobile: inertial touch gestures (0.92 decay factor), pinch-to-zoom with center-point preservation, bottom-sheet popups
Accessibility:
- 16-language localization with RTL support
- Dark/light theme toggle with persistent preference
- Virtual scrolling for performance on lower-end hardware
Technical Architecture
Tech stack:
| Category | Technologies |
|---|---|
| Frontend | TypeScript, Vite, deck.gl (WebGL 3D), MapLibre GL JS |
| Desktop | Tauri 2 (Rust), Node.js sidecar, OS keychain (keyring crate) |
| PWA | vite-plugin-pwa (Workbox service worker + offline map) |
| AI/ML | Ollama/LM Studio (local), Groq, OpenRouter, Transformers.js (browser T5 + embeddings) |
| Caching | Redis (Upstash), Vercel CDN, Service Worker (Workbox), in-memory |
| API contracts | Protocol Buffers (92 proto files, 20 services), buf CLI, auto-gen TS + OpenAPI |
| Deployment | Vercel (60+ edge functions) + Railway (WebSocket relay) |
| Analytics | PostHog (privacy-first, typed event schemas) |
| Localization | i18next (16 languages, 1,361 keys/locale, lazy-loaded bundles) |
| Geopolitical APIs | GDELT, ACLED, UCDP, USGS, GDACS, NASA EONET/FIRMS, HAPI, OREF |
| Market APIs | Yahoo Finance, CoinGecko, mempool.space, FRED, EIA, Finnhub |
| Threat Intel | abuse.ch, AlienVault OTX, AbuseIPDB, C2IntelFeeds, Ransomware.live |
| News sources | 150+ RSS feeds + 27 Telegram OSINT channels (MTProto, Railway relay) |
Architecture overview:
graph TB
subgraph Client
U[Browser / Desktop Tauri] --> V[Vite SPA]
V --> G[deck.gl 3D Globe]
V --> N[News Panels\nvirtual scrolling]
V --> AI_C[AI Brief\n4-tier fallback]
V --> M[Market Intelligence]
V --> RAG[Headline Memory\nIndexedDB vector store]
end
subgraph Vercel Edge
V -->|API calls| E[60+ Edge Functions\nRSS proxy · market · geo APIs]
E --> R[(Redis / Upstash\nCaching layer)]
end
subgraph Railway Relay
E2[WebSocket Relay] --> AIS[AIS Maritime\nOpenSky Aircraft]
E2 --> TG[Telegram MTProto\n27 OSINT channels]
E2 --> OREF[Israel OREF\nRocket alerts]
E2 --> PM[Polymarket Proxy]
end
V -->|WebSocket| E2
subgraph AI Providers
AI_C --> OL[Ollama / LM Studio\nLocal]
AI_C --> GR[Groq\nCloud]
AI_C --> OR[OpenRouter\nFallback]
AI_C --> TFJ[Transformers.js\nBrowser T5]
end
subgraph Data Sources
E --> GEO[GDELT · ACLED · UCDP\nUSGS · NASA · HAPI]
E --> MKT[Yahoo Finance\nCoinGecko · FRED · EIA]
E --> CTI[abuse.ch · OTX\nAbuseIPDB · C2Intel]
end
Notable technical achievements:
- 95% reduction in Vercel invocations via server-side feed aggregation: one
listFeedDigestRPC call fetches all feeds server-side (20 concurrent, 8-second timeouts, 25-second deadline), cached 15 minutes, served to all clients — eliminating per-client fan-out - Zero-server semantic search — browser-side ONNX embedding + IndexedDB vector store means the entire RAG pipeline runs offline
- Cache stampede prevention —
cachedFetchJsonin-flight promise deduplication prevents upstream API stampede from concurrent users - SSRF protection — DNS resolution, private IP rejection, TOCTOU-safe address pinning on all relay endpoints
- IPC window hardening — trusted-window allowlist for all sensitive Tauri commands; DevTools gated via Cargo feature flag in production builds
- TypeScript CI —
tsc --noEmiton every PR via GitHub Actions, 92 proto files with buf lint + breaking-change checks
Process & Iteration
World Monitor's changelog and roadmap show a project that's shipped consistently and at high velocity:
Phase 1 — Foundation: Core dashboard layout, RSS aggregation, basic MapLibre map, initial data layers
Phase 2 — Intelligence layer: AI World Brief integration, multi-provider fallback chain, Redis caching, Country Instability Index
Phase 3 — Multi-variant system: Tech Monitor + Finance Monitor variants from single codebase, variant build pipeline
Phase 4 — Desktop: Tauri 2 integration, OS keychain, sidecar architecture, native HLS streaming, desktop embed bridge for YouTube
Phase 5 — Data depth: Telegram MTProto (27 channels), OREF rocket alerts, AIS maritime chokepoint detection, GPS/GNSS interference mapping, airport NOTAM integration
Phase 6 — Intelligence expansion: Country Brief pages, RAG headline memory, Cmd+K command palette, supply chain disruption intelligence, PizzINT activity monitor
Phase 7 — Localization + community: 16-language UI, 17 locale-specific feed sets, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, GitHub stars/forks growth
Key pivots:
- Electron → Tauri: 100MB+ reduction in bundle size, native OS integration, better security model
- Static data layers → real-time feeds: initial version used static GeoJSON; ACLED, UCDP, OpenSky, and AIS replaced it with live data
- Happy Monitor addition: created a positive-news variant after user feedback that the dashboard was too anxiety-inducing
Outcomes & Impact
- 4 live variants deployed: worldmonitor.app, tech.worldmonitor.app, finance.worldmonitor.app, happy.worldmonitor.app
- Native desktop app shipped for macOS (ARM + x64), Windows (.exe), and Linux (.AppImage)
- 150+ RSS feeds + 27 Telegram OSINT channels aggregated into a unified interface
- 40+ map data layers from 20+ distinct APIs/data sources
- 16 languages with locale-aware feed sets for 17 locales
- Open source (AGPL v3) with GitHub stars, forks, and community contributions
- 92 proto files / 20 API services — engineering discipline unusual in solo-built projects
Qualitative outcomes:
- Used by analysts, researchers, and OSINT practitioners as a daily intelligence tool
- Cited by users as replacing 5-10 separate browser tabs
- The Happy Monitor variant demonstrates design empathy — listening to users who needed a less anxiety-inducing option
Metrics: (public repo — see GitHub stars/forks for community signal)
Reflections
What went well:
- Single-codebase multi-variant architecture was the right call — maintaining 4 separate deployments would be unworkable
- Proto-first API contracts enforced discipline at scale (92 proto files); the auto-generated TypeScript eliminated a whole class of API contract bugs
- Local LLM support differentiated World Monitor from every cloud-dependent competitor
- Open-sourcing attracted community contributions and created trust with the OSINT/analyst community
What I'd do differently:
- Docker deployment from day one — it's on the roadmap but should have been earlier given the Railway/Vercel split architecture
- Better onboarding for first-time users — the information density is a feature, but new users need a guided first-load experience
- Earlier mobile-first optimization — the touch gestures were retrofitted; they should have been designed from the start
Skills demonstrated:
- Large-scale TypeScript frontend architecture (Vite, deck.gl, MapLibre, i18next)
- Native desktop development (Tauri 2 + Rust, OS keychain, sidecar patterns)
- Multi-provider AI integration with graceful fallback
- Edge function architecture (Vercel) + WebSocket relay (Railway)
- Browser-side ML (Transformers.js, ONNX, IndexedDB vector store)
- Geospatial data visualization (deck.gl, Supercluster, WebGL)
- Open-source project management (CONTRIBUTING.md, SECURITY.md, CI/CD)
- Protocol Buffers API design at scale (92 proto files, auto-generated clients)
- Real-time data integration from 20+ diverse APIs