This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
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:
- You tell it your city once.
- It checks the real weather: temperature, rain chance, wind and sunset time.
- An open-weight AI model writes a 15 to 45 minute mission that fits that weather. On a rainy day, you get a short, safe walk, not a hike.
- You put the phone away and go outside.
- You come back with 1 to 3 photos. An open-weight vision model looks at them, checks that you really did the mission, and gives points out of 10.
- Points and a daily streak make you want to come back tomorrow... and go outside again.
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.
Demo
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.
Code
🌿 Grass Quest
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 (CC0), keyboard by Colin (CC BY-SA 4.0).
🤔 Why?
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.
✨
…How I Built It
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):
- My laptop ran out of memory. At first, everything ran 100% locally, with Qwen2.5-VL checking the photos. It worked: a leaf got 10/10 and a keyboard got 0/10. But each photo took about 45 seconds, and the model needs about 10 GB of free RAM. One day I had a browser with too many tabs open, plus Teams and VS Code, and the photo check just crashed. Ollama's log said: "model requires more system memory (10.1 GiB) than is available (10.0 GiB)". I was short by 0.1 GB!
-
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.Why Does Open Innovation Matter?
For Grass Quest, open models weren't just a nice extra. They made the project possible.
- I could start with zero budget. No API keys, no credit card and no rate limits while I was testing again and again. The weather data is open too. For a weekend side project, that matters a lot.
- I chose where the AI runs. When my laptop didn't have enough RAM, I didn't have to rewrite anything. I moved the vision model from my laptop to the cloud by changing one line. If Ollama Cloud changes its plans tomorrow, I can move it back. With a closed API, I would be stuck with whatever the company decides.
- Privacy is a real choice, not a promise. Photos from your walk show where you live. With open models, anyone can run Grass Quest fully offline, and then no photo ever leaves their laptop. A closed API can only promise to protect your photos.
- Anyone can make it their own. Because the models and the code are open, someone can fork it for their school, their running club or their city, or swap in a better model next month. I already saw this happen: one cloud model I tested was retired, and I just used another open model instead.
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.






Top comments (0)