# A tiny daily side quest that sends you outside.

> Source: <https://dev.to/vikram_rautela_vr/a-tiny-daily-side-quest-that-sends-you-outside-1c4h>
> Published: 2026-10-09 12:15:00+00:00

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass](https://dev.to/challenges/hacktoberfest-week1-2026-10-05)*

I'm a developer, and most of my day looks like this: laptop at work, phone on the way home, laptop again at night. I *know* I should go outside more. The problem is never time. The problem is that "go outside" is too vague, so I never do it.

So I built **Grass Quest**: a small web app that gives you **one short outdoor mission every day**, written for **today's real weather** in your city.

Here's how it works:

The app is designed so you spend as **little** time on the screen as possible. You read the mission in about 20 seconds, and you only come back to upload photos.

**Who is it for?** People like me: developers, students and remote workers who spend the whole day on screens and need a small, concrete push to go outside. It's not a fitness app. It doesn't count steps. It just gives you a reason to go.

Here's today's quest for Dehradun. It was drizzling, 22°C with a 93% chance of rain, so the AI gave me a short "Rainy Rush" walk with an umbrella instead of a long trek:

The checker is friendly, but it's not easy to fool. Here's a test where I uploaded two photos for the "Rainy Rush" quest: a raindrop on a leaf, and a keyboard (the thing I was trying to escape). Gemma 4 checked both in about 4 seconds:

The leaf gets **10/10**. The keyboard gets **0/10**, with a polite note to go and find the rain. Also, any photo taken indoors can get **at most 2 points**, whatever the AI thinks.

**A tiny daily side quest that sends you outside.**

Real weather → an AI-written outdoor mission → you go outside → an AI checks your photos → points and streaks.

*Pick your city once → get a quest that fits today's real weather (here: light drizzle in Dehradun).*

*The photo check: a raindrop on a leaf passes, a keyboard does not.
Test photos from Wikimedia Commons: [leaf](<https://commons.wikimedia.org/wiki/File:Leaf-rain-raindrops-drop-of-water_(24217414932).jpg>) (CC0), [keyboard](https://commons.wikimedia.org/wiki/File:Backlit_keyboard.jpg) by Colin (CC BY-SA 4.0).*

We all know we should "go touch grass." The hard part is having a reason to go. **Grass Quest gives you one small reason each day.** It's short, it's free, it's close to home, and it fits today's weather.

The app is built to keep your screen time low. You open it, read the mission, put the phone away and go. You only come back to upload a few photos.

**The stack:**

| Part | What I used | 
|---|---|
| Weather and city lookup | Open-Meteo: free, open data, no key | 
| Writing the daily quest | Llama 3.2 (3B), running locally with Ollama | 
| Checking photos | Gemma 4 (open-weight vision model) on Ollama Cloud, or Qwen2.5-VL 3B fully offline | 
| Web app | Python + Flask, one file, phone-friendly page | 
| Storage | One local JSON file: points, streak and history | 

I built and tested all of it on a normal laptop: **Ubuntu, 15 GB of RAM and no GPU.**

**1. The quest writer.** The app sends Llama 3.2 the real weather and a short list of my recent missions, so it doesn't repeat itself. I ask for JSON with a fixed schema (title, steps, what to photograph, best time, a safety tip), and Ollama's structured output makes the model follow it. The prompt also has a few rules. For example, rainy or very hot days get short, safe missions, and a mission never asks for photos of people's faces or private property.

**2. The photo checker.** Phone photos are huge, so Pillow shrinks them to 768px before the AI sees them. The vision model answers in JSON too: what it sees, whether the photo is outdoors, whether it matches the mission, and a score from 0 to 10. My code then adds its own rules on top. Scores are clamped to 0-10, and an indoor photo can never get more than 2 points.

**3. Problems I hit (the honest part):**

**The fix: open models give you a choice.** I tried some open-weight vision models on Ollama Cloud. Most needed a paid plan, but **Gemma 4 (31B)** worked on the free plan. Now photo checks take **about 1 second instead of 45**, and they use almost no RAM on my laptop. Because both are open models behind the same Ollama API, switching was **one line of code**. The offline model is still there for anyone who wants it:

```
VISION_MODEL=qwen2.5vl:3b python3 app.py
```

**Gemma wrapped its JSON in Markdown.** It answered with

`json ...`

around the JSON, so my parser broke. I fixed it with one small regex that removes the fences.

**Small models leak.** Once, Llama 3.2 put a piece of its own JSON (`photo_goal): "A collection of..."`) inside step 4 of a quest. Now the app filters out any step that looks like a leaked JSON key.

For Grass Quest, open models weren't just a nice extra. They made the project possible.

The irony is not lost on me: I used AI, the thing that keeps us on screens, to get people *off* screens. Open models made that possible on an ordinary laptop. That feels like the right way to build it.
