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 * Watch naval traffic worldwide * Detect GPS jamming zones * Follow earthquakes and disasters in real time --- ## β‘ Quick Start (Docker or Podman) ```bash git clone https://github.com/BigBodyCobain/Shadowbroker.git cd Shadowbroker ./compose.sh up -d ``` Open `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](https://opensky-network.org) | Commercial & private flights | ~60s | Optional (anonymous limited) | | [adsb.lol](https://adsb.lol) | Military aircraft | ~60s | No | | [aisstream.io](https://aisstream.io) | AIS vessel positions | Real-time WebSocket | **Yes** | | [CelesTrak](https://celestrak.org) | Satellite orbital positions (TLE + SGP4) | ~60s | No | | [USGS Earthquake](https://earthquake.usgs.gov) | Global seismic events | ~60s | No | | [GDELT Project](https://www.gdeltproject.org) | Global conflict events | ~6h | No | | [DeepState Map](https://deepstatemap.live) | Ukraine frontline | ~30min | No | | [Transport for London](https://api.tfl.gov.uk) | London CCTV JamCams | ~5min | No | | [TxDOT](https://its.txdot.gov) | Austin TX traffic cameras | ~5min | No | | [NYC DOT](https://webcams.nyctmc.org) | NYC traffic cameras | ~5min | No | | [Singapore LTA](https://datamall.lta.gov.sg) | Singapore traffic cameras | ~5min | **Yes** | | [RestCountries](https://restcountries.com) | Country profile data | On-demand (cached 24h) | No | | [Wikidata SPARQL](https://query.wikidata.org) | Head of state data | On-demand (cached 24h) | No | | [Wikipedia API](https://en.wikipedia.org/api) | Location summaries & aircraft images | On-demand (cached) | No | | [NASA GIBS](https://gibs.earthdata.nasa.gov) | MODIS Terra daily satellite imagery | Daily (24-48h delay) | No | | [Esri World Imagery](https://www.arcgis.com) | High-res satellite basemap | Static (periodically updated) | No | | [MS Planetary Computer](https://planetarycomputer.microsoft.com) | Sentinel-2 L2A scenes (right-click) | On-demand | No | | [KiwiSDR](https://kiwisdr.com) | Public SDR receiver locations | ~30min | No | | [OSM Nominatim](https://nominatim.openstreetmap.org) | Place name geocoding (LOCATE bar) | On-demand | No | | [CARTO Basemaps](https://carto.com) | 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. ```bash 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 visit `http://192.168.1.50:3000`, API calls go to > `http://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`: > > ```bash > # 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:9096 > ``` > > This 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: 1. Go to the **[Releases](../../releases)** tab on the right side of this GitHub page. 2. Download the latest `.zip` file from the release. 3. Extract the folder to your computer. 4. **Windows:** Double-click `start.bat`. **Mac/Linux:** Open terminal, type `chmod +x start.sh`, and run `./start.sh`. 5. 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](https://nodejs.org/) * **Python** 3.10, 3.11, or 3.12 with `pip` β [python.org](https://www.python.org/downloads/) (**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 optionally `opensky-network.org` (OAuth2), `lta.gov.sg` ### Installation ```bash # 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 ```bash # From the frontend directory β starts both frontend & backend concurrently npm run dev ``` This 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 Modified` responses 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`) ```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