Inspiration## Inspiration

The OneAquaHealth Citizen Science App asks volunteers to complete a 9-step, ~25-question stream assessment by matching real streams to reference pictures — channel shape, bank type, vegetation, water flow, and more. It's thorough, but it's also a lot of guesswork for a non-expert, and nothing in the flow checks whether answers actually make sense together. We wanted to help citizens answer more accurately without ever letting AI override their judgment.

What it does

AquaLens is a mobile-first companion app for the OneAquaHealth citizen science workflow. A volunteer takes four photos (upstream, downstream, surrounding context, biodiversity). AI then suggests answers to the official assessment questions — each with a confidence score and a one-sentence reason — but nothing is saved until the citizen accepts, edits, or marks it "not sure."

Along the way, AquaLens:

  • Flags contradictions in plain language (e.g. "flow marked dry, but you entered a water height")
  • Checks GPS against the chosen site and warns if you're far away
  • Lets the citizen pick the overall ecosystem rating before showing an AI comparison, so the AI never anchors the human's judgment
  • Sends high-risk answers (visible pipes, sewage, construction) to an expert review queue
  • Produces two plain-language, clearly labelled "indicative only" risk notes — one for human/pet contact safety, one for ecosystem pressure
  • Exports every observation as a standards-based FHIR Bundle (Location, Observation, Provenance resources) and can send it live to a public FHIR test server

How we built it

  • Backend: FastAPI (Python), SQLAlchemy, Pydantic — deployed on Render
  • Frontend: React + TypeScript + Vite + Tailwind, built as an installable PWA — deployed on Vercel
  • AI: Groq's vision model (qwen/qwen3.8-27b), behind a provider chain (Groq → cache → mock) so the app degrades gracefully instead of breaking when the AI is unavailable
  • Context: Open-Meteo for recent rainfall, OpenStreetMap Overpass for water-body checks
  • FHIR: fhir.resources library, validated against a public HAPI test server
  • Database: PostgreSQL on Render

We wrote a detailed PRD/TRD and an explicit AI behavior contract before writing any code — the AI is never allowed to invent an answer; "not sure" is always a valid, honest response, and every stored field records whether it came from the AI (accepted or edited) or was entered by the human.

Challenges we ran into

  • Calibrating AI honesty: early tests showed the AI being overconfident about water flow (fast/slow/stagnant) from a single still photo — something genuinely hard to judge without motion. We tightened the prompt so it defaults to low confidence or "not sure" on that field rather than guessing, and validated this with a labelled test set of real stream photos.
  • Deploying for real: moving from local SQLite to a hosted Postgres instance surfaced a missing database driver and a Docker build-context mismatch — both fixed and now documented in our deployment guide.
  • Keeping humans in control: it would have been easy to let AI suggestions auto-fill the form. We deliberately designed every AI-touched field to require an explicit human action before it's ever saved.

Accomplishments we're proud of

  • A genuinely working, end-to-end flow: photo → AI suggestion with honest confidence → human confirmation → validation → risk notes → FHIR export → expert review
  • An AI that says "I'm not sure" instead of guessing, on a hackathon deadline, instead of quietly faking confidence
  • Zero-cost architecture throughout, built entirely on free tiers

What we learned

Responsible AI isn't a disclaimer you add at the end — it has to be a constraint you design the data model and UI around from the start (source-tracking every field, capping confidence where motion/context genuinely can't be judged from a photo).

What's next for AquaLens

  • Confirm the remaining unconfirmed fields (habitat/debris sub-types, water height units) directly with the OneAquaHealth team
  • Real authentication for the expert review role (currently PIN-based for demo purposes)
  • A live wellbeing-correlation view using real citizen feelings data at scale
  • Offline queueing for areas with poor connectivity

Built With

Share this project:

Updates

Submission history