Harbor Watch came out of the Dual-Use Hackathon's Under the Water twist, which asked what sits between "seen" and "handled" when an unauthorized autonomous vehicle shows up in a working harbor. Our research suggested detection isn't the weak link. The problem is that a watch officer gets a sonar blip and has to work out, under pressure, whether it's a hull-cleaning diver, a port ROV, a sea lion, a research AUV that launched early, or a real threat, while the answer sits in a forwarded email, a permit PDF, a shared spreadsheet and a VHF radio log. So we built a decision layer that sits on top of the sensors. It combines those records into one manifest and checks every contact against each entry on four questions: where, when, what and how. Instead of a yes/no answer it gives three outcomes: cleared when all four checks pass, partial when three pass or the location matches plus one more check, and unexplained otherwise. The partial case matters most, because a research AUV in the right place at the right speed but three hours early would be wrongly cleared or wrongly flagged by a simple lookup, and Harbor Watch hands it to the officer with the reason attached. We built it with React, Vite and Leaflet on a map of the Port of Los Angeles. Detection is simulated with four sonar nodes at the harbor's chokepoints, each with a conservative 800 m range, and distances use the haversine formula. A track is confirmed after 5 seconds or once two nodes see it, and if it's lost before the check finishes it goes to a human instead of being cleared. The officer gets one card showing why the contact was flagged, what we know, what we don't know, and three choices: log and clear, send a boat (which produces a one-page crew packet with a 3-minute position forecast), or keep investigating with a live feed. The system stops there. On a quiet Tuesday nobody gets paged; on a crisis day the officer gets a ready-to-act evidence package. We used IBM Bob as our AI coding partner, which also caught two wrong NOAA station IDs by querying the live APIs. Our biggest challenges were that no public dataset of harbor UUV tracks exists and no manifest standard covers underwater research vehicles (AIS doesn't work underwater), so we built illustrative schemas and labelled them clearly. We also had to decide what the machine may decide alone: it can clear a contact only when all four checks pass, and anything missing, stale or lost goes to a human. Getting the shipping channel geometry right and speeding up time for the demo without breaking the matching logic were harder than we expected. We learned that the most useful thing an officer's screen can do on a normal day is show nothing, that saying what you don't know builds trust, and that an explanation like "right place, right type, wrong time" helps an officer more than a confidence score. Next we want to add behavior metrics (approach ratio and path straightness), connect live AIS and NOAA feeds, and query each data owner's records directly instead of copying them into one central store. All names, permits and crews in the demo are invented.

Log in or sign up for Devpost to join the conversation.