Is your feature request related to a problem?
Spun off from #996 — the airplane tracking half of that issue shipped, but ship tracking was deferred because it needs an API key (aisstream.io, MarineTraffic, etc.) which is a separate deploy-config conversation.
Hams who'd find ship tracking useful: anyone working /MM stations, monitoring marine HF nets, supporting maritime mobile ops, supporting events where marine traffic matters (coastal Field Day, Coast Guard support, search-and-rescue exercises).
Describe the Solution You'd Like
A new toggleable map layer with the same server-cache + share-across-users pattern aircraft uses (see server/routes/aircraft.js for the template):
- Server route
GET /api/ships proxying an AIS feed, with a ~30 s cache + stale-on-error fallback + in-flight refresh deduplication
- Client layer
src/plugins/layers/useShips.js with metadata + useLayer export, registered in layerRegistry.js
- Markers oriented by ship heading, color-coded by AIS ship type (cargo / tanker / passenger / fishing / pleasure / military / other)
- Popup with name, MMSI, type, speed, destination, last-seen
Feed candidates:
- aisstream.io — free tier with API key; WebSocket push (would need to be terminated server-side and rebroadcast over our REST endpoint)
- MarineTraffic API — paid tiers, regional free options
- AIS Hub — peer-network, requires contributing your own AIS receiver data to access it (not viable for a public install)
Key bit: the layer should be hidden (localOnly or env-gated) if no key is configured, so installs without a key still work. Don't ship a half-functional toggle.
Use Case
Would you be willing to help implement this?
Additional Context
Aircraft tracking from #996 landed in d95908b and is the template — both server and client patterns are already in place. The main novel work for ships is the feed choice + key handling + a more nuanced color/icon scheme for the AIS ship-type field.
Is your feature request related to a problem?
Spun off from #996 — the airplane tracking half of that issue shipped, but ship tracking was deferred because it needs an API key (aisstream.io, MarineTraffic, etc.) which is a separate deploy-config conversation.
Hams who'd find ship tracking useful: anyone working /MM stations, monitoring marine HF nets, supporting maritime mobile ops, supporting events where marine traffic matters (coastal Field Day, Coast Guard support, search-and-rescue exercises).
Describe the Solution You'd Like
A new toggleable map layer with the same server-cache + share-across-users pattern aircraft uses (see
server/routes/aircraft.jsfor the template):GET /api/shipsproxying an AIS feed, with a ~30 s cache + stale-on-error fallback + in-flight refresh deduplicationsrc/plugins/layers/useShips.jswith metadata +useLayerexport, registered inlayerRegistry.jsFeed candidates:
Key bit: the layer should be hidden (
localOnlyor env-gated) if no key is configured, so installs without a key still work. Don't ship a half-functional toggle.Use Case
Would you be willing to help implement this?
Additional Context
Aircraft tracking from #996 landed in d95908b and is the template — both server and client patterns are already in place. The main novel work for ships is the feed choice + key handling + a more nuanced color/icon scheme for the AIS ship-type field.