This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
Most "go outside" apps are just another screen to stare at. I wanted the opposite: an app that's the shortest part of your walk.
Side Quest is an Android app that looks at the parks, lakes, gardens and viewpoints actually within walking distance of you, checks the weather and how close sunset is, and writes three small real-world quests:
π The first yellow leaf. Walk to Lodhi Gardens (600 m north-west) and find a leaf that has started turning gold.
π Catch the last light. Sunset is at 18:02. Catch it from the open lawn by the lake.
π¦ Perched park watcher. Find a bird sitting still on a branch or a wire.
You read a quest (about 30 seconds of screen time), put the phone away, and go. When you find the thing, you snap one photo, an open-weight vision model checks it, and the quest lands in your field journal with a π₯ day streak.
The part I'm proudest of: you can't fake a Side Quest. While testing an early version, I could complete quests from my room with an old photo, which made the "go outside" part meaningless. So proof now has three layers:
| Layer | Question it answers |
|---|---|
| π GPS geofence | Are you actually at the place? Too far away β "Not there yet πΆ You're 1.2 km from Lodhi Gardens", with a Directions button |
| π· Live camera only | Was the photo taken now? There's no gallery upload |
| π€ Vision referee | Does the photo show the right thing? It's told to fail photos of screens or printed pictures |
Demo
In the video: three quests from real places near me, the GPS check refusing my proof because I was 610 m from the park, the AI referee passing a "leaf shadows on the ground" quest, the streak and field journal updating, Directions, and light/dark mode.
Transparency note: for the photo step in this recording I used a debug-only test shortcut to submit a photo from my gallery. The released app (the APK below) only accepts photos from the live camera.
π¦ Try it: Download the APK (Android 7.0+)
Testing it around home
I tested Side Quest around my own neighbourhood. The quests pointed at real places right around me, like a block park 493 m south and a small unnamed park about 600 m east. The GPS check did its job: standing 610 m from the park, it refused to open the camera and offered directions instead. The quests also change with the time of day. At night they stayed on the balcony and the street (the moon, street lights), and in the morning they sent me looking for leaf shadows on the pavement.
What I'd improve next: refreshing the weather card without replacing the day's quests, and checking park opening hours before suggesting one.
Code
Side Quest
Small outdoor adventures, written from the real places around you.
Get a quest. Put the phone away. Go outside. Prove it with one photo
Built for the DEV Hacktoberfest 2026 Open-Source AI Challenge, Week 1: "Touch Grass"
What it is
Most "go outside" apps are another screen to stare at. Side Quest tries to be the shortest part of your walk.
Open it and it writes three short real-world quests from the parks, lakes, gardens and viewpoints actually within walking distance, shaped by today's weather and how close sunset is:
π The first yellow leaf. Walk to Lodhi Gardens (600 m north-west) and find a leaf that has started turning gold. π Catch the last light. Sunset is at 18:02. Catch it from the open lawn by the lake. π¦ Perched park watcher. Find a bird sitting still on a branch or a wire.
Then the phone goesβ¦
The repo has the Android app (Kotlin + XML) and the FastAPI backend, with setup steps in the README.
How I Built It
Android app (Kotlin + XML)
β HTTPS + app key
βΌ
FastAPI backend on Render
βββ OpenStreetMap (Overpass) β real nearby places
βββ Open-Meteo β MET Norway β weather
βββ NOAA sun calculation (local) β sunrise, sunset, day/night
βββ Qwen 3.8 27B (open weights) β writes quests + referees photos
Android side. Plain Kotlin with XML layouts. Location comes from Android's own LocationManager (no Play Services), with two modes: a quick network fix to build quests, and a fresh GPS fix to prove you're there. The geofence allows 400 m for big places like parks (OpenStreetMap gives one centre point, but a park can be 600 m across), 150 m for a fountain or viewpoint, plus the GPS's own reported error. If you only granted "approximate" location, the app asks Android to upgrade it to precise. Photos go from the camera app straight into private storage through a FileProvider, so the app needs no camera or storage permission at all.
Backend. FastAPI on Render, which is the app's AI runtime: it gathers places and weather, prompts the model for quests as JSON, and sends each photo to the vision model with the quest's "proof" description. The model inference itself runs on Groq. A shared app key keeps strangers who find the public URL from spending the free model quota.
Things that broke, and what I learned:
- The model ignored a safety rule. I told it in the prompt never to send people into parks after dark. In testing at 3 AM, it still suggested Lodhi Gardens (closed and unlit at night). Prompts aren't guarantees, so now the backend doesn't show the model any places after sunset at all. Night quests stay on the doorstep, balcony or a lit street.
- Free map servers are slow. Public Overpass servers took 17β30 s or timed out. The backend now asks four mirrors at once, uses the first answer, and caches places for a day. Quest creation went from 43 s to about 10 s, and about 3 s once an area is cached.
- Weather broke only in production. Open-Meteo worked from my laptop but not from Render, likely because many apps share Render's outgoing IP addresses and hit its free limit. I added MET Norway's open data as a backup, and now calculate sunrise/sunset on the server (within about a minute of Open-Meteo across five cities), so day/night is always known.
- Rate limits. Groq's free tier allows 8,000 tokens a minute, and a single photo costs about 1,800. The backend now waits and retries when told to slow down, instead of showing an error.
I built this with help from an AI coding agent. I made the product and design calls, like closing the "complete quests from your room" loophole, and went through every file until I could explain how it works.
Why Does Open Innovation Matter?
Everything Side Quest depends on is open, and every piece mattered:
- An open-weight model I can move. Quests and photo checks run on Qwen 3.8 27B. The backend talks to any OpenAI-compatible endpoint, so switching to Gemma on Hugging Face, or to a model on my own machine with Ollama, is three environment variables, not a rewrite. On an earlier weekend project, the provider retired the model I was using mid-build; because it was just one open model among many, switching took one line. That's why I built Side Quest the same way from the start.
- Open map data is what makes it personal. Quests point at your neighbourhood because of OpenStreetMap, mapped by volunteers. No paid maps API, no per-request bill.
- Open weather, with a second open source as backup. When one open service was blocked from my server, another open provider (MET Norway) filled in.
- It costs nothing to run. Free tiers all the way down. The constraints of those free tiers (rate limits, slow public servers) shaped the design: retries, caching and racing mirrors.
- Your exact location never reaches the model. It only sees place names, distances and the weather.
Open tools let a solo developer build something that understands real streets, real weather and real photos, and keep full control over where each piece runs.
Prize Categories
-
Best Use of Render: Render is Side Quest's AI runtime. It hosts the FastAPI service that builds each quest (OpenStreetMap + weather + the open model) and referees every photo proof, deployed from a
render.yamlBlueprint.
Map data Β© OpenStreetMap contributors. Weather by Open-Meteo and MET Norway.
Top comments (0)