Inspiration

When a river gets polluted, the hardest part is often not noticing it but working out where it came from, and by the time anyone investigates, the pollution has already traveled miles downstream. We wanted a tool that turns “something looks wrong in the river” into a fast, evidence-based shortlist of where to look upstream, with a human still making the final call.

What it does

SilentSpill watches a river using camera footage and water sensors (conductivity, turbidity, pH). When the two agree that something is wrong, it checks rainfall so a normal storm isn’t mistaken for a spill, then traces the river network upstream and estimates how long the pollution took to arrive. It then finds permitted facilities along that path that have reported violations and has a team of Gemini agents (Triage, Trace, Compliance, Report) draft a confidence-scored incident report. Everything is shown on an animated 3D watershed map with a timeline scrubber, and the report always says “facilities with reported violations near this reach,” never who is to blame.

How we built it

Real data: USGS NHDPlus HR for the Virginia river network and flow velocity, EPA ECHO for permitted facilities and reported violations, EPA TRI for chemical releases, USGS gauge readings for baseline sensor data, NOAA for rainfall, and USGS 3DEP for terrain.

Backend: Python and FastAPI. A continuous loop checks each new gauge reading against the baseline, while the camera side runs frame by frame, and the agents only run when a flag fires. A river graph (NetworkX) handles the upstream trace and travel time.

Vision: YOLO trained on open Roboflow datasets for debris, plus color-based plume detection on simulated aerial footage.

Agents: Four Groq agents pass structured JSON to each other, call plain Python tools, and fall back to a template report if the model fails, so the demo never breaks.

Frontend: Vite + React + Tailwind + shadcn/ui, with Motion and GSAP for the animation and a 3D map layer.

Challenges we ran into

There is no public dataset pairing spill video with sensor readings, and as an online team we had no drone, so we simulated the plume footage and injected spill signals into real gauge data, and labeled everything as simulated.

Making the timing realistic: gauges only report every ~15 minutes, so a spill can land between two readings. We built the loop so spills start at random moments and the system can honestly miss or catch them late.

Separating storms from spills, since both raise turbidity.

Messy government data: unconfirmed velocity units, facility coordinates versus outfall locations, and annual TRI data that can’t match a live plume.

Keeping the AI honest: we forced agents to cite only facilities in our data, avoid accusatory wording, and show confidence and limitations.

Accomplishments that we're proud of

A full pipeline from detection to upstream trace to a human-reviewable report, built on real river, facility, and gauge data.

A timing model that tests detection honestly instead of replaying a script.

A responsible design: simulated data is labeled everywhere, language is non-accusatory, and a human reviews every report.

A polished, animated interface that makes the river, the plume, and the investigation easy to follow.

What we learned

Real environmental data is messy, and checking units, coordinates, and what a dataset actually covers matters more than the model.

Combining two imperfect signals (camera and sensors) plus a rainfall check is far more trustworthy than either alone.

AI agents work best with strict structure, real tools, and guardrails, and reports need confidence and limits, not just confident prose.

Being honest about what is simulated builds more credibility than hiding it.

What's next for SilentSpill

Test on real camera feeds and real gauge streams, and validate against historical spill events with agency partners.

Add real outfall locations, more states, and live NOAA and USGS feeds end to end. Learn each river’s normal behavior over time so alerts get smarter and false alarms drop.

Add alerts and a review workflow so water agencies or watershed groups can act on a flagged incident faster.

Built With

Share this project:

Updates

Submission history