
Real-time OSINT intelligence dashboard: 7 live data sources (aircraft, AIS vessels, seismic, fires, weather, GDELT events, news) on an interactive globe. Correlation engine, scored alerts, watch mode. Bun + React 19 + Canvas 2D Web Worker rendering. PWA with offline support. https://sigint-5154d935429b.herokuapp.com/
Echtzeit-OSINT-Dashboard mit Live-Flugzeug-, Schiffs-, Erdbeben-, Feuer-, Wetter- und Ereignisverfolgung auf einer interaktiven Globus-Karte. Entwickelt mit Bun, React 19 und einer benutzerdefinierten Canvas 2D + Web Worker Rendering-Engine. Installierbar als PWA.

git clone https://github.com/iitoneloc/sigint.git
cd sigint
bun install
Erstellen Sie eine .env-Datei im Projektverzeichnis mit mindestens:
SIGINT_SERVER_SECRET=<Ausgabe von openssl rand -hex 32>
Fügen Sie optional Schlüssel für Schiffs- und Feuersdaten hinzu:
AISSTREAM_API_KEY=<Ihr aisstream.io-Schlüssel>
FIRMS_MAP_KEY=<Ihr NASA FIRMS-Schlüssel>
Siehe Deployment für Entwicklungs-, Produktions- und Heroku-Optionen.
bun test # alle Tests ausführen
bun test --watch # Watch-Modus
bun run docker:test # in Docker ausführen
bun run docker:dev:up # https://localhost (selbstsigniertes Zertifikat)
bun run docker:dev:down # stoppen
Zwei Umgebungsvariablen umgehen Live-Datenabrufe in der Entwicklung, sodass Sie gegen einen bekannten eingefrorenen Zustand arbeiten können. Beide sind durch NODE_ENV !== "production"" geschützt und werden in Produktions-Builds ignoriert.
Labels entsprechen /^[a-z0-9-]+$/ (OWASP A01 – strenge Whitelist vor Datei-Lookup) und lösen auf tests/fixtures/<source>/<label>.json auf. Ungültige Labels werfen einen Fehler beim Start; fehlende Dateien werfen einen Fehler mit dem aufgelösten Pfad. Zur Verwendung:
CYCLONES_FIXTURE=multi-storm bun run dev
AIRCRAFT_FIXTURE=conus-snapshot bun run dev
Oder über Docker Compose (docker-compose.dev.yml übergibt beide weiter):
CYCLONES_FIXTURE=single-cat5 bun run docker:dev:up
bun run docker:prod:up # http://localhost:5500
bun run docker:prod:down # stoppen
DOMAIN=sigint.example.com bun run docker:prod:tls:up
bun run docker:prod:tls:down # stoppen
git push heroku main
bun run docker:clean:all # Container, Volumes, Images entfernen
SIGINT ist als Progressive Web App installierbar. Nach dem Besuch der bereitgestellten App:
Der Service Worker speichert die App-Shell für den Offline-Start zwischen. Live-Daten werden aus IndexedDB geladen, wenn offline. Eine Offline-Anzeigeleiste erscheint bei Verbindungsverlust, mit einer ERNEUT-VERSUCHEN-Schaltfläche und Pull-to-Refresh auf Touch-Geräten. Wenn ein Update verfügbar ist, fordert ein Banner den Benutzer zum Neuladen auf – keine stillen Codenachladungen während der Sitzung.
Vollständige technische Dokumentation in docs/ mit Architektur, Datenfluss, Feature-System, Bereichssystem, Rendering, Caching, Suche und Einschränkungen.
Dual-Lizenz:
| Variable | Erforderlich | Beschreibung |
|---|
SIGINT_SERVER_SECRET | Ja | Signierschlüssel für Authentifizierungstokens. openssl rand -hex 32 |
AISSTREAM_API_KEY | Nein | aisstream.io-Schlüssel für Live-Schiffsdaten |
FIRMS_MAP_KEY | Nein | NASA FIRMS-Schlüssel für Feuersdaten |
DOMAIN | Nein | Domain für Let's Encrypt TLS |
PORT | Nein | Server-Port (Standard: 5500) |
| Ebene | Quelle | Abfrageintervall |
|---|
| Flugzeuge | adsb.fi (serverseitiger Kachel-Sweep, 37 Kacheln × 250 nm) | 240s |
| Schiffe | aisstream.io (serverseitiger WebSocket) | 300s |
| Seismik | USGS (clientseitig) | 420s |
| Feuer | NASA FIRMS (serverseitig) | 600s |
| Wetter | NOAA (clientseitig) | 300s |
| Ereignisse | GDELT 2.0 (serverseitig) | 15m |
| Nachrichten | 6 RSS-Feeds (serverseitig) | 10m |
| Env var | Überschriebene Quelle | Gültige Labels |
|---|
CYCLONES_FIXTURE | /api/cyclones/latest (Server ruft NHC ab) | single-cat3, single-cat5, multi-storm, subtropical-example, tropical-depression, empty-out-of-season |
AIRCRAFT_FIXTURE | /api/aircraft/states (Server führt adsb.fi-Kachel-Sweep durch) | (keine mitgeliefert – erfassen per bun run scripts/capture-fixture.ts aircraft <label>) |