A pipeline you can read end to end.
Forked from the OpenHNW codebase and re-pointed: the watchlist-scoped feed layer is flipped to capture-all, and resolve-misses become classified, registered newcomers.
Capture all
Area-scoped ADS-B and global AIS adapters pull every contact in range — not just known identifiers. Commercial traffic is dropped at the gate.
Resolve & classify
Each fix resolves to a known asset by hex/IMO, or auto-registers — placed in the taxonomy by AIS ship type, broadcast ICAO type, or call sign.
Persist & derive
Every fix lands in local SQLite; the movement engine derives stops, legs and dark spans. No sampling.
Map, TUI, API
The dashboard, the terminal console and the JSON/WebSocket API all read the same read-models.
Honest auto-discovery into the taxonomy.
A newcomer is never just a dot. Vessels are classified from their AIS ship type, aircraft from the broadcast ICAO type and operational call sign — into major category → subcategory → platform class. A Chinook becomes a military helicopter, an MQ-9 a military UAV, a King Air air-ambulance fixed-wing — automatically, the first time it is seen.
- +Platform-correct — helicopter, fixed-wing, UAV, vessel and satellite are never conflated.
- +State-only gate — commercial cargo, tanker, passenger and private traffic is filtered at ingest.
- +Curated override — a watchlist entry always wins over a live guess.
- +New-type alerts — the first sighting of a new asset type can notify you by ntfy or email.
Curated in the open, by the community.
The reference dataset is a public GitHub repository under CC-BY-SA. Anyone can propose an addition by pull request; CI validates every row against the schema and the scope rules, and scope-sensitive categories route to a designated reviewer.
- ›Aircraft, vessels, satellites — three datasets, one schema discipline.
- ›Provenance required — every entry carries a primary source and confidence.
- ›Scope discipline — assets, not individuals; no minors; enforced in CI.
- ›Contribute from the console — the inspector drafts a valid entry for you.
Two optional layers. Off by default.
Both sit beneath the contacts on the same map, both respect the no-telemetry stance, and neither touches the position audit record.