Skip to case study

Fauna

Turning casual outdoor curiosity into ecological literacy through an approachable AI field companion

Bridging computer vision and field biology to help people explore, understand, and engage responsibly with nature.

My role
Founder & Design Engineer
Platform
iOS
Timeline
Jan 2026–Present

01 / Origins

It started with paying attention.

We know more about the natural world than any generation before us, yet experience far less of it.

Isabel photographing wildlife while testing Fauna in a lush forest in Indonesia
Testing Fauna in Indonesia, the second most biologically diverse country in the world.

For years, I traveled the way most people do—chasing iconic landmarks and tourist hotspots. Eventually, that changed. I started seeking out quieter landscapes and researching what lived there before arriving. That shift fundamentally sharpened my perception. Exploring outdoors felt less like passive sightseeing and more like an intentional quest to notice what hides in plain sight.

But when I looked for a way to document what I observed, existing tools fell short. Most felt too academic, utilitarian, or difficult to stick with. So, I built Fauna as a personal field journal to solve my own frustration, though what began as a private project quickly evolved into something much larger. Today, Fauna exists to prove that engaging with nature shouldn’t require specialized training or cumbersome tools. Just curiosity, thoughtful design, and a reason to look closer.

02 / Designing for discovery

A reason to look outward.

Connection starts with something as simple as being able to name what you're looking at.

Most products want your attention. This one hands it back.

Start with the wildlife people actually encounter

The experience

Collections are themed sets of species to discover and log, grouped by habitat or shared traits.
Fauna Collections screen showing Ecosystem Chains and Species Sets, including The Forest Floor, Wetland Territories, Moonlight Marvels, and Urban Dwellers

Collections are themed sets of species to discover and log, grouped by habitat or shared traits.

Some collections are harder to complete than others, and difficulty varies around the world. I included regional variants and broader species groups to make progress as globally inclusive as possible.
Fauna Backyard Birds collection with 4 of 12 birds discovered, including hummingbird, sparrow, mourning dove, and mockingbird

Some collections are harder to complete than others, and difficulty varies around the world. I included regional variants and broader species groups to make progress as globally inclusive as possible.

The Reality

Early scan behavior revealed that users begin with what is immediately within reach, often testing the camera on friends, family, houseplants, and pets before ever stepping outdoors.

The Response

Discovery needed to feel immediately accessible. I restructured collections around familiar, reachable environments rather than intimidating, distant biomes, ensuring first milestones felt natural and attainable from the doorstep.

The Result

Meeting users where they already were drove the highest engagement. The most accessible collections became the most unlocked sets: Backyard Birds, Secret Garden, and Mystic Meadows—proving that users didn't need rare expeditions to feel the reward of discovery, just a reason to notice what was already around them.

The Takeaway

Start with the world users already know, then give them a reason to explore further.

Pacing discovery through physical uncertainty

The experience

Field challenges reward ongoing engagement with nature.
Fauna Field Challenges screen showing completed milestones for observing species and exploring neighborhoods

Field challenges reward ongoing engagement with nature.

Small discoveries deserve a moment of achievement.
First Sighting badge earned for capturing a first species

Small discoveries deserve a moment of achievement.

The Reality

Wildlife discovery is often unpredictable. Encounters cannot be scheduled, spawned, or forced. When collection mechanics rely strictly on all-or-nothing set completion, the system inadvertently penalizes users for environmental factors outside their control.

The Response

I separated momentum from rigid checklists by layering open-ended micro-milestones and field challenges alongside macro-collections. Instead of gating achievement behind rare, elusive species, the system rewards broader attentiveness like logging broad taxonomic categories, observing distinct micro-habitats, or maintaining consistent outdoor streaks.

The Result

Rewarding everyday exploration eliminated the sharp drop in engagement during the first week. Users returned more often and stayed active week after week. With every walk offering a chance to make progress, discovery became a habit rather than a hunt for rare sightings.

The Takeaway

Reward the effort of looking, not the luck of finding. Progress in physical spaces must validate attentiveness over completion.

03 / The consistency problem

Recognition is one thing. Classification is another.

One plant shouldn't have three identities.

A model guesses in isolation.
A system requires a single truth.

From model inference to canonical taxonomy

My early computer vision experiments with Gemini highlighted the instability of raw model outputs. Scanning the exact same bird of paradise across different angles and lighting returned arbitrary names like “Bird of Paradise Plant,” “Giant Bird of Paradise,” and “Large Bird of Paradise.”

The identification system

From photo to collection progress

AI suggests an identity. GBIF gives it a consistent reference.

  1. Photo + context

    Photos, date, and location give the system a starting point.

    Image quality is checked before analysis.

  2. AI suggestions

    Gemini proposes a likely species and ranked alternatives.

    Nothing identifiable? Return no match.

  3. GBIF identity

    Resolve the proposed name to a taxonomic record.

    Stable species keyTaxonomic lineage

    No reliable anchor? Keep the identity unresolved.

  4. Profile + confidence

    Build the profile around that identity and show how certain the ID is.

    Low confidence? Show a best guess, with a choice to retake or log.

  5. Log + match

    Save the sighting and check it against collection criteria.

    Match by identity and lineage, even when names vary.

One shared identityA stable key connects sightings to the same species profile.

A place in the family treeLineage connects that species to broader collection groups.

The Reality

Because vision models are probabilistic, relying on naive string matching was unviable. Cataloging every colloquial synonym and regional alias across thousands of species would quickly collapse.

The Response

I anchored the classification system to the Global Biodiversity Information Facility (GBIF), which maintains taxonomic keys for over a million species. Instead of matching arbitrary strings, I restructured the identification pipeline and prompt architecture to map visual inferences directly to persistent GBIF taxon keys, giving the app a standardized, scientific backbone.

The Result

The collection engine gained deterministic stability. Regardless of how the AI phrased its initial observation, the backend reliably resolved it to a canonical biological entity, preventing duplicate catalog entries and false-negative scans.

The Takeaway

Trust in AI is built beyond the model. Reliable systems turn uncertain predictions into experiences people can depend on.

Clarifying matching criteria with natural language

A user scanned what they believed was a four-leaf clover, only to find that it didn’t fill the collection slot: the model identified it as wood sorrel, a different plant. Moments like this exposed a gap between how people understand nature and how biology actually works. Familiar names and visual similarities can lead to mistaken assumptions. I had to reconcile scientific accuracy with those expectations, helping people understand unexpected identifications while reconsidering where collection rules were too restrictive.

The matching logic

When everyday names don’t fit the family tree

A biological group can include animals people would never put in the same collection slot.

When everyday names don’t fit the family tree
Collection matchWhat goes wrongHow the system handles it
MothLepidoptera includes butterflies, too.Exclude 5 butterfly families
ButterflyOne broad group cannot separate butterflies from moths.Combine 5 family anchors
DuckAnatidae also includes swans and geese.Exclude 3 groups
SquirrelSciuridae also includes chipmunks.Exclude chipmunks
GrasshopperOrthoptera also includes crickets.Exclude crickets
WolfDomestic dogs fall within the wolf’s ancestry.Combine anchors; exclude dogs
MinnowCyprinidae includes koi and goldfish.Match 7 selected genera
RatMuridae also includes mice, voles, and gerbils.Narrow the match to genus
SnailThe same ancestry can include shell-less slugs.Unresolved by taxonomy alone

The experience

Earlier: all the matching rules, spelled out.
An early Robin collection slot showing a long list of taxonomic matching criteria

Earlier: all the matching rules, spelled out.

Refined: show the types someone might find.
A refined Heron collection slot with visual Types and a habitat range map

Refined: show the types someone might find.

The Reality

People group wildlife through casual, intuitive mental models (think “duck”, “snail”, “moth”), but biological taxonomy does not follow conversational English. Many everyday terms are paraphyletic or polyphyletic groupings rather than clean clades. A “slug,” for instance, isn't an isolated evolutionary branch. It's a trait that evolved independently across multiple snail lineages. Because both share the same taxonomic order, scanning a slug naturally satisfies the “snail” slot, which most people wouldn’t expect, but it is what’s taxonomically correct.

The Response

My initial solution was to display the exact matching criteria on each slot to eliminate guesswork. To further improve the experience, I expanded the matching criteria to include regional variants and broader taxonomic ranks, significantly increasing the likelihood of users around the world successfully filling each slot.

The Result

While exposing the criteria was a helpful guide that removed a lot of confusion, some slots required longer lists that felt long and cumbersome. I later replaced this text-heavy approach with a visual “Types” section, conveying the various species users could spot through thumbnails instead of specific taxonomic conditions.

The Takeaway

A familiar label can hide a complicated boundary. Handle taxonomic complexity in the system so the interface speaks the user’s natural language.

04 / Trust in the field

Balancing digital discovery with ecological responsibility.

In the wild, false certainty has real consequences. The interface has to be designed for what the model doesn't know.

01Show what the model is unsure about.

02Make mistakes easier to report.

03Keep the encounter safe to observe.

Transparency in uncertainty

The experience

An identification comes with room for doubt.
Fauna identification sheet with a confidence tier and other possible species matches

An identification comes with room for doubt.

Explain the tier and make alternatives inspectable.
Alternate species matches and a rubric explaining Fauna’s confidence tiers

Explain the tier and make alternatives inspectable.

The Reality

No identification from a probabilistic model is absolute, and presenting a guess as fact can lead to serious repercussions–especially if a user relies on it to decide whether something is edible or venomous.

The Response

I included a confidence score for every identification, alongside other possible matches detailing their diagnostic features. A transparent rubric accompanies these scores, explaining exactly what the percentage means and why the model placed the image in that specific confidence tier.

The Result

User feedback on this addition was highly positive. They appreciated seeing alternative possibilities, finding value in the learning process even when the model’s primary prediction was incorrect. From a systems perspective, these scores provided a critical new data point in user correction reports, helping me diagnose whether the system prompt needed tuning, whether user images lacked diagnostic quality, or the underlying architecture needed adjustment to boost confidence.

The Takeaway

A confident answer needs room for doubt. Trust comes from inviting people into the validation process.

Give users a clear way to flag mistakes

The experience

V1.0.0: give people a way to flag a mistake.
Species correction screen offering Australasian Gannet and Cape Gannet as alternative identifications

V1.0.0: give people a way to flag a mistake.

V1.1.1: help people recognize and choose an alternative.
Report confirmation offering to apply Cape Gannet as the corrected identification

V1.1.1: help people recognize and choose an alternative.

Early submissions showed users were eager to flag misidentifications, and their self-reported confidence ratings (“expert ID” vs. “pretty sure”) offered a valuable signal. But evaluating ambiguous, freeform submissions manually was unscalable, leaving a growing queue of user reports with no reliable path to resolution.

The Reality

Capturing error reports is straightforward. Triaging them without a biological domain expert is the real bottleneck. Platforms like iNaturalist solve verification through crowdsourced consensus, but Fauna is fundamentally a personal collection, so importing social moderation would fundamentally shift the product's identity.

The Response

Instead of jumping to heavy community infrastructure, I audited the incoming reports. Nearly 50% of submitted corrections were secondary candidates the model had already identified. Users had overlooked them simply because the suggestions were presented in scientific binomials rather than colloquial English. I paired common names alongside the binomials and allowed users to directly swap their entry to a secondary match during the report flow.

The Result

Translating model alternatives into plain language turned passive feedback tickets into instant, self-serve corrections. Users resolved roughly half of all misidentifications immediately without waiting for backend triage. While authoritative validation for rare edge cases remains an open challenge at scale, this interface fix eliminated the bulk of triage friction and closed the feedback loop within seconds.

The Takeaway

Before building operational overhead to fix reports, check if the interface is simply obscuring the right details. Often, the most effective error recovery isn't complex backend moderation—it's giving users the tools and language to self-correct in the moment.

Landing in-between confidently wrong and cautiously right

The experience

A correct species name can still conflict with what someone expects.
User correction report from Alaska requesting Grizzly Bear instead of Brown Bear

A correct species name can still conflict with what someone expects.

Common names add recognition without promising subspecies precision.
Brown bear profile showing familiar common names, classification, and risk guidance

Common names add recognition without promising subspecies precision.

A report from a user who had seen a grizzly bear in Alaska exposed a subtle product tension: the identification was scientifically accurate, but calling it a “brown bear” felt wrong to the user.

The Reality

General vision models cannot reliably separate subspecies. Natural variation within a group often outweighs the differences between separate ones, and training data is thin. Unlike specialized classifiers (like Merlin for birds or PictureThis for flora), an “all-life” app must spread its training data across entire kingdoms, diluting sample depth. Compounding the issue, subspecies is taxonomy's least stable rank—rarely backed by scientific consensus and subject to constant revision.

The Response

Rather than chasing false precision through high-risk model guessing, I deliberately capped classification at the species level. I introduced an “Also Known As” section to display regional and colloquial names as non-definitive possibilities.

The Result

By framing these variants as contextual overlap rather than an authoritative verdict, the UI validates the user's mental model without requiring the model to make a high-risk, unverified subspecies call.

The Takeaway

Know when detail stops adding value. When signals are weak, a defensible broad answer builds far more trust than a plausible guess.

How loud a warning needs to be

The experience

In the camera: a light reminder.
Camera interface with a gentle reminder about interacting with wildlife

In the camera: a light reminder.

At the species: specific guidance.
Species profile with explicit risk information and interaction guidance

At the species: specific guidance.

Pokémon Go demonstrated what happens when digital collection mechanics collide with the physical world: people trespassing, crowding, and trampling habitats just to finish a set. I wanted to design for the opposite pressure, which meant deciding not only what to say about wildlife, but how forcefully say it.

The Reality

Gamified collection can drive reckless behavior outdoors, and relying on AI for safety guidance proved unreliable. An early model flagged domestic cats as “Large Wildlife” through family inheritance, while a coral snake identified at 62% confidence showed zero hazard warnings because safety checks were gated behind high-confidence thresholds.

The Response

I anchored seven hazard flags to taxonomic baselines that the AI can raise but never lower. Warnings trigger regardless of model confidence, while pets skip family inheritance to prevent false alarms. Guidance scales from subtle viewfinder cues to detailed profile notes without encouraging dangerous close-ups.

The Result

The system eliminated critical safety false-negatives without creating alert fatigue. Domestic animals ceased triggering apex-predator warnings, while ambiguous, high-risk encounters surfaced immediate protective guidance regardless of model certainty.

The Takeaway

When an interface mediates real-world hazards, guardrails must never be left solely to model guesswork. Proper safety baselines should be factored into the architecture so digital incentives never compromise real-world safety.

Help users take a better shot for identification

The experience

General guidance is available from the viewfinder.
On-demand camera guidance for taking useful wildlife identification photographs

General guidance is available from the viewfinder.

Show the shot, as well as describe it.
Fungus identification guidance showing the underside of the cap, the stem, and the growing environment

Show the shot, as well as describe it.

Auditing user correction reports revealed that many “AI failures” were actually capture issues. Submitted photos were frequently motion-blurred, taken from dozens of feet away, crowded with multiple competing subjects, or buried in environmental clutter.

The Reality

Since computer vision is fundamentally bounded by visual input quality, poor framing capped identification accuracy.

The Response

I introduced an on-demand camera guide directly accessible from the viewfinder. Instead of vague photography advice, the guide provided category-specific framing rules, paired with clear visual examples illustrating the most diagnostic angles for different types of flora and fauna. To measure effectiveness, I tracked how often people opened the guide and whether low-confidence scans and reports of incorrect categories became less common.

The Result

The guide helped users take clearer, better-framed photos. Visual examples showed which angles to capture and how much of the subject to include. This led to fewer low-confidence identifications and fewer reports of incorrect categories, without adding extra steps to scanning.

The Takeaway

When an AI product relies on visual reasoning, guiding user capture behavior at the point of input often delivers bigger, faster gains in reliability than backend model tuning.

05 / Guided exploration

Giving curiosity a place to start.

Without direction, an open landscape can feel overwhelming. Explore narrows the field by displaying what, where, and when to explore.

Solving the content distribution layer

The experience

Fixed regions give nearby people a shared answer.
Fauna globe showing hexagonal regions for local discovery

Fixed regions give nearby people a shared answer.

More demand can justify finer detail.
A closer map view of hexagonal regions used to organize Fauna’s local content

More demand can justify finer detail.

The Reality

Generating personalized, location-aware ecological content per user per session would have been expensive and unviable. My initial instinct to use a circular radius around the user led to problems since a radius describes a relative distance, not an absolute place. Nothing would overlap cleanly, and nothing would be cacheable.

The Response

I abandoned user-centered radii in favor of Uber’s H3 hierarchical hexagonal grid. The cells are fixed globally and don’t move with anyone so your location doesn’t define a boundary–it just falls inside an existing one. Everyone in a cell shares an answer, and the cell would have a stable ID that works as a cache key.

The Result

Resolution would instead be tied to demand: the first tap anywhere on Earth is met with a country scale (around 420km across). From there, cells become increasingly granular as user traffic demands more specificity. The cost to generate a new generation would drop to a few cents instead of potentially thousands of dollars, and the places people actually visit reveal more detail, economically justified by the traffic itself.

The Takeaway

Geospatial AI is economically unviable if compute scales per user. Replacing personal perimeters with an immutable global grid turns expensive inferences into shared, reusable infrastructure.

A seasonal guide with honest limits

The experience

Expected bloom windows give an observation a sense of timing.
Fauna’s local bloom guide showing plants and their predicted flowering windows

Expected bloom windows give an observation a sense of timing.

The Reality

Plants deserve as much attention as animals, but building and maintaining a real-time phenology pipeline is too much infrastructure for one small section of a product. While raw open data is free, the infrastructure required to continuously ingest regional observations, calculate dynamic climate baselines, and sync live databases was financially unjustifiable for a single module on a screen.

The Response

I transitioned from a static list of species to an agile, predictive estimation model. Instead of timeless catalogs, each flowering plant was mapped to a four-stage window: budding, blooming, peak, and fading. I then fed the AI thirty days of trailing local temperature data, allowing the system to dynamically nudge predicted peak dates forward or backward depending on whether a region experienced an unseasonable warm streak or an early freeze.

The Result

The model delivered responsive botanical guides without continuous operational costs, but batch latency exposed an unavoidable constraint. Because dates are generated once a month, a late frost can hold buds closed while the app reports peak bloom, leaving the error uncorrected for weeks. Eliminating that drift isn't something design can solve alone. It requires moving from weather-based heuristics to a live, observational ground-truth pipeline.

The Takeaway

When continuous data pipelines are cost-prohibitive, lightweight predictive heuristics deliver the perceived magic of real-time responsiveness.

06 / A new founder paradigm

AI expanded what I can build and changed what I have to own

The feedback loop got shorter, but the responsibility got bigger. Building and running Fauna taught me many lessons about where to focus, how to listen, and what to measure.

From “can we build it?”
to “should we?”

01

Do not try to solve every future problem on day one.

I overbuilt early with restrictive API caps, aggressive caching, and a comprehensive design system before the product had earned that complexity. Some safeguards created more friction than they removed.

02

Find the real need behind the request.

Not all user friction requires a design intervention. One person wanted scans saved automatically and another valued choosing what to keep in their journal. The right response begins with listening to the intention.

03

Instrument the product from the start.

Analytics gave me a way to test assumptions, evaluate what was working, and explain my decisions. Without that grounding, I would have wasted effort building something more complex when a simpler solution was available.