Inspiration

Urban freshwater ecosystems are easy to overlook until something visibly changes: unusual surface growth, floating vegetation, litter, dead aquatic life, flooding, or a change in water appearance.

Citizen observations can help document these changes, but they also create an important problem: a photograph and a quick human label can be ambiguous.

What looks like algae might actually be floating vegetation. What looks unusual might be harmless. And a single photograph cannot establish toxicity, pathogens, pollution levels, or whether water is safe.

That led us to a different question:

What if AI did not try to make the final environmental judgment, but instead helped people collect better evidence?

Limnora was built around that principle.

AI disagreement is not the answer. It is the next data-collection question.

Our goal is to make citizen-generated freshwater observations more traceable, explainable, and useful to communities, reviewers, and researchers while keeping human judgment at the center.


What it does

Limnora turns uncertain freshwater observations into traceable, human-reviewed evidence and focused revisit questions.

A citizen can select a pond, lake, stream, river, reservoir, or other freshwater body and submit:

  • an original photograph,
  • the actual observation time,
  • visible water conditions,
  • water movement,
  • clarity and colour,
  • bank litter,
  • aquatic-life observations,
  • naturally noticed odour,
  • and other field context.

The observation is saved before AI screening, so an AI outage never causes the citizen's evidence to disappear.

Independent AI screening

One of Limnora's most important design choices is that the AI first examines the image without receiving the observer's selected category or descriptive guess.

The model independently returns:

  • what it can visibly support,
  • an alternative interpretation,
  • whether the photograph is relevant,
  • qualitative uncertainty,
  • and a useful follow-up observation.

Only after that independent interpretation is created does Limnora compare it with the citizen's original label.

This reduces confirmation bias and makes disagreement meaningful.

Human review instead of silent correction

Limnora never silently replaces what the citizen originally reported.

The original observation remains immutable.

Human reviewers can add:

  • a different interpretation,
  • a suggested correction,
  • additional field context,
  • and reasoning.

Every review stays traceable alongside the AI assessment and the original citizen observation.

Observation → question → revisit

If the evidence is disputed or uncertain, Limnora generates a focused next field question.

For example, instead of simply saying:

"The AI disagrees."

Limnora can ask the observer to safely return and document whether the surface consists of separate floating leaves or a continuous film.

A later observation can then be linked as a genuine revisit.

Limnora compares the two visits and shows:

  • previously unknown context that was added,
  • observer-reported differences,
  • whether the AI interpretation changed,
  • the evidence state of each visit,
  • and what still remains unresolved.

A changed observation is never presented as proof that the ecosystem improved or deteriorated.

Reviewer Workbench

Limnora also includes a dedicated Reviewer Workbench that surfaces evidence needing human attention.

Reports can be prioritized as:

  • Field review suggested
  • Interpretation review
  • More evidence needed
  • Review open

Each review card includes:

  • source evidence,
  • observer interpretation,
  • independent AI interpretation,
  • evidence status,
  • revisit relationship,
  • reasons for review,
  • missing context,
  • the next useful field question,
  • and linked revisits.

This turns Limnora from a simple reporting interface into an evidence-triage and research-handoff workflow.

Researcher handoff

A water-body evidence record can be exported as:

  • a Limnora JSON evidence brief,
  • a researcher-friendly Markdown brief,
  • and an experimental FHIR interoperability prototype.

The FHIR export is intentionally presented as experimental and is not claimed to be validated OneAquaHealth/FHIR conformance.


How we built it

Limnora is built as a full-stack web application using Next.js, React, TypeScript, Supabase, OpenRouter, Sharp, MapLibre, OpenFreeMap, and OpenStreetMap data.

Freshwater mapping and provenance

Map interactions use MapLibre with OpenStreetMap-based data.

When possible, selected freshwater bodies are resolved through OpenStreetMap/Overpass geometry and stored with stable map-source provenance.

If a small freshwater body is not mapped, users can explicitly declare it as freshwater instead of the application inventing a map identity.

Evidence storage

Supabase stores:

  • water-body records,
  • observations,
  • processed public photo derivatives,
  • confirmations,
  • AI-assessment history,
  • reviews,
  • and revisit relationships.

Image privacy and processing

Before public storage, uploaded photos are:

  • decoded,
  • size-bounded,
  • resized,
  • rotated where necessary,
  • and re-encoded without EXIF metadata.

Server-side credentials remain outside browser code, and public API responses remove internal owner, reviewer, photo-hash, and provider-attempt information.

Responsible AI architecture

OpenRouter powers the independent image-first assessment.

The AI endpoint uses constrained structured output and records model and prompt provenance.

If an AI request fails:

  • the citizen observation remains saved,
  • the interface clearly reports the failure,
  • human review remains available,
  • and a previous successful assessment is not overwritten by a failed retry.

Scale

Observation retrieval is bounded and supports:

  • pagination,
  • water-body filtering,
  • category filtering,
  • date filtering,
  • observation lookup,
  • and map-bounding-box filtering.

The current prototype deliberately keeps distributed rate limits, background AI jobs, staffed moderation, and organization-level reviewer accounts as future production work rather than pretending they already exist.


Challenges we ran into

Preventing the AI from simply agreeing with the user

If the model receives the observer's selected category before analyzing the image, it may become biased toward that interpretation.

We solved this by separating the workflow:

image first → independent AI interpretation → server-side comparison with observer label

This became one of Limnora's most important architectural decisions.

Handling uncertainty honestly

It was tempting to turn the model output into a "water health score."

We intentionally did not.

A photograph cannot establish pathogens, toxicity, potability, measured contamination, or complete ecosystem health.

Instead, Limnora exposes uncertainty and asks what additional evidence would be useful.

Preserving evidence during failures

AI providers can time out, rate-limit requests, or return malformed output.

We designed the system so evidence is stored independently of AI success and a failed reassessment cannot erase a previous successful interpretation.

Connecting repeated observations meaningfully

Simply storing two photographs does not make them scientifically comparable.

Different lighting, framing, season, angle, and water level can all affect interpretation.

Our revisit workflow therefore reports what additional context was collected while explicitly preserving those limitations.

Balancing citizen simplicity with research usefulness

Citizen-science interfaces can become overwhelming very quickly.

We kept Unknown as a valid answer throughout the structured field workflow because an honest unknown is more useful than a forced guess.


Accomplishments that we're proud of

We are especially proud that Limnora does not use AI as an automatic environmental authority.

Instead, it creates a traceable relationship between:

citizen observation → independent AI → disagreement → human judgment → targeted revisit → research handoff

Other accomplishments include:

  • image-first AI assessment without observer-label leakage,
  • immutable original citizen observations,
  • additive human review history,
  • explainable evidence and uncertainty,
  • graceful AI failure handling,
  • linked revisit comparison,
  • a dedicated reviewer workbench,
  • researcher evidence briefs,
  • OpenStreetMap-backed freshwater provenance,
  • privacy-preserving image processing,
  • bounded and filtered observation APIs,
  • responsive layouts across phone, tablet, and desktop sizes,
  • and automated integration and regression testing.

Most importantly, Limnora never turns visual evidence into an unsupported claim that water is healthy or unsafe.


What we learned

The biggest lesson was that responsible AI is not only about adding a disclaimer around a model.

It needs to shape the architecture itself.

We learned to think about questions such as:

  • What information should the model not receive?
  • What evidence should remain immutable?
  • What happens when the model fails?
  • How should disagreement be represented?
  • How can uncertainty lead to a useful next action?
  • What should the system explicitly refuse to infer?
  • How can citizen evidence remain useful to a more qualified reviewer later?

We also learned that citizen science becomes much more valuable when observations are treated as an evolving evidence record rather than isolated reports.


What's next for Limnora

The next step is to expand Limnora from a hackathon prototype into a stronger field-evidence platform.

Future work includes:

  • evaluating the AI workflow on a larger permissioned freshwater-photo dataset,
  • collaborating with environmental researchers on better evidence protocols,
  • building stronger organization/researcher review roles,
  • adding shared distributed rate limiting,
  • asynchronous assessment jobs,
  • scalable moderation workflows,
  • improved longitudinal analysis,
  • and validating interoperability exports against relevant environmental and OneAquaHealth standards.

The principle will remain the same:

AI should help people gather and understand evidence—not pretend to replace environmental expertise.

Limnora turns disagreement into better data.

Built With

Share this project:

Updates

Submission history