πŸ›°οΈ S H A D O W B R O K E R

Global Threat Intercept β€” Real-Time Geospatial Intelligence Platform

--- ![Shadowbroker1](https://github.com/user-attachments/assets/000b94eb-bf33-4e8b-8c60-15ca4a723c68) **ShadowBroker** is a real-time, full-spectrum geospatial intelligence dashboard that aggregates live data from dozens of open-source intelligence (OSINT) 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. --- ## ✨ 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 from N2YO API - **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 ### πŸ“· 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 --- ## πŸ—οΈ Architecture ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ FRONTEND (Next.js) β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ MapLibre GL β”‚ β”‚ NewsFeed β”‚ β”‚ Control Panelsβ”‚ β”‚ β”‚ β”‚ 2D WebGL β”‚ β”‚ SIGINT β”‚ β”‚ Layers/Filtersβ”‚ β”‚ β”‚ β”‚ Map Render β”‚ β”‚ Intel β”‚ β”‚ Markets/Radio β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ REST API (15s / 60s) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ BACKEND (FastAPI) β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Data Fetcher (Scheduler) β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚ OpenSky β”‚ adsb.lol β”‚ N2YO β”‚ 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** | | [N2YO](https://www.n2yo.com) | Satellite orbital positions | ~60s | **Yes** | | [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 | | [CARTO Basemaps](https://carto.com) | Dark map tiles | Continuous | No | --- ## πŸš€ Getting Started ### 🐳 Docker Setup (Recommended for Self-Hosting) You can run the dashboard easily using the pre-built Docker images hosted on GitHub Container Registry (GHCR). 1. Create a `docker-compose.yml` file: ```yaml version: '3.8' services: backend: image: ghcr.io//live-risk-dashboard-backend:main container_name: shadowbroker-backend ports: - "8000:8000" environment: - AISSTREAM_API_KEY=${AISSTREAM_API_KEY} - N2YO_API_KEY=${N2YO_API_KEY} # Add other required environment variables here volumes: - backend_data:/app/data restart: unless-stopped frontend: image: ghcr.io//live-risk-dashboard-frontend:main container_name: shadowbroker-frontend ports: - "3000:3000" environment: - NEXT_PUBLIC_API_URL=http://localhost:8000 depends_on: - backend restart: unless-stopped volumes: backend_data: ``` 1. Create a `.env` file in the same directory with your API keys. 2. Run `docker-compose up -d`. 3. Access the dashboard at `http://localhost:3000`. --- ### πŸ“¦ 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 `ShadowBroker_v0.2.zip` file. 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** - **Python** 3.10+ with `pip` - API keys for: `aisstream.io`, `n2yo.com` (and optionally `opensky-network.org`, `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 # Create .env with your API keys echo "AISSTREAM_API_KEY=your_key_here" >> .env echo "N2YO_API_KEY=your_key_here" >> .env echo "OPENSKY_USERNAME=your_user" >> .env echo "OPENSKY_PASSWORD=your_pass" >> .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 | | 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 β”‚ β”œβ”€β”€ 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 β”‚ β”‚ β”œβ”€β”€ SettingsPanel.tsx # App settings β”‚ β”‚ β”œβ”€β”€ ScaleBar.tsx # Map scale indicator β”‚ β”‚ β”œβ”€β”€ WikiImage.tsx # Wikipedia image fetcher β”‚ β”‚ └── ErrorBoundary.tsx # Crash recovery wrapper β”‚ └── package.json ``` --- ## πŸ”‘ Environment Variables Create a `.env` file in the `backend/` directory: ```env # Required AISSTREAM_API_KEY=your_aisstream_key # Maritime vessel tracking N2YO_API_KEY=your_n2yo_key # Satellite position data # Optional (enhances data quality) OPENSKY_CLIENT_ID=your_opensky_client_id # Higher rate limits for flight data OPENSKY_CLIENT_SECRET=your_opensky_secret LTA_ACCOUNT_KEY=your_lta_key # Singapore CCTV cameras ``` --- ## ⚠️ 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