OSINT / Alerting · Independent project
OSINT Radar: 31-Source Situational Awareness Dashboard
OSINT Radar is a production-deployed situational-awareness dashboard that runs scheduled sweeps across 31 public-data integrations and presents geopolitical, aviation, maritime, cyber, natural-hazard, health, macroeconomic, market, and space signals in one operator-focused interface.
- 31 integrations
- 15-minute sweeps
- SSE live updates
Open live demo Back to portfolio
Problem
Open-source monitoring is fragmented across APIs, feeds, and websites with different formats, limits, and reliability characteristics. Important changes can be difficult to identify, while one unavailable source should not interrupt the entire monitoring workflow.
Solution
OSINT Radar runs 31 independent source adapters concurrently, applies source-specific timeouts, retries, caching, and defensive parsing, and transforms the results into a unified dashboard experience.
Each completed sweep is stored as a timestamped JSON snapshot. The system compares consecutive sweeps, calculates deterministic alert and threat signals, suppresses selected duplicate news and alert content, and pushes updated data to connected browsers through Server-Sent Events.
An optional multi-provider AI layer can use OpenAI, Anthropic, Gemini, or Codex for alert evaluation and idea synthesis.
System Architecture
Primary data and decision flow
- 31 adapters Independent modules with their own parsing, timeout, retry, cache, and auth.
- Parallel sweep Promise.allSettled() so one failed provider does not stop the rest.
- Dashboard views Source-specific results become alerts, maps, markets, news, and health views.
- Snapshots + delta Timestamped files and in-memory change detection. No database service.
- Scoring + AI Deterministic rules work alone; optional providers add alert and idea analysis.
- Express + SSE UI Dashboard, JSON API, health endpoint, and live browser updates.
- Node.js 22
- Docker
- GitHub Actions
- Nginx
- Linux
- Reverse SSH deployment
- Thirty-one independent source modules are executed concurrently using Promise.allSettled().
- Each integration handles its own parsing, timeout, retry, cache, and authentication requirements.
- Source results are transformed into dashboard-specific views for alerts, threat indicators, maps, markets, news, and source health.
- Deterministic rules calculate severity, geographic hints, and changes between sweeps.
- Timestamped JSON snapshots provide lightweight history and recovery without requiring a database service.
- Express exposes the dashboard, JSON API, health endpoint, and SSE update stream.
- Connected browsers receive completed sweeps automatically without reloading the page.
- Individual source failures remain visible but do not prevent the rest of the dashboard from updating.
Role and Ownership
Sole system owner. Dmitri designed the source-adapter model, implemented orchestration, scoring, snapshots, notifications, dashboard views, and observability, and maintains the deployed service.
- 31 public-data source integrations
- parallel source orchestration with isolated failures
- timeout, retry, caching, and graceful-degradation logic
- sweep-to-sweep change detection and delta memory
- deterministic threat and alert scoring
- targeted duplicate suppression for news and notification channels
- optional multi-provider AI analysis
- Telegram and Discord notifications
- source-health diagnostics and sweep-duration monitoring
- a responsive analyst dashboard with maps, filters, alert views, market data, source panels, and live updates
- Docker packaging and automated deployment through GitHub Actions, Nginx, and a reverse SSH tunnel
Technical Decisions
- Used Promise.allSettled() so one unavailable provider cannot cancel a full 31-source sweep.
- Chose timestamped JSON snapshots and in-memory delta state because the current workload does not require a database service.
- Used Server-Sent Events for one-way browser updates instead of adding WebSocket complexity.
- Kept deterministic scoring available when optional LLM providers are disabled or unavailable.
Technologies
- Node.js 22
- Express 5
- JavaScript / ES Modules
- HTML and CSS
- D3.js
- Server-Sent Events
- Globe.gl / Three.js
- OpenAI, Anthropic, Gemini, Codex
- JSON snapshot persistence
- Telegram and Discord APIs
- Docker
- GitHub Actions
- Nginx
- Linux
Result and Impact
The deployed dashboard brings 31 heterogeneous integrations into one observable interface and continues operating when individual providers are unavailable, rate-limited, or misconfigured. Users can inspect prioritized signals, geographic activity, market and macroeconomic data, natural hazards, cyber advisories, source health, and changes between sweeps without manually opening dozens of separate services.
Limitations
- Data is collected on a scheduled 15-minute cadence; not every provider offers a continuous live stream.
- Public APIs may impose quotas, require personal credentials, or block data-centre IP addresses.
- Rule-based scoring and AI-assisted outputs can miss context and should not be treated as verified intelligence.
- OSINT Radar is an engineering demonstration, not classified intelligence or a replacement for a dedicated SOC.
Live demo and source
Live demo: https://osint.dmitriderevjanko.com/
Source code: Private. The deployed application is the public project artifact.
Portfolio case study: https://dmitriderevjanko.com/projects/osint-radar/
This is one of 10+ independent public projects by Dmitri Derevjanko. 100+ additional workflows were delivered professionally, mostly under confidentiality, and are not documented here.