Inspiration
I grew up loving aquatic life — streams, rivers, the things living in them. That stayed with me. When I saw this hackathon, it connected to two UN goals I care about: SDG 6 (clean water) and SDG 14 (life below water). Both matter a lot for Africa and for building a more sustainable world.
The problem is simple: urban streams are everywhere, often hidden and ignored, and most people have no easy way to check on their health or help look after them. The existing OneAquaHealth tool asks citizens to answer a long list of technical ecology questions by hand. That's a lot to ask of someone who just wants to help. I wanted to make it easier — let people take a few photos and let AI do the hard part, while keeping real people in control.
What it does
Naiadex is a citizen-science app for urban streams. It does three things:
Identify — Take a photo of anything living in or around a stream (a fish, an insect, a plant) and AI tells you what it is. You can confirm it or correct it, and other people can suggest and discuss too. Every find builds a shared collection.
Assess — Take a few photos of a stream and its surroundings. AI works through a full stream-health checklist in the background — the channel, the water, the plants, signs of pollution — and tells you what it found and how sure it is. You review its answers, fix anything wrong, and finalize. The app then writes a short, plain-language summary of how healthy that stream is.
Explore — Browse the assessments and discoveries everyone has shared, on a map and in a feed. Filter by location or by what the stream is actually like (concrete banks, muddy water, pollution, and so on).
Through all of it, AI helps but never has the last word. It shows its reasoning, admits when it can't tell, and a person always makes the final call.
How I built it
The frontend is React (with Vite and TypeScript) and uses Mapbox for all the maps. The backend is FastAPI in Python, with MongoDB for storage and Google's Gemini for the AI — both the vision (reading photos) and the writing (the summaries).
A few parts were worth building carefully:
- The assessment runs in the background so the app never freezes. You submit, walk away, and come back to watch the AI's answers fill in one group at a time.
- Before spending AI effort, a quick check makes sure the photos are actually of a stream — if someone uploads random pictures, it stops early instead of making things up.
- The whole stream-health checklist lives in the database, not the code, so it can be edited without a developer — and the AI's instructions are built from it automatically.
Challenges I ran into
Getting the AI to be honest was the hardest part. Early on, when a photo didn't show something, the AI would confidently guess — and once it even wrote a detailed summary about a stream it had never actually seen. Fixing that meant teaching it to say "I can't tell from this" and stop there.
Loading was another one. I stored photos directly in the database to keep things simple, which worked until a list page tried to load every photo at once and hung. I had to be careful to only send photos when they're really needed.
And a lot of small, sneaky bugs — a saved field quietly getting dropped, two files with nearly the same name confusing each other, the AI not getting the photos it was supposed to. Each one taught us to check our assumptions.
Accomplishments that I'm proud of
- The app actually works end to end: snap a photo, get an AI assessment in the background, review it, and share it — all in one smooth flow.
- The AI knows its limits. It won't pretend to see something that isn't there, and a human always confirms. That makes the data trustworthy, which is the whole point.
- I made something genuinely easier to use than the original. No ecology degree needed — just a phone and a few photos.
- It's built to grow. New questions, new filters, new features all slot in without rewriting things.
What I learned
The biggest lesson was that AI is most useful when it's honest about what it doesn't know. A confident wrong answer is worse than no answer — especially for something like environmental data that people might rely on. Keeping a person in the loop isn't a limitation; it's what makes the whole thing worth trusting.
I also learned a lot about building something real under time pressure — how to keep an app fast when it's doing heavy work, how to handle things that take time without making people wait, and how many small details have to go right for one simple photo-to-result journey to feel smooth.
What's next for Naiadex
- A map of stream health over time — so a community can see whether their local stream is getting better or worse.
- Early warnings — spotting signs of pollution or trouble before they get serious.
- Deeper community features — letting people agree on identifications together, the way experts do, to build even more reliable records.
- Taking it to real streams in Africa, working with local groups and schools, so the people closest to these waterways are the ones looking after them.
Log in or sign up for Devpost to join the conversation.