People Won't Go Outside so I made this A developer built GoSeek, a mobile scavenger hunt web app that gives players riddle clues instead of direct instructions and requires a live in-app photo of the matching real-world object to score points. The app splits AI work by device: Gemma 3 4B via Ollama generates static riddles ahead of time into objects.json, while the on-device SmolVLM-500M vision model judges each submitted photo in the browser, with a visual heuristic fallback. Progress, streaks and discovery history persist locally. This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass https://dev.to/challenges/hacktoberfest-week1-2026-10-05 GoSeek https://goseek.ai.studio/ is a mobile scavenger hunt that gets you outside by giving you a riddle instead of an instruction. The problem I started with: if an app says "go outside " , nobody goes. People don't like being told what to do, but they love solving puzzles. So GoSeek hands you this instead: "Small furry apex predator that domesticated itself, loves afternoon sunbeams, and leaves silent pawprints in the garden." You can't solve that from the couch. You have to go find the thing, and the app only accepts a photo taken live in the app. No gallery uploads. The loop: Harder objects are worth more points, and points level you up from Wanderer to Explorer to Seeker to Trailblazer . Who is it for? Anyone, especially city dwellers. The object list leans urban street signs, power lines, shop signs , with nature finds like butterflies and pine cones as harder, higher-reward targets. The screen is the shortest part: read, walk, snap, done. 🌿 Live app: goseek.ai.studio https://goseek.ai.studio/ best on your phone GoSeek is a mobile-first outdoor scavenger hunt game. Each round gives you a riddle clue, and you must find the matching object in the real world by taking a photo with your camera or uploading an image. src/data/objects.json and shows a clue/riddle. src/services/aiModel.ts validates the image against the target object using a local Hugging Face vision pipeline and a fallback visual heuristic. src/services/db.ts , so your streak, score, and discovery history persist locally. src/App.tsx manages the dashboard, active mission, score updates, and success/reset modals. src/components/ActiveMission.tsx handles the camera, verification loop, save… I described the app to Google Stitch https://stitch.withgoogle.com/ , imported the generated design into Figma, simplified it, and edited the copy. APP: GoSeek 1. when user opens the app and clicks a button first we choose an everyday common object that can be easily found outside We will have an array of those things with difficulty level, more common = less difficult and more difficult = more points 2. app uses ai to describe the object as a mystery/riddle eg. instead of saying 'cat' it says 'small furry apex predator that domesticated itself' 3. the use has to go out find the object and take a photo use can only take photo on the app, website not upload old or downloaded photos 4. then the app uses AI to analyze the image and tells use if the photo is of correct thing or not if correct so a nice animation and add points to user design a mvp for it After simplifying on figma: My first plan: keep a list of objects and have an on-device model write riddles on the fly. That fails. A model good enough for clever riddles is too big for most phones, and this is an outdoor game that has to run on the device you actually carry. So I split the job and put each task where it fits: | Job | Model | Runs on | When | |---|---|---|---| | Write creative riddles | Gemma 3 4B open-weight | My computer, via Ollama | Once, ahead of time | | Judge the photo | SmolVLM-500M open-weight | The user's phone, in the browser | Every play | The heavy creative model runs once and produces a static objects.json . The tiny vision model handles the one thing that must happen live. I pulled gemma3:4b with Ollama and wrote a small script that asks for five riddles per object. The key is the prompt: You write riddles for an outdoor scavenger hunt game for all ages. Write 5 different riddles, each describing "${obj.name}" WITHOUT ever saying the word "${obj.name}" or its plural, or any word in it . Rules: - Each riddle is 1-2 sentences, maximum 30 words. - Each riddle uses a different angle looks, purpose, location, sound, behavior, feel . - Family-friendly, no mention of people or danger. - Do not start with "I am" every time. Output ONLY a JSON array of 5 strings. No explanation, no markdown. Asking for a different angle per riddle keeps replays fresh, and the "never say the word" rule stops riddles from giving the answer away. // ai.ts async function askGemma userPrompt: string : Promise