https://github.com/syntax-error-1337/radar
RADAR is a real time geospatial intelligence platform that aggregates aircraft, maritime, cyber, OSINT, GPS interference, and threat alert data to provide global situational awareness through an interactive intelligence dashboard
https://github.com/syntax-error-1337/radar
adsb aviation cyber-intelligence dashboard flight-tracking geopolitics geospatial-intelligence gps-jamming maritime monitoring opensource osint palantir radar vessel-tracking
Last synced: about 2 months ago
JSON representation
RADAR is a real time geospatial intelligence platform that aggregates aircraft, maritime, cyber, OSINT, GPS interference, and threat alert data to provide global situational awareness through an interactive intelligence dashboard
- Host: GitHub
- URL: https://github.com/syntax-error-1337/radar
- Owner: Syntax-Error-1337
- License: mit
- Created: 2026-02-25T08:06:34.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-04-09T01:55:21.000Z (2 months ago)
- Last Synced: 2026-04-09T03:29:13.824Z (2 months ago)
- Topics: adsb, aviation, cyber-intelligence, dashboard, flight-tracking, geopolitics, geospatial-intelligence, gps-jamming, maritime, monitoring, opensource, osint, palantir, radar, vessel-tracking
- Language: TypeScript
- Homepage: https://radar.army
- Size: 39.5 MB
- Stars: 10
- Watchers: 0
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
- Roadmap: ROADMAP.md
Awesome Lists containing this project
README
# RADAR — Geospatial Intelligence Platform






**A real-time geospatial intelligence platform for tracking aircraft, maritime vessels, GPS interference, conflict zones, and active threat alerts.**
[Features](#-features) • [Architecture](#-architecture) • [Quick Start](#-quick-start) • [API](#-api-reference) • [Contributing](CONTRIBUTING.md)
---
## Overview
**RADAR** is a full-stack geospatial intelligence dashboard that aggregates real-time data from multiple sources to provide comprehensive situational awareness across six intelligence domains:
- **✈️ Flight Tracking** — Live aircraft positions via ADS-B data
- **🚢 Maritime Tracking** — Global vessel tracking via AIS streams
- **🛡️ Cyber Intelligence** — Internet security metrics via Cloudflare Radar
- **🌍 OSINT Monitor** — Geo-located news feeds and AI-powered intelligence briefs
- **📡 GPS Jamming** — Global GPS interference heatmap using H3 hex cells
- **🚨 Threat Alerts** — Live rocket/UAV alerts (Israel) and UAE regional threat alerts (GulfWatch)
Built with React 19, TypeScript, Express.js, and MapLibre GL JS — delivering a high-performance, military-styled interface with three visual modes (EO/FLIR/CRT).
---
## ✨ Features
### ✈️ Flight Tracking Module
- **Live ADS-B data** from ADSB.lol (community-fed, no auth required) or OpenSky Network
- **Rich telemetry** — altitude (barometric/geometric), speed, heading, vertical rate, squawk codes, Mach, IAS, TAS, roll angle, wind speed/direction, OAT/TAT, navigation modes, RSSI
- **Aircraft enrichment** — registration, manufacturer, model, operator, type code, year built (DuckDB + Parquet database)
- **Route history visualization** with origin airport data
- **Geographic filtering** via configurable bounding box
- **On-ground/airborne detection** with visual distinction
- **Emergency squawk highlighting** (7500, 7600, 7700)
- **Globe & Mercator projections** — toggle between 3D and flat views
### 🚢 Maritime Tracking Module
- **Live AIS streams** via persistent WebSocket to `wss://stream.aisstream.io`
- **Full AIS message support** — Position Reports (Class A/B), Ship Static Data, Base Station Reports, SAR Aircraft, Aids to Navigation, Safety Broadcasts
- **Vessel details** — MMSI, name, call sign, ship type, destination, SOG, COG, heading, navigational status
- **Historical trail rendering** — last 150 position points per vessel
- **Stale vessel purging** — automatic cleanup after 30 minutes of inactivity
- **Auto-reconnect** — 5-second backoff on WebSocket disconnect
- **Status endpoint** — live connection health, vessel count, message stats
### 📡 GPS Jamming Module
- **Global interference heatmap** using H3 resolution-4 hex cells
- **Daily datasets** auto-downloaded from GPSJam.org (local CSV cache)
- **Interference ratio visualization** — good vs. bad aircraft signal counts per cell
- **Date selector** — browse historical datasets going back weeks
- **Auto-backfill** — server downloads missing daily datasets on startup
- **Stats endpoint** — per-date summary (total cells, suspect flag, high-interference cell count)
### 🚨 Threat Alerts — OSINT Monitor Module
A live threat monitoring dashboard with four real-time intelligence panels:
#### GPS Jamming Widget
- Real-time interference stats from latest dataset
- High-interference cell count and coverage area
#### Rocket Alert Widget (Israel)
- **Source**: `agg.rocketalert.live` — live rocket and UAV alert bursts
- Shows active areas, alert type (rocket vs. UAV), countdown seconds, Hebrew and English names
- **Map layer**: Circle markers positioned by alert coordinates, colored red (rocket) / orange (UAV)
- Click any marker for full popup: EN/HE names, area, countdown, coordinates, timestamp
- 24-hour totals and 7-day daily trend chart
#### GulfWatch Widget (UAE)
- **Source**: `gulfwatch-api.onrender.com` — regional threat alerts for UAE emirates
- Shows active emirate, alert type, severity (warning/watch), description, start/expiry time
- **Map layer**: Emirate polygon fills + centroid markers; colored by severity
- Click any polygon or marker for full popup: EN/AR names, description, severity, source count, timeline
#### AI Insights Panel
- **LLM-powered intelligence briefs** via OpenRouter API
- Generates military-styled summaries from intercepted news headlines
- Regional context-aware analysis using Google Gemini 2.5 Flash
#### Live News Panel
- **Geo-located RSS feeds** from a 56,000+ line database (190+ countries)
- Fetches region-specific news (geopolitical, defense, local sources)
- Falls back to international feeds (Reuters, AP, BBC) if no local match
### 🛡️ Cyber Intelligence Module
Powered by **Cloudflare Radar API**:
- **DDoS attack origins** — top countries launching Layer 7 attacks
- **Traffic anomalies** — internet routing anomalies and BGP events
- **Top domains** — most popular websites by traffic
- **Attack vectors** — HTTP method distributions, bot classifications
- **ASN rankings** — autonomous system activity
- **Time-series visualization** — interactive charts and heatmaps
### 🎨 Display Modes
Three visual themes selectable from the navigation bar:
| Mode | Description |
| -------- | ------------------------------------------------- |
| **EO** | Electro-optical — clean dark interface (default) |
| **FLIR** | Forward-looking infrared — thermal color palette |
| **CRT** | Cathode-ray tube — retro phosphor green aesthetic |
---
## 🏗️ Architecture
### Project Structure
```
intelmap/
├── client/ # React 19 + Vite frontend (port 5173)
│ └── src/
│ ├── app/ # Entry point, routes, providers
│ ├── modules/
│ │ ├── flights/ # ADS-B aircraft tracking
│ │ ├── maritime/ # AIS vessel tracking
│ │ ├── monitor/ # OSINT + threat alert hub
│ │ │ ├── components/ # Map layers & widgets
│ │ │ │ ├── GPSJammingLayer.tsx
│ │ │ │ ├── RocketAlertLayer.tsx
│ │ │ │ ├── GulfWatchLayer.tsx
│ │ │ │ ├── layerIds.ts # shared layer ID constants
│ │ │ │ └── widgets/ # dashboard panel components
│ │ │ └── hooks/ # React Query data hooks
│ │ ├── cyber/ # Cloudflare Radar integration
│ │ └── osint/ # Shared OSINT components
│ ├── ui/
│ │ ├── layout/ # TopNav, shell components
│ │ └── theme/ # EO/FLIR/CRT mode + projection state
│ └── core/ # Query client, providers
│
└── server/ # Express.js backend (port 3001)
└── src/
├── core/
│ ├── source/
│ │ ├── adsblol.ts # ADSB.lol polling + cache
│ │ ├── opensky.ts # OpenSky fallback
│ │ ├── aisstream.ts # AISStream WebSocket singleton
│ │ ├── cloudflare.ts # Cloudflare Radar API client
│ │ ├── gpsjam.ts # GPSJam CSV ingestion + H3 query
│ │ ├── rocketalert.ts # Rocket/UAV alert polling
│ │ └── gulfwatch.ts # UAE GulfWatch alert polling
│ ├── aircraft_db.ts # DuckDB/Parquet aircraft enrichment
│ ├── scheduler.ts # Cron-like job runner for data ingestion
│ └── cache.ts # TTL cache utility
├── routes/
│ ├── flights.ts # GET /api/flights/*
│ ├── maritime.ts # GET /api/maritime/*
│ ├── monitor.ts # GET /api/monitor/* (GPS jamming, alerts)
│ ├── geo.ts # GET /api/geo/* (news, intel briefs)
│ └── cyber.ts # GET /api/cyber/* (Cloudflare proxy)
├── Data/
│ └── gpsjam/ # Daily GPS interference CSVs + manifest
├── types/ # TypeScript definitions
├── news_feeds.json # 56k+ line RSS database (190+ countries)
└── index.ts # Server entry point + scheduler bootstrap
```
### Tech Stack
| Layer | Technology |
| ------------------ | ------------------------------------ |
| Frontend framework | React 19 + Vite 7 + TypeScript 5.9 |
| Map rendering | MapLibre GL JS 5 via react-map-gl 8 |
| State management | Zustand 5 |
| Data fetching | TanStack Query v5 |
| Styling | Tailwind CSS v4 |
| Icons | Lucide React |
| Backend runtime | Node.js 20 + Express 4 |
| Aircraft database | DuckDB + Parquet |
| Maritime stream | WebSocket (`ws` library) |
| H3 spatial index | H3-js (Uber H3 hex grid) |
| RSS parsing | rss-parser |
| Geolocation | which-country + i18n-iso-countries |
| Build tooling | `concurrently` (monorepo dev runner) |
---
## 🚀 Quick Start
### Prerequisites
- **Node.js** v20 or later
- **npm** v9 or later
### 1. Install Dependencies
```bash
npm run install:all
```
This installs dependencies for both `client` and `server` workspaces.
### 2. Configure Environment Variables
#### Server — `server/.env`
```bash
cp server/.env.example server/.env
nano server/.env
```
**Required API Keys:**
| Service | Variable | Where to get | Cost |
| ---------------- | ------------------------ | ---------------------------- | ------------- |
| AISStream | `AISSTREAM_API_KEY` | https://aisstream.io | Free tier |
| OpenRouter (LLM) | `OPENROUTER_API_KEY` | https://openrouter.ai/keys | Pay as you go |
| Cloudflare Radar | `CLOUDFLARE_RADAR_TOKEN` | https://dash.cloudflare.com/ | Free |
**Optional:**
```ini
# Flight data source (default: adsblol — no key required)
FLIGHT_DATA_SOURCE=adsblol
# Geographic center for ADSB.lol queries
ADSB_LOL_LAT=0
ADSB_LOL_LON=0
ADSB_LOL_RADIUS=25000 # nautical miles (25000 ≈ global)
# OpenSky fallback (optional, requires account)
# OPENSKY_CLIENT_ID=your_email@example.com
# OPENSKY_CLIENT_SECRET=your_secret_here
```
> **Note:** GPS jamming data is fetched automatically from GPSJam.org — no API key required.
> Rocket alerts and GulfWatch alerts are fetched from public endpoints — no key required.
#### Client — `client/.env`
```bash
cp client/.env.example client/.env
```
```ini
# Flight data provider: "adsblol" | "opensky" | "mock"
VITE_FLIGHT_PROVIDER=adsblol
```
### 3. Run Development Server
```bash
npm run dev
```
This starts:
- **Frontend** → http://localhost:5173
- **Backend** → http://localhost:3001
- **Health check** → http://localhost:3001/health
---
## 🌐 API Reference
All routes served by Express backend on port `3001`.
### Flights
| Method | Endpoint | Description |
| ------ | ---------------------------- | ---------------------------------------------- |
| `GET` | `/api/flights/states` | All tracked aircraft as `AircraftState[]` |
| `GET` | `/api/flights/track/:icao24` | Route path for specific aircraft by ICAO24 hex |
### Maritime
| Method | Endpoint | Description |
| ------ | ---------------------------- | ----------------------------------------------- |
| `GET` | `/api/maritime/snapshot` | All live vessels (position/heading, no history) |
| `GET` | `/api/maritime/vessel/:mmsi` | Full vessel detail including position history |
| `GET` | `/api/maritime/status` | WebSocket health, vessel count, message stats |
### Monitor — GPS Jamming
| Method | Endpoint | Description |
| ------ | ----------------------------------- | ------------------------------------------------------------- |
| `GET` | `/api/monitor/gps-jamming` | H3 interference cells (`?date=`, `?minInterference=`, `?h3=`) |
| `GET` | `/api/monitor/gps-jamming/dates` | Available dataset dates |
| `GET` | `/api/monitor/gps-jamming/stats` | Per-date interference statistics (`?date=`) |
| `POST` | `/api/monitor/gps-jamming/backfill` | Manually trigger dataset backfill (`{limit?}`) |
### Monitor — Rocket Alerts
| Method | Endpoint | Description |
| ------ | ------------------------------------ | --------------------------------------------------- |
| `GET` | `/api/monitor/rocket-alerts` | Live burst summary + 24h total + 7-day daily counts |
| `GET` | `/api/monitor/rocket-alerts/history` | Per-alert records (`?hours=24&alertTypeId=-1`) |
| `GET` | `/api/monitor/rocket-alerts/daily` | Per-day counts (`?days=7&alertTypeId=-1`) |
### Monitor — GulfWatch (UAE)
| Method | Endpoint | Description |
| ------ | ---------------------------------------- | ------------------------------------ |
| `GET` | `/api/monitor/gulf-watch/alerts` | Active UAE threat alert summary |
| `GET` | `/api/monitor/gulf-watch/alerts/history` | Alert history (`?limit=50&offset=0`) |
| `GET` | `/api/monitor/gulf-watch/geojson` | UAE emirates GeoJSON (1-hour cache) |
### Geo (OSINT)
| Method | Endpoint | Description |
| ------ | ---------------------- | ------------------------------------------------------------------- |
| `GET` | `/api/geo/news` | Geo-located RSS news feeds (`?lat=&lon=&category=`) |
| `POST` | `/api/geo/intel-brief` | LLM intelligence brief from news headlines (`{news: [], lat, lon}`) |
### Cyber
| Method | Endpoint | Description |
| ------ | -------------------- | ---------------------------------------------------------------------- |
| `GET` | `/api/cyber/radar/*` | Proxy for Cloudflare Radar API (e.g., `/attacks/layer7/top/locations`) |
### System
| Method | Endpoint | Description |
| ------ | --------- | -------------------------- |
| `GET` | `/health` | Returns `{ status: "ok" }` |
---
## 🔌 Data Sources
### ADSB.lol (Flights)
- **URL**: `https://api.adsb.lol/v2/point/{lat}/{lon}/{radius}`
- **Auth**: None required (community-operated, free)
- **Polling**: 3-second TTL cache on backend
### AISStream.io (Maritime)
- **URL**: `wss://stream.aisstream.io/v0/stream`
- **Auth**: API key required (free tier)
- **Coverage**: Global bounding box `[[-90, -180], [90, 180]]`
- **Memory**: Up to 150 history points per vessel; stale vessels purged after 30 min
### GPSJam.org (GPS Jamming)
- **URL**: `https://gpsjam.org/data/{date}-h3_4.csv`
- **Auth**: None required (public dataset)
- **Format**: CSV with H3 hex index, good/bad aircraft counts per cell
- **Schedule**: New dataset auto-downloaded daily via server scheduler
### Rocket Alert Live (Threat Alerts — Israel)
- **URL**: `https://agg.rocketalert.live/api/v1/`
- **Auth**: None required (public API)
- **Data**: Live rocket and UAV alert bursts with coordinates, Hebrew/English names, countdown
### GulfWatch (Threat Alerts — UAE)
- **Alerts API**: `https://gulfwatch-api.onrender.com/api`
- **GeoJSON**: `https://gulfwatch.ai/data/uae-emirates.geojson`
- **Auth**: None required
- **Data**: Active emirate-level threat alerts with severity, type, description
### Cloudflare Radar (Cyber)
- **URL**: `https://api.cloudflare.com/client/v4/radar/*`
- **Auth**: Bearer token (free)
- **Endpoints**: 50+ metrics (DDoS, BGP, DNS, HTTP, email security)
### RSS News Feeds (OSINT)
- **Source**: `server/src/news_feeds.json` (56,934 lines)
- **Coverage**: 190+ countries, categorized by defense, geopolitical, economic, local
- **Fallback**: Reuters, AP, BBC for uncovered regions
---
## 🐳 Docker Deployment
```bash
# Build image
npm run docker:build
# Run container
npm run docker:run
# Or use docker-compose
npm run docker:compose:build
```
```yaml
services:
intelmap:
build: .
ports:
- '3001:3001'
env_file:
- ./server/.env
restart: unless-stopped
```
---
## 🛠️ Available Scripts
| Command | Description |
| ------------------------ | ------------------------------------------------ |
| `npm run dev` | Start both client and server in development mode |
| `npm run install:all` | Install all workspace dependencies |
| `npm run build` | Build production bundles (client + server) |
| `npm run build:client` | Build frontend only |
| `npm run build:server` | Build backend only |
| `npm run start` | Run production server (after building) |
| `npm run lint` | Run ESLint on client |
| `npm run format` | Format all files with Prettier |
| `npm run type-check` | Run TypeScript type checking (no emit) |
| `npm run docker:build` | Build Docker image |
| `npm run docker:compose` | Start with docker-compose |
---
## 📁 Key Files
| File | Description |
| ---------------------------- | --------------------------------------- |
| `package.json` | Monorepo workspace configuration |
| `client/.env.example` | Frontend environment template |
| `server/.env.example` | Backend environment template |
| `server/src/news_feeds.json` | 56k+ line RSS database (190+ countries) |
| `server/src/Data/gpsjam/` | Daily GPS interference CSV datasets |
| `Dockerfile` | Multi-stage production build |
| `docker-compose.yml` | Orchestration config |
---
## 🧪 Mock/Offline Mode
To run the flight module without API dependencies:
1. Edit `client/.env`:
```ini
VITE_FLIGHT_PROVIDER=mock
```
2. Restart dev server. Uses bundled `flights_sample.json` fixture.
**Note:** Maritime, GPS jamming, alert, and cyber modules require live API connections.
---
## 🗺️ Map Projections
Toggle between two rendering modes via the **VIEW** button:
- **Mercator** — Standard flat 2D projection (best for regional detail)
- **Globe** — 3D spherical projection (best for global awareness)
---
## 🔒 Security Notes
- **Never commit `.env` files** — use `.env.example` templates only
- **All secrets are server-side** — the frontend receives pre-processed data only
- **CORS**: Currently permissive for development; restrict in production
- **Rate limiting**: Not yet implemented; add middleware before public deployment
- **Rotate keys immediately** if you accidentally expose them in git history
See [SECURITY.md](SECURITY.md) for vulnerability reporting.
---
## 🤝 Contributing
We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
**Quick checklist:**
- Fork the repo
- Create a feature branch (`git checkout -b feature/amazing-feature`)
- Commit changes (`git commit -m 'feat: add amazing feature'`)
- Push to branch (`git push origin feature/amazing-feature`)
- Open a Pull Request
---
## 📄 License
This project is licensed under the **MIT License** — see [LICENSE](LICENSE) for details.
---
## 🙏 Acknowledgments
- **ADSB.lol** — Community-fed ADS-B network
- **AISStream.io** — Free maritime AIS WebSocket API
- **GPSJam.org** — Open GPS interference dataset
- **Rocket Alert Live** — Real-time Israeli alert API
- **GulfWatch** — UAE regional threat monitoring
- **Cloudflare Radar** — Internet security metrics
- **MapLibre GL JS** — Open-source map rendering
---
## 📞 Support
- **Issues**: [GitHub Issues](https://github.com/Syntax-Error-1337/radar/issues)
- **Discussions**: [GitHub Discussions](https://github.com/Syntax-Error-1337/radar/discussions)
---
**Built for the open-source OSINT community**
[⬆ Back to top](#intelmap--geospatial-intelligence-platform)