π°οΈ S H A D O W B R O K E R
Global Threat Intercept β Real-Time Geospatial Intelligence Platform
ShadowBroker is a real-time, multi-domain OSINT dashboard that aggregates live data from dozens of open-source intelligence feeds and renders them on a unified dark-ops map interface. It tracks aircraft, ships, satellites, earthquakes, conflict zones, CCTV networks, GPS jamming, and breaking geopolitical events β all updating in real time.
Built with Next.js, MapLibre GL, FastAPI, and Python, it's designed for analysts, researchers, and enthusiasts who want a single-pane-of-glass view of global activity.
Interesting Use Cases
- Track private jets of billionaires
- Monitor satellites passing overhead and see high-resolution satellite imagery
- Nose around local emergency scanners
- Watch naval traffic worldwide
- Detect GPS jamming zones
- Follow earthquakes and disasters in real time
β‘ Quick Start (Docker or Podman)
git clone https://github.com/BigBodyCobain/Shadowbroker.git
cd Shadowbroker
./compose.sh up -dOpen http://localhost:3000 to view the dashboard! (Requires Docker or Podman)
compose.sh auto-detects docker compose, docker-compose, podman compose, and podman-compose.
If both runtimes are installed, you can force Podman with ./compose.sh --engine podman up -d.
Do not append a trailing . to that command; Compose treats it as a service name.
β¨ Features
π©οΈ Aviation Tracking
- Commercial Flights β Real-time positions via OpenSky Network (~5,000+ aircraft)
- Private Aircraft β Light GA, turboprops, bizjets tracked separately
- Private Jets β High-net-worth individual aircraft with owner identification
- Military Flights β Tankers, ISR, fighters, transports via adsb.lol military endpoint
- Flight Trail Accumulation β Persistent breadcrumb trails for all tracked aircraft
- Holding Pattern Detection β Automatically flags aircraft circling (>300Β° total turn)
- Aircraft Classification β Shape-accurate SVG icons: airliners, turboprops, bizjets, helicopters
- Grounded Detection β Aircraft below 100ft AGL rendered with grey icons
π’ Maritime Tracking
- AIS Vessel Stream β 25,000+ vessels via aisstream.io WebSocket (real-time)
- Ship Classification β Cargo, tanker, passenger, yacht, military vessel types with color-coded icons
- Carrier Strike Group Tracker β All 11 active US Navy aircraft carriers with OSINT-estimated positions
- Automated GDELT news scraping for carrier movement intelligence
- 50+ geographic region-to-coordinate mappings
- Disk-cached positions, auto-updates at 00:00 & 12:00 UTC
- Cruise & Passenger Ships β Dedicated layer for cruise liners and ferries
- Clustered Display β Ships cluster at low zoom with count labels, decluster on zoom-in
π°οΈ Space & Satellites
- Orbital Tracking β Real-time satellite positions via CelesTrak TLE data + SGP4 propagation (2,000+ active satellites, no API key required)
- Mission-Type Classification β Color-coded by mission: military recon (red), SAR (cyan), SIGINT (white), navigation (blue), early warning (magenta), commercial imaging (green), space station (gold)
π Geopolitics & Conflict
- Global Incidents β GDELT-powered conflict event aggregation (last 8 hours, ~1,000 events)
- Ukraine Frontline β Live warfront GeoJSON from DeepState Map
- SIGINT/RISINT News Feed β Real-time RSS aggregation from multiple intelligence-focused sources
- Region Dossier β Right-click anywhere on the map for:
- Country profile (population, capital, languages, currencies, area)
- Head of state & government type (Wikidata SPARQL)
- Local Wikipedia summary with thumbnail
π°οΈ Satellite Imagery
- NASA GIBS (MODIS Terra) β Daily true-color satellite imagery overlay with 30-day time slider, play/pause animation, and opacity control (~250m/pixel)
- High-Res Satellite (Esri) β Sub-meter resolution imagery via Esri World Imagery β zoom into buildings and terrain detail (zoom 18+)
- Sentinel-2 Intel Card β Right-click anywhere on the map for a floating intel card showing the latest Sentinel-2 satellite photo with capture date, cloud cover %, and clickable full-resolution image (10m resolution, updated every ~5 days)
- SATELLITE Style Preset β Quick-toggle high-res imagery via the STYLE button (DEFAULT β SATELLITE β FLIR β NVG β CRT)
π» Software-Defined Radio (SDR)
- KiwiSDR Receivers β 500+ public SDR receivers plotted worldwide with clustered amber markers
- Live Radio Tuner β Click any KiwiSDR node to open an embedded SDR tuner directly in the SIGINT panel
- Metadata Display β Node name, location, antenna type, frequency bands, active users
π· Surveillance
- CCTV Mesh β 2,000+ live traffic cameras from:
- π¬π§ Transport for London JamCams
- πΊπΈ Austin, TX TxDOT
- πΊπΈ NYC DOT
- πΈπ¬ Singapore LTA
- Custom URL ingestion
- Feed Rendering β Automatic detection & rendering of video, MJPEG, HLS, embed, satellite tile, and image feeds
- Clustered Map Display β Green dots cluster with count labels, decluster on zoom
π‘ Signal Intelligence
- GPS Jamming Detection β Real-time analysis of aircraft NAC-P (Navigation Accuracy Category) values
- Grid-based aggregation identifies interference zones
- Red overlay squares with "GPS JAM XX%" severity labels
- Radio Intercept Panel β Scanner-style UI for monitoring communications
π Additional Layers
- Earthquakes (24h) β USGS real-time earthquake feed with magnitude-scaled markers
- Day/Night Cycle β Solar terminator overlay showing global daylight/darkness
- Global Markets Ticker β Live financial market indices (minimizable)
- Measurement Tool β Point-to-point distance & bearing measurement on the map
- LOCATE Bar β Search by coordinates (31.8, 34.8) or place name (Tehran, Strait of Hormuz) to fly directly to any location β geocoded via OpenStreetMap Nominatim
ποΈ Architecture
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (Next.js) β
β β
β βββββββββββββββ ββββββββββββ βββββββββββββββββ β
β β MapLibre GL β β NewsFeed β β Control Panelsβ β
β β 2D WebGL β β SIGINT β β Layers/Filtersβ β
β β Map Render β β Intel β β Markets/Radio β β
β ββββββββ¬βββββββ ββββββ¬ββββββ βββββββββ¬ββββββββ β
β ββββββββββββββββββΌβββββββββββββββββββ β
β β REST API (60s / 120s) β
ββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ€
β BACKEND (FastAPI) β
β β β
β βββββββββββββββββββββββββΌβββββββββββββββββββββββββββ β
β β Data Fetcher (Scheduler) β β
β β β β
β β ββββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββββββ β β
β β β OpenSky β adsb.lol βCelesTrak β USGS β β β
β β β Flights β Military β Sats β Quakes β β β
β β ββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββ€ β β
β β β AIS WS β Carrier β GDELT β CCTV β β β
β β β Ships β Tracker β Conflict β Cameras β β β
β β ββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββ€ β β
β β β DeepStateβ RSS β Region β GPS β β β
β β β Frontlineβ Intel β Dossier β Jamming β β β
β β ββββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Data Sources & APIs
| Source | Data | Update Frequency | API Key Required |
|---|---|---|---|
| OpenSky Network | Commercial & private flights | ~60s | Optional (anonymous limited) |
| adsb.lol | Military aircraft | ~60s | No |
| aisstream.io | AIS vessel positions | Real-time WebSocket | Yes |
| CelesTrak | Satellite orbital positions (TLE + SGP4) | ~60s | No |
| USGS Earthquake | Global seismic events | ~60s | No |
| GDELT Project | Global conflict events | ~6h | No |
| DeepState Map | Ukraine frontline | ~30min | No |
| Transport for London | London CCTV JamCams | ~5min | No |
| TxDOT | Austin TX traffic cameras | ~5min | No |
| NYC DOT | NYC traffic cameras | ~5min | No |
| Singapore LTA | Singapore traffic cameras | ~5min | Yes |
| RestCountries | Country profile data | On-demand (cached 24h) | No |
| Wikidata SPARQL | Head of state data | On-demand (cached 24h) | No |
| Wikipedia API | Location summaries & aircraft images | On-demand (cached) | No |
| NASA GIBS | MODIS Terra daily satellite imagery | Daily (24-48h delay) | No |
| Esri World Imagery | High-res satellite basemap | Static (periodically updated) | No |
| MS Planetary Computer | Sentinel-2 L2A scenes (right-click) | On-demand | No |
| KiwiSDR | Public SDR receiver locations | ~30min | No |
| OSM Nominatim | Place name geocoding (LOCATE bar) | On-demand | No |
| CARTO Basemaps | Dark map tiles | Continuous | No |
π Getting Started
π³ Docker / Podman Setup (Recommended for Self-Hosting)
The repo includes a docker-compose.yml that builds both images locally.
git clone https://github.com/BigBodyCobain/Shadowbroker.git cd Shadowbroker # Add your API keys in a repo-root .env file (optional β see Environment Variables below) ./compose.sh up -d
Open http://localhost:3000 to view the dashboard.
Deploying publicly or on a LAN? The frontend auto-detects the backend β it uses your browser's hostname with port
8000(e.g. if you visithttp://192.168.1.50:3000, API calls go tohttp://192.168.1.50:8000). No configuration needed for most setups.If your backend runs on a different port or host (reverse proxy, custom Docker port mapping, separate server), set
NEXT_PUBLIC_API_URL:# Linux / macOS NEXT_PUBLIC_API_URL=http://myserver.com:9096 docker-compose up -d --build # Podman (via compose.sh wrapper) NEXT_PUBLIC_API_URL=http://192.168.1.50:9096 ./compose.sh up -d --build # Windows (PowerShell) $env:NEXT_PUBLIC_API_URL="http://myserver.com:9096"; docker-compose up -d --build # Or add to a .env file next to docker-compose.yml: # NEXT_PUBLIC_API_URL=http://myserver.com:9096This is a build-time variable (Next.js limitation) β it gets baked into the frontend during
npm run build. Changing it requires a rebuild.
If you prefer to call the container engine directly, Podman users can run podman compose up -d, or force the wrapper to use Podman with ./compose.sh --engine podman up -d.
Depending on your local Podman configuration, podman compose may still delegate to an external compose provider while talking to the Podman socket.
π¦ Quick Start (No Code Required)
If you just want to run the dashboard without dealing with terminal commands:
- Go to the Releases tab on the right side of this GitHub page.
- Download the latest
.zipfile from the release. - Extract the folder to your computer.
- Windows: Double-click
start.bat. Mac/Linux: Open terminal, typechmod +x start.sh, and run./start.sh. - It will automatically install everything and launch the dashboard!
π» Developer Setup
If you want to modify the code or run from source:
Prerequisites
- Node.js 18+ and npm β nodejs.org
- Python 3.10, 3.11, or 3.12 with
pipβ python.org (check "Add to PATH" during install)β οΈ Python 3.13+ may have compatibility issues with some dependencies. 3.11 or 3.12 is recommended.
- API keys for:
aisstream.io(required), and optionallyopensky-network.org(OAuth2),lta.gov.sg
Installation
# Clone the repository git clone https://github.com/your-username/shadowbroker.git cd shadowbroker/live-risk-dashboard # Backend setup cd backend python -m venv venv venv\Scripts\activate # Windows # source venv/bin/activate # macOS/Linux pip install -r requirements.txt # includes pystac-client for Sentinel-2 # Create .env with your API keys echo "AIS_API_KEY=your_aisstream_key" >> .env echo "OPENSKY_CLIENT_ID=your_opensky_client_id" >> .env echo "OPENSKY_CLIENT_SECRET=your_opensky_secret" >> .env # Frontend setup cd ../frontend npm install
Running
# From the frontend directory β starts both frontend & backend concurrently
npm run devThis starts:
- Next.js frontend on
http://localhost:3000 - FastAPI backend on
http://localhost:8000
ποΈ Data Layers
All layers are independently toggleable from the left panel:
| Layer | Default | Description |
|---|---|---|
| Commercial Flights | β ON | Airlines, cargo, GA aircraft |
| Private Flights | β ON | Non-commercial private aircraft |
| Private Jets | β ON | High-value bizjets with owner data |
| Military Flights | β ON | Military & government aircraft |
| Tracked Aircraft | β ON | Special interest watch list |
| Satellites | β ON | Orbital assets by mission type |
| Carriers / Mil / Cargo | β ON | Navy carriers, cargo ships, tankers |
| Civilian Vessels | β OFF | Yachts, fishing, recreational |
| Cruise / Passenger | β ON | Cruise ships and ferries |
| Earthquakes (24h) | β ON | USGS seismic events |
| CCTV Mesh | β OFF | Surveillance camera network |
| Ukraine Frontline | β ON | Live warfront positions |
| Global Incidents | β ON | GDELT conflict events |
| GPS Jamming | β ON | NAC-P degradation zones |
| MODIS Terra (Daily) | β OFF | NASA GIBS daily satellite imagery |
| High-Res Satellite | β OFF | Esri sub-meter satellite imagery |
| KiwiSDR Receivers | β OFF | Public SDR radio receivers |
| Day / Night Cycle | β ON | Solar terminator overlay |
π§ Performance
The platform is optimized for handling massive real-time datasets:
- Gzip Compression β API payloads compressed ~92% (11.6 MB β 915 KB)
- ETag Caching β
304 Not Modifiedresponses skip redundant JSON parsing - Viewport Culling β Only features within the visible map bounds (+20% buffer) are rendered
- Clustered Rendering β Ships, CCTV, and earthquakes use MapLibre clustering to reduce feature count
- Debounced Viewport Updates β 300ms debounce prevents GeoJSON rebuild thrash during pan/zoom
- Position Interpolation β Smooth 10s tick animation between data refreshes
- React.memo β Heavy components wrapped to prevent unnecessary re-renders
- Coordinate Precision β Lat/lng rounded to 5 decimals (~1m) to reduce JSON size
π Project Structure
live-risk-dashboard/
βββ backend/
β βββ main.py # FastAPI app, middleware, API routes
β βββ carrier_cache.json # Persisted carrier OSINT positions
β βββ cctv.db # SQLite CCTV camera database
β βββ services/
β βββ data_fetcher.py # Core scheduler β fetches all data sources
β βββ ais_stream.py # AIS WebSocket client (25K+ vessels)
β βββ carrier_tracker.py # OSINT carrier position tracker
β βββ cctv_pipeline.py # Multi-source CCTV camera ingestion
β βββ geopolitics.py # GDELT + Ukraine frontline fetcher
β βββ region_dossier.py # Right-click country/city intelligence
β βββ radio_intercept.py # Scanner radio feed integration
β βββ kiwisdr_fetcher.py # KiwiSDR receiver scraper
β βββ sentinel_search.py # Sentinel-2 STAC imagery search
β βββ network_utils.py # HTTP client with curl fallback
β βββ api_settings.py # API key management
β
βββ frontend/
β βββ src/
β β βββ app/
β β β βββ page.tsx # Main dashboard β state, polling, layout
β β βββ components/
β β βββ MaplibreViewer.tsx # Core map β 2,000+ lines, all GeoJSON layers
β β βββ NewsFeed.tsx # SIGINT feed + entity detail panels
β β βββ WorldviewLeftPanel.tsx # Data layer toggles
β β βββ WorldviewRightPanel.tsx # Search + filter sidebar
β β βββ FilterPanel.tsx # Basic layer filters
β β βββ AdvancedFilterModal.tsx # Airport/country/owner filtering
β β βββ MapLegend.tsx # Dynamic legend with all icons
β β βββ MarketsPanel.tsx # Global financial markets ticker
β β βββ RadioInterceptPanel.tsx # Scanner-style radio panel
β β βββ FindLocateBar.tsx # Search/locate bar
β β βββ ChangelogModal.tsx # Version changelog popup
β β βββ SettingsPanel.tsx # App settings
β β βββ ScaleBar.tsx # Map scale indicator
β β βββ WikiImage.tsx # Wikipedia image fetcher
β β βββ ErrorBoundary.tsx # Crash recovery wrapper
β βββ package.json
π Environment Variables
Backend (backend/.env)
# Required AIS_API_KEY=your_aisstream_key # Maritime vessel tracking (aisstream.io) # Optional (enhances data quality) OPENSKY_CLIENT_ID=your_opensky_client_id # OAuth2 β higher rate limits for flight data OPENSKY_CLIENT_SECRET=your_opensky_secret # OAuth2 β paired with Client ID above LTA_ACCOUNT_KEY=your_lta_key # Singapore CCTV cameras
Frontend (optional)
| Variable | Where to set | Purpose |
|---|---|---|
NEXT_PUBLIC_API_URL |
.env next to docker-compose.yml, or shell env |
Override backend URL when deploying publicly or behind a reverse proxy. Leave unset for auto-detection. |
How auto-detection works: When NEXT_PUBLIC_API_URL is not set, the frontend
reads window.location.hostname in the browser and calls {protocol}//{hostname}:8000.
This means the dashboard works on localhost, LAN IPs, and public domains without
any configuration β as long as the backend is reachable on port 8000 of the same host.
β οΈ Disclaimer
This is an educational and research tool built entirely on publicly available, open-source intelligence (OSINT) data. No classified, restricted, or non-public data sources are used. Carrier positions are estimates based on public reporting. The military-themed UI is purely aesthetic.
Do not use this tool for any operational, military, or intelligence purpose.
π License
This project is for educational and personal research purposes. See individual API provider terms of service for data usage restrictions.
Built with β and too many API calls

