Skip to content
EducationAndroidiOS

Wild Snap

A citizen-science field app — wildlife sightings and water-quality sampling, logged with GPS and reviewed through a built-in admin console

A Flutter citizen-science app with two observation tracks: wildlife sightings (photo, a species picker sourced from an admin-managed list, a self-reported confidence rating, GPS location) and water-quality sampling (a detailed chemistry form plus manually assigned site/region/watershed A-F grades). A shared map plots both, and a 5-tab admin console in the same codebase handles moderation, species management and user blocking.

Wild Snap — app screenshot
Wild Snap — app screenshot
Wild Snap — app screenshot

Source is private. The dual wildlife and water-quality data model and the role-gated admin console are explained below.

About this project

The app is built around two distinct observation forms reachable from one 'Add Observation' sheet. A wildlife observation captures a photo (camera opens automatically on entry, with a dismissible safety-prompt dialog first), a species name picked from a list an admin manages in Firestore, a self-reported confidence level ('Not at all confident' through 'Extremely confident'), GPS coordinates reverse-geocoded to an address, and free-text notes. A water-quality observation is far more detailed: water source, city/state, sample date, temperature, pH, dissolved oxygen, nitrate, phosphate, turbidity, salinity, biological oxygen demand and coliform bacteria, plus three separate A-F grade dropdowns (site, region, watershed) the user assigns manually — there is no automatic grade calculation from the readings. The water form also carries school and teacher fields for classroom-based sampling programs.

A shared map screen plots both observation types as togglable marker layers with a pulsing-location indicator and a draggable bottom sheet for browsing nearby entries, and a dashboard shows live Wild/Water/Total counts pulled from Firestore. The admin side is a second navigation shell in the same codebase, gated by user role: five tabs (Stats, Manage, Users, Map, Settings) covering dashboard stats and recent activity, species and observation moderation, user management including block/unblock, and an admin map view — the same dual-track data model, just with edit and moderation rights layered on top.

Auth is Firebase email/password, with social sign-in staged for a later phase. A multi-page onboarding frames the app as a community-science tool from the first screen.

Key features

  • Wildlife observation logging — camera capture, a species picker sourced from an admin-managed Firestore list, a self-reported confidence rating, GPS location reverse-geocoded to an address, and notes
  • Water-quality sampling form — temperature, pH, dissolved oxygen, nitrate, phosphate, turbidity, salinity, biological oxygen demand and coliform bacteria, plus manually assigned site/region/watershed A-F grades and school/teacher fields built for classroom-based sampling
  • Shared map screen plotting both observation types as togglable layers, with a pulsing location marker and a draggable bottom sheet for browsing nearby entries
  • 5-tab admin console in the same codebase — dashboard stats and recent activity, species and observation moderation, user management with block/unblock, an admin map view, and settings
  • Dismissible safety-prompt dialog shown before wildlife-observation capture, with the opt-out preference stored locally
  • Firebase email/password auth

More in Education

~/sherazi.dev$./say-hello

Say hello.

Questions about a case study, one of the packages, AI tooling or Flutter in general are always welcome.

// or browse the packages on pub.dev(opens in a new tab)