Inspiration
A river photograph can start a useful conversation, but it also raises questions: when was it taken, what is actually visible, and what still needs verification?
Inspired by OneAquaHealth’s connection between water ecosystems and human, animal and environmental health, we built AquaLens to help citizens turn observations into clearer, traceable evidence while preserving uncertainty and human judgment.
What it does
AquaLens guides an observation from capture to a portable Decision Receipt:
- Observe: capture or upload photographs, preserve the original note, and optionally supply location, measurements and field context.
- Check: local rules examine missing context, contradictions, image usability and supplied measurement inputs.
- Clarify: optional, consented AI suggests possible visual observations and focused questions.
- Confirm: the citizen explicitly accepts changes or retains uncertainty before saving.
- Review: a reviewer records agreement, disagreement or uncertainty with reasons.
- Share: export the evidence, sources and retained decisions through receipts, JSON/CSV/GeoJSON or original-media field packs.
The evidence-completeness score explains what information is present or missing. It does not grade river health.
Making evidence understandable
Our Visual Observatory combines a chronological photo explorer, manual comparisons, an interactive globe and an Evidence Constellation connecting sources, checks, AI proposals and review decisions.
The archive contains 39 credited historical photographs of the Mondego in Coimbra, Garonne in Toulouse and Hoffselva in Oslo, with published source dates spanning 2005–2026. Charts expose source coverage and missing years rather than inventing environmental trends.
The Decision Receipt presents original evidence, deterministic checks, AI proposals, explicit confirmation and human judgment as separate inspectable layers.
How we built it
We used React and TypeScript, with Vinext/Vite and Cloudflare Worker API routes. Zod validates requests and model outputs. Gemini provides optional text and image assistance, with a configured Groq availability fallback and bounded requests.
Original media is stored in IndexedDB, while browser-local records retain notes, decisions and provenance. MapLibre powers geographic exploration, React Flow renders evidence relationships, and Recharts displays analytics. Three.js, Motion and CSS provide visual depth and controlled animation. Workbox supports cached navigation and assets after an online visit.
Challenges we faced
The central challenge was making AI helpful without allowing an uncertain suggestion to become an unsupported conclusion. We addressed this through restrictive output schemas, cautious candidate wording, explicit confirmation and preserved disagreement.
We also had to distinguish historical photo dates from AI analysis and weather-model times, match findings to the correct photograph, handle provider failures, and keep graphs, globe controls and layered receipts readable on small screens.
Accomplishments and what we learned
We connected a complete local citizen-to-reviewer workflow to an interactive evidence presentation.
The recorded October 3 development verification passed 423 authored software checks, TypeScript, lint and a production build, alongside focused browser checks of photographs, filters, exports, responsive layouts and controlled offline navigation. These results establish prototype behavior, not ecological accuracy.
We learned that explainability starts with preserving the source: what was supplied, which method ran, what remains unknown and who made each decision.
What’s next
Our next priorities are real citizen walkthroughs, qualified reviewer feedback, broader device and accessibility testing, and a tested public deployment. Authentication and durable shared storage would follow before multi-user operation.
AquaLens currently uses local demonstration roles. Presentation reviews are labelled authored software examples, and recorded AI candidates remain unverified. Photographs cannot establish pathogen or pollutant identity, water safety or ecological status.
Sources and credits
Historical photographs retain their authors, dates and individual licences in our source credits.
The Mondego photograph shown in our overview and mobile screenshots is by Vitor Oliveira, CC BY-SA 2.0, original source.
Map attribution remains visible. Weather and satellite context carry separate source, time and coverage limits.
Built With
- cloudflare-workers
- google-gemini-api
- groq
- idb
- indexeddb
- javascript
- lucide
- maplibre-gl-js
- motion
- nasa-gibs
- node.js
- open-meteo-api
- radix-ui
- react
- react-flow
- recharts
- shadcn/ui
- tailwind-css
- three.js
- typescript
- vinext
- vite
- workbox
- zod
Log in or sign up for Devpost to join the conversation.