Inspiration
A harbor watch officer spots an unknown underwater vehicle near a tanker that's fueling. Most systems detect it and stop there, which leaves two options: ignore it or panic. We wanted to build what sits between "seen" and "handled," so the officer isn't flooded with alerts and a wrong automatic action never halts real work.
What it does
Quietwater turns a sonar detection into a decision, using a ladder of responses:
- Handled automatically (R0 to R3): Watch, Look again, Ask (hail), and Slow (advisory to traffic). The officer is never interrupted for these.
- Needs a person (R4 to R5): Hold, which recommends pausing one operation (or the surrounding area), and Hand off, which gives the officer the full package plus a pre-drafted notice to the Coast Guard.
The officer sees a few contacts that need them, each with a recommendation, a reason, and a decision receipt explaining why that level and not one higher or lower. The system never sends external alerts on its own, and it has no way to act on the vehicle. The work stops at the handoff to a human.
A dual-use toggle switches the same engine from harbor security to vehicle recovery. On a quiet Tuesday it helps a research lab find a lost glider.
How we built it
- Fast scan: a cheap classifier adapter that outputs a label and a confidence. It's mocked by design, so a trained sonar model can plug in without changes elsewhere.
- Rules engine: the source of truth, driven by
config/rules.yamlwith hot reload. Identity, consequence (distance, closest approach, heading, trend) and behavior decide the rung. - AI layer: narrow and raise-only. It can increase a contact's severity but never lower it. It defaults to an offline rule-based advisor, with an optional LLM advisor behind a flag, strict JSON validation, a timeout and caching. If it fails, the system falls back, and if both fail it escalates one rung.
- Backend: Python and FastAPI, with approvals for R4 and R5 enforced server-side, and a seeded deterministic simulator for replay.
- Frontend: React, Vite and TypeScript, with a light-mode sonar interface. Pulses, risk-colored contacts, hover details, and a "Needs you" panel.
Challenges we ran into
- Deciding what the operator is actually approving. Early screens bundled several actions behind one button. We separated the hold from the handoff and listed exactly what each approval does.
- Making doubt useful. Doubt alone never escalates, but doubt near something valuable does. Tuning that took many scenarios.
- Keeping the AI safe. We limited it to raising severity and added a fail-safe so an AI failure can never quietly downgrade a threat.
- Scoping the hold. A blanket hold is loud and costly, so we made the narrowest hold the default and widening the scope the officer's choice.
- Time. Building the engine, simulator, UI and deck in one weekend meant cutting everything that didn't serve the decision.
Accomplishments that we're proud of
- A complete decision path, from detection to a human-approved handoff, with a receipt for every call.
- A design where the system acts alone only on low-stakes cases.
- Alerts drafted but never sent, and no intercept or neutralize button.
- One engine that works for both harbor security and vehicle recovery.
What we learned
The hard part isn't detection, it's deciding what to do with it. We learned that the officer's attention is the scarcest resource, so the most important metric is how few contacts reach them. We also learned that an AI layer is safest when it's narrow, raise-only and explainable. We used IBM Bob for [describe how: e.g. code generation, review, test writing].
What's next for Quietwater
- Real sonar: plug a trained classifier into the existing adapter.
- Harbor pilot: run in shadow mode at a port or research lab and measure alerts avoided.
- Go global: jurisdiction profiles for registry, notice recipient, hail channel and language, so a new port is a config change.
- Fund it: DHS S&T SBIR Phase I, then a DIU or Navy pilot, with ports buying through FEMA Port Security Grants.
- Harden: tests for every branch and a replayable audit log.
Responsible use
Quietwater could be misused to track legitimate vessels or divers. We limit that by flagging only unscheduled autonomous contacts, logging every decision, and requiring human approval above Watch.
Built With
- docker
- fastapi
- pydantic
- python
- react
- typescript
- uvicorn
Log in or sign up for Devpost to join the conversation.