Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for aqua-signal
Inspiration
I live with the same question a lot of city residents have: the river running through town is measured every fifteen minutes by public sensors my taxes already paid for — temperature, dissolved oxygen, pH, turbidity — and yet nobody ever reads those feeds. The data is free and public (the USGS National Water Information System), but it sits in raw time-series that no resident, journalist, or city analyst will ever open.
For my first hackathon I wanted to close that last mile: turn open sensor feeds into a one-glance, honest answer to "how is our river doing, and which way is it heading?" — and to do it in a way where every number on the page can be traced back to the exact rule and the exact readings that produced it.
What it does
aqua-signal is a self-contained dashboard that screens 10 urban rivers across the US — Philadelphia, Trenton, Washington DC, Pittsburgh, Cleveland, Clinton (IA), Atlanta, Portland, Wilmington (DE metro), and Baton Rouge — from live USGS continuous-monitor data.
For every river it pulls up to 400 days of daily-mean water temperature, dissolved oxygen, pH and turbidity, then runs a transparent rules+statistics assessment engine:
- Threshold rules from published freshwater criteria (EPA pH 6.5–9.0, DO ≥ 5 mg/L warmwater criterion, temperature/turbidity stress bands).
- Seasonality-free trend detection — the last 30 days are compared against the same calendar window one year earlier, so normal spring-to-autumn warming is never mistaken for degradation. A raw Mann-Kendall test with Sen's slope is shown alongside for context.
- Anomaly detection — a 30-day rolling z-score flags sensor spikes and possible pollution events (|z| ≥ 2.5), drawn directly on the charts.
- Plain-language narratives — every site gets a generated assessment naming exactly which rules fired and the numbers behind them.
Sites are ranked worst-first into a watch list. On the live build the engine surfaced a consistent signal: urban rivers running 1.3–2.7 °C warmer than the same period last year, with Brandywine Creek near Wilmington topping the watch list on combined warming (+1.32 °C YoY), dissolved-oxygen decline (−0.78 mg/L YoY) and turbidity rise (+12.9 FNU YoY).
The output is a single static HTML file with inline SVG charts — no JavaScript, no server, no dependencies — hosted free on GitHub Pages.
What's next for aqua-signal
- More cities (the engine is data-driven; adding a USGS site is one line).
- Alerting: email/RSS when a site crosses status bands.
- Biological indicators (the EU Water Framework Directive ladder I'm inspired by is ultimately biological) once a comparable open US dataset is found.
Built with
python · usgs-nwis-api · github-pages · svg · unittest ·
zero-runtime-dependencies
Built With
- python
- usgs
Log in or sign up for Devpost to join the conversation.