DEV Community

Cover image for 🐾 Sniffari: Turning Dog Walks Into AI-Powered Adventures
Allen Labrague
Allen Labrague

Posted on

🐾 Sniffari: Turning Dog Walks Into AI-Powered Adventures

DEV Weekend Challenge: Dog Days Edition Submission πŸ•

This is a submission for Weekend Challenge: Dog Days Edition

What if your dog's normal walk wasn't just a walk?

What if it was a tiny adventure?

That's the idea behind Sniffari β€” an AI-powered scavenger hunt that turns everyday dog walks into personalized missions, real-world discoveries, collectible paw stamps, and a narrated adventure story told from the dog's point of view.

Sniffari = Sniff + Safari. πŸ•πŸŒΏ

🐾 Create a dog.
πŸ—ΊοΈ Go on an adventure.
πŸ“Έ Prove your discoveries.
🐾 Collect paw stamps.
πŸ”Š Let your dog tell the story.


What I Built

I built Sniffari, a mobile-first web experience designed to make an ordinary dog walk feel like a tiny AI-powered expedition.

Instead of simply telling someone:

Take your dog for a walk.

Sniffari gives the dog a personalized set of real-world missions such as:

  • 🌳 Investigate a big tree
  • πŸ’› Discover something yellow
  • 🌸 Find a flower
  • πŸͺ‘ Locate a park bench
  • 🚨 Find something bright red
  • πŸ† Take a victory photo

But the missions aren't hardcoded.

Google Gemini generates the adventure dynamically based on the dog's:

  • Name
  • Energy level
  • Personality
  • Walk duration

Then the owner takes or uploads a real photo to prove each mission.

Gemini examines the image and decides whether the discovery actually satisfies the mission.

If it does:

🐾 PAW APPROVED

The dog earns a collectible stamp.

If it doesn't:

🐾 NOT QUITE YET

Gemini explains what it actually saw and lets the player try again.

After all five missions are completed, Gemini turns the verified discoveries into an Adventure Report written from the dog's point of view.

Finally, ElevenLabs gives the dog a voice, turning that report into expressive narration.


Demo

πŸŽ₯ Watch the Full Demo

The video below shows one complete Sniffari adventure with Mochi β€” from creating a dog passport to Gemini validating real photos and ElevenLabs narrating the final story.

🌐 Try Sniffari

πŸ‘‰ Launch Sniffari

No account is required.

Create a dog passport, generate an adventure, and start collecting paw stamps.


🐾 The Sniffari Journey

The complete experience follows one simple loop:

Create β†’ Explore β†’ Prove β†’ Collect β†’ Report β†’ Listen


🐢 01 β€” Create a Dog Passport

Every Sniffari begins with a small adventure passport.

The owner enters the dog's name and chooses:

  • 🐢 Dog name
  • πŸ“· Optional photo
  • ⚑ Energy level
  • 🎭 Personality
  • ⏱️ Walk duration

For example:

Mochi
⚑ Playful
πŸ’₯ Chaos
⏱️ 20-minute walk

The app also includes quick demo profiles such as:

  • ⚑ Mochi β€” Chaos
  • πŸ‘‘ Luna β€” Princess
  • πŸ– Waffles β€” Foodie

The personality isn't only decorative.

Gemini uses it when generating missions, writing mission verdicts, and creating the final story.

πŸ“Έ Create Dog Passport

Dog Passport

Creating Mochi's passport before Gemini builds the adventure.

↓

🧠 02 β€” Gemini Creates the Adventure

Sniffari sends the dog's profile to Gemini.

Gemini generates exactly five personalized missions that can realistically be completed during the selected walk duration.

A mission might look like:

🚨 The Shiny Red Target of Chaos

Find a bright red object worthy of Mochi's inspection.

Or:

πŸͺ‘ The Throne of Unspeakable Mayhem

Locate a park or street bench.

Each mission contains:

  • 🎯 Mission title
  • πŸ“ Description
  • πŸ’‘ Hint
  • πŸ‘€ Visual validation criteria

That final piece is important.

The validation criteria is later sent back to Gemini when the player submits a photo.

So Gemini isn't simply describing an image.

It knows what the player was supposed to find.

↓

πŸ“Έ 03 β€” Prove the Mission

The player chooses a mission and takes or uploads a real photograph.

Sniffari sends Gemini:

πŸ“· The uploaded image
🎯 The current mission
βœ… What counts as success
🐢 Dog name
🎭 Dog personality

Gemini then examines the photograph using multimodal image understanding.

Now the adventure can go in two directions.


βœ… Path A β€” PAW APPROVED

Imagine Mochi receives this mission:

🚨 The Shiny Red Target of Chaos

Find a bright red object.

The player uploads a photograph showing Mochi next to a bright red fire hydrant.

Gemini analyzes the photo and decides that the mission requirement has been satisfied.

🐾 PAW APPROVED

Mission Completed!

πŸ“Έ Successful Validation

Mission Completed

Gemini recognized the red fire hydrant and approved Mochi's mission.

Instead of returning only true or false, Gemini also provides structured evidence.

For example:

✨ What Google Gemini Noticed

βœ“ Small dog on leash
βœ“ Bright red fire hydrant
βœ“ Artificial grass
βœ“ Mochi standing beside the hydrant
βœ“ Mission requirement satisfied

Sniffari also shows Gemini's confidence score.

For example:

Confidence: 72%

I wanted this information to be visible because it makes the AI interaction transparent.

The player β€” and the challenge judges β€” can actually see why Gemini made its decision.

Gemini also responds using the dog's personality.

Because Mochi has the Chaos personality:

"This red giant is clearly my new kingdom to conquer. Prepare for immediate chaos!"

The player can then press:

🐾 Collect Paw Stamp β†’

And the mission becomes part of Mochi's completed passport.


❌ Path B β€” NOT QUITE YET

Gemini can reject a mission too.

I specifically wanted this because automatically approving every upload would make the AI validation meaningless.

Imagine the mission is:

πŸͺ‘ The Throne of Unspeakable Mayhem

Find a park or street bench.

But the player submits the same photo of Mochi beside the red fire hydrant.

Gemini examines the photograph.

It recognizes:

βœ“ Small brown and white dog
βœ“ Red fire hydrant
βœ“ Green artificial turf

But:

βœ• No park or street bench detected

Sniffari responds with:

🐾 NOT QUITE YET

This discovery doesn't match the current mission.

πŸ“Έ Failed Validation

Failed Validation

The exact same image correctly fails a different mission because Gemini cannot find the required bench.

Gemini still keeps the response in character:

"That isn't a throne, human! That's a prime target for mayhem! How am I supposed to dramatically pose when there's a giant red hydrant begging for chaos?"

Sniffari then gives the player a helpful hint and lets them:

↻ Try Another Photo

This approval/rejection loop is one of the most important parts of the project.

Gemini isn't being used as a decorative chatbot.

It acts as the actual mission judge.


🐾 04 β€” Collect Paw Stamps

Every successfully verified mission adds another stamp to the dog's passport.

Adventure progress looks like:

🐾 1 / 5 β€” First discovery
🐾 2 / 5 β€” Expedition underway
🐾 3 / 5 β€” Certified adventurer
🐾 4 / 5 β€” Almost there
🐾 5 / 5 β€” SNIFFARI COMPLETE!

Each stamp represents something Gemini actually verified from a submitted photograph.

The stamps are styled like little passport stamps rather than simple checkboxes.

Examples include:

🌳 TREE SNIFFED

πŸ’› YELLOW FOUND

🌸 FLOWER SPOTTED

πŸͺ‘ BENCH CHECKED

πŸ† MISSION COMPLETE

The slightly rotated passport-style stamps became part of Sniffari's visual identity.

↓

πŸ† 05 β€” Complete All Five Missions

Once the fifth mission is verified:

πŸŽ‰ SNIFFARI COMPLETE!

Mochi collected all 5 paw stamps.

At this point, Sniffari has more than just a completed checklist.

It now has a record of what Gemini actually observed during the walk.

That includes:

  • 🐢 Dog profile
  • 🎭 Personality
  • πŸ—ΊοΈ Completed missions
  • πŸ“Έ Submitted discoveries
  • πŸ‘€ Gemini's detected evidence
  • βœ… Validation results

That information becomes the input for the final story.

↓

πŸ“– 06 β€” Gemini Creates the Adventure Report

After all five missions are completed, Sniffari sends the verified adventure results back to Gemini.

Gemini then creates a short report written primarily from the dog's point of view.

The report doesn't simply invent random details.

It uses discoveries that were actually validated during the adventure.

An example might look like:

Mochi's Great Chaos Expedition

Today I led my human into the wilderness for an extremely important field operation.

First, I discovered a magnificent red hydrant.

Obviously, I claimed it.

We continued our investigation, uncovered several suspicious landmarks, and successfully completed five important missions.

Somehow, my human managed to keep up.

Human Performance: 8.7/10

Would cause chaos again. 🐾

The Adventure Report includes things such as:

  • πŸ† Adventure title
  • 🐢 Dog's narration
  • ❀️ Favorite discovery
  • ⭐ Human rating
  • 🐾 Final verdict
  • πŸŽ–οΈ Collected stamps

I especially liked reversing the usual relationship.

Instead of the human rating the dog...

the dog rates the human.

↓

πŸ”Š 07 β€” ElevenLabs Gives the Dog a Voice

Reading Mochi's report was fun.

But I wanted the final moment to feel more memorable.

That's where ElevenLabs comes in.

The Adventure Report includes:

πŸ”Š Hear Mochi Tell the Story

When the player presses the button, Sniffari sends the Gemini-generated narration to ElevenLabs.

ElevenLabs converts the adventure into expressive speech.

The narration direction also follows the dog's personality.

⚑ Chaos

Energetic, dramatic, and unnecessarily serious about completely normal dog discoveries.

πŸ‘‘ Princess

Elegant, slightly judgmental, and convinced the human is an assistant.

🧭 Explorer

Confident adventure-documentary narration.

πŸ”Ž Curious

Investigative and detective-like.

🌸 Shy

Warm, wholesome, and gentle.

πŸ– Foodie

Excited whenever something can somehow be compared to snacks.

So the final experience becomes:

🧠 Gemini understands what happened.
πŸ”Š ElevenLabs lets the dog tell you about it.


✨ From Walk to Story

🐢 Create Dog Passport

↓

🧠 Gemini Generates 5 Personalized Missions

↓

πŸ“Έ Upload a Real Mission Photo

↓

πŸ‘€ Gemini Analyzes the Image

↓

βœ… Mission Matches ❌ Mission Doesn't Match
PAW APPROVED NOT QUITE YET
Gemini explains what it saw Gemini explains what's missing
Collect a paw stamp Try another photo

↓

🐾 Collect Paw Stamp

↓

πŸ† Complete All 5 Missions

↓

πŸ“– Gemini Creates the Adventure Report

↓

πŸ”Š ElevenLabs Gives the Dog a Voice

↓

🐾 Every walk becomes a story.


Code

The source code is available here:

πŸ‘‰ View Sniffari on GitHub

Tech Stack

Sniffari was built with:

  • βš›οΈ React
  • TypeScript
  • Tailwind CSS
  • Google Gemini API
  • ElevenLabs API
  • localStorage
  • Google AI Studio

I intentionally kept the architecture lightweight.

Sniffari does not require:

  • User accounts
  • Authentication
  • A cloud database
  • An admin dashboard
  • Payments
  • Complicated backend infrastructure

This was a weekend challenge, so I wanted most of my time to go toward the experience and AI integrations rather than infrastructure that wasn't necessary for the core idea.


How I Built It

One principle guided the project:

AI should be part of the experience, not just a chatbot placed beside it.

That decision shaped how I used Gemini.

Instead of adding one generic AI chat feature, Gemini became part of the actual game loop.

Gemini has four responsibilities inside Sniffari:

πŸ—ΊοΈ Plan the adventure
πŸ‘€ See the discoveries
βœ… Judge the missions
πŸ“– Write what happened

ElevenLabs then becomes:

πŸ”Š The dog's voice


🧠 Google Gemini β€” Adventure Generation

When creating an adventure, Sniffari sends Gemini information such as:

Name: Mochi
Energy: Playful
Personality: Chaos
Walk Duration: 20 minutes
Enter fullscreen mode Exit fullscreen mode

Gemini returns five structured missions.

A mission can look like:

{
  "title": "The Shiny Red Target of Chaos",
  "description": "Find something bright red during Mochi's walk.",
  "emoji": "🚨",
  "validationCriteria": "A clearly visible bright red object must appear in the image.",
  "hint": "Signs, vehicles, flowers, or street objects can count."
}
Enter fullscreen mode Exit fullscreen mode

Using structured output was important because the mission isn't only shown as text.

Its validation criteria is later reused when Gemini examines the mission photo.


πŸ‘€ Google Gemini β€” Multimodal Validation

When a mission photo is submitted, Gemini receives:

  • Real uploaded image
  • Mission title
  • Mission description
  • Validation criteria
  • Dog personality

Gemini then returns structured information such as:

{
  "passed": true,
  "confidence": 0.72,
  "reason": "A bright red fire hydrant is clearly visible.",
  "detectedEvidence": [
    "small dog",
    "bright red fire hydrant",
    "green artificial turf"
  ],
  "playfulMessage": "This red giant is clearly my new kingdom to conquer."
}
Enter fullscreen mode Exit fullscreen mode

The UI uses this response to decide whether the player receives:

🐾 PAW APPROVED

or:

🐾 NOT QUITE YET

This transformed multimodal AI into an actual game mechanic.


🐢 Gemini Personality System

I didn't want every dog's responses to sound identical.

Sniffari includes personality archetypes such as:

  • 🧭 Explorer
  • πŸ”Ž Curious
  • πŸ‘‘ Princess
  • ⚑ Chaos
  • 🌸 Shy
  • πŸ– Foodie

The selected personality affects:

  • Mission names
  • Mission descriptions
  • Validation reactions
  • Adventure report
  • Narration direction

For example:

Explorer

"New landmark discovered! Captain Mochi has officially added this location to the expedition log."

Princess

"Acceptable discovery. Mochi has approved it for royal inspection."

Chaos

"🚨 TARGET DETECTED. Immediate investigation and unnecessary drama required."

Foodie

"Investigation complete. Unfortunately, this discovery was not edible. Mochi remains optimistic."

The personality system helped the AI feel connected to the dog instead of sounding like the same assistant every time.


πŸ“– Google Gemini β€” Adventure Report

After collecting all five stamps, Sniffari sends Gemini:

  • Dog profile
  • Completed missions
  • Validation results
  • Detected objects
  • Personality

Gemini then creates the final Adventure Report.

The report can contain:

{
  "title": "Mochi's Great Chaos Expedition",
  "subtitle": "Five missions. Several suspicious objects. One unstoppable explorer.",
  "humanRating": "8.7/10",
  "favoriteDiscovery": "The giant red fire hydrant",
  "closingLine": "Would cause chaos again."
}
Enter fullscreen mode Exit fullscreen mode

Most importantly, the report uses discoveries that were actually verified during the adventure.


πŸ”Š ElevenLabs β€” Giving Mochi a Voice

Once Gemini finishes the report, the player can press:

πŸ”Š Hear Mochi Tell the Story

Sniffari sends the narration to ElevenLabs.

ElevenLabs turns the adventure into expressive speech.

I wanted ElevenLabs to complete the experience rather than exist as a separate text-to-speech demo.

The relationship between the two technologies became very simple:

Google Gemini = The Brain 🧠

It plans, sees, understands, judges, and writes.

ElevenLabs = The Voice πŸ”Š

It brings the final story to life.


🎨 Designing Sniffari

I didn't want Sniffari to look like a generic AI dashboard.

The visual direction is inspired by:

  • πŸ›‚ Travel passports
  • πŸ“” Adventure journals
  • πŸ—ΊοΈ Field guides
  • πŸŽ–οΈ Collectible stamps
  • πŸ• Dog walking accessories

The UI uses:

  • Warm paper-like backgrounds
  • Dark brown typography
  • Muted green accents
  • Warm orange and yellow highlights
  • Rounded cards
  • Paw prints
  • Slightly imperfect passport stamps
  • Small playful animations

The goal was:

Cute, playful, and memorable β€” without becoming overly childish.

Because Sniffari is meant to be used during a walk, I designed the main experience mobile-first.


Why I Built It

Dog walks are already full of tiny adventures.

A completely normal tree can require five minutes of investigation.

A fire hydrant can suddenly become the most important object in the neighborhood.

A random patch of grass apparently contains information that requires extremely serious sniffing.

I wanted to build something that embraced those moments.

Instead of trying to use AI to replace part of the real-world experience, Sniffari uses AI to make that experience more playful.

The important part still happens outside.

The dog still walks.
The human still explores.
The real world is still the playground.

AI simply transforms those discoveries into missions, achievements, and stories.

That's why the name became:

Sniffari = Sniff + Safari

Every walk becomes a tiny expedition.


Prize Categories

I'm submitting Sniffari for two prize categories.


πŸ† Best Use of Google AI

Google Gemini is the core intelligence behind Sniffari.

I use Gemini for:

  • πŸ—ΊοΈ Personalized adventure generation
  • 🧠 Structured mission generation
  • πŸ‘€ Multimodal image understanding
  • βœ… Mission photo validation
  • πŸ” Visual evidence detection
  • 🐢 Personality-aware responses
  • πŸ“– Final adventure report generation

The part I'm most excited about is using multimodal AI as a game mechanic.

Instead of asking Gemini:

What's in this image?

Sniffari asks:

Here's the player's mission.
Here's what counts as success.
Examine this photograph and decide whether the mission was completed.

That transforms computer vision into part of the gameplay loop.

Gemini effectively becomes Sniffari's:

Adventure Planner + Mission Judge + Storyteller


πŸ† Best Use of ElevenLabs

ElevenLabs powers the final storytelling experience.

After Gemini understands what happened during the adventure and writes the dog's report, ElevenLabs turns the written story into expressive narration.

I wanted it to feel like a natural conclusion to the product.

Not:

Here's an AI text-to-speech button.

But:

Your dog just completed an adventure. Now let them tell you about it.

The relationship is:

🧠 Gemini understands the adventure.

πŸ”Š ElevenLabs lets the dog tell the story.


What I Learned

One of the biggest things I learned while building Sniffari was how much more interesting multimodal AI becomes when it has a specific purpose.

Image recognition alone is useful.

But this:

Identify the objects in this photograph.

is very different from:

This player's mission is to find a bench. Examine the image and determine whether enough evidence exists to complete that mission.

The second prompt gives the model a role inside the product.

Gemini isn't only analyzing content.

It's participating in the rules of the game.

I also learned that combining multiple AI technologies works better when each technology has a clear responsibility.

For Sniffari:

🧠 Gemini = Brain

πŸ”Š ElevenLabs = Voice

Neither technology is included just because there is a prize category.

Both are connected directly to the core experience.


Challenges

One challenge was making AI mission validation feel fair.

Real-world photographs aren't perfect.

Objects can be:

  • Partially visible
  • Far away
  • Poorly framed
  • Under unusual lighting

I didn't want Sniffari to require absolute certainty.

So Gemini returns:

  • Pass/fail status
  • Confidence
  • Explanation
  • Detected evidence

This lets the application remain understandable and forgiving.

Another challenge was keeping the project small enough for a weekend.

There are many directions Sniffari could go, but I intentionally avoided building:

  • Authentication
  • User accounts
  • Cloud databases
  • Social feeds
  • Complex maps
  • Payments

That gave me more time to focus on what actually makes the project unique.


What's Next?

If I continue developing Sniffari, I'd love to explore:

  • πŸ—ΊοΈ Location-based adventure packs
  • 🌦️ Weather-aware missions
  • πŸ… Achievement badges
  • πŸ”₯ Daily adventure streaks
  • πŸ“š Previous Sniffari history
  • πŸ• Multi-dog adventures
  • 🎨 More collectible stamp sets
  • πŸ“Έ Shareable adventure postcards
  • πŸŽƒ Seasonal mission packs
  • 🌳 Park-specific adventures
  • 🐢 Puppy-friendly difficulty
  • β™Ώ Accessibility-focused walking modes
  • πŸ”Š Additional narration personalities

But for this weekend, I wanted the core experience to stay simple:

🐢 Create a dog.
πŸ—ΊοΈ Go on an adventure.
πŸ“Έ Prove your discoveries.
🐾 Collect five stamps.
πŸ“– Turn the walk into a story.
πŸ”Š Let your dog tell it.

Thanks for checking out Sniffari. 🐾

Every walk is an adventure.

Top comments (0)