DEV Community

dsmith_sys
dsmith_sys

Posted on

# SeekGrass: Solve a Riddle, Then Touch Grass πŸ˜‚

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass

What I Built

SeekGrass is a photo-based outdoor riddle hunt. Instead of solving a puzzle and moving on to the next screen, players have to step away from their devices, find something in the real world that matches a clue, and submit a photo as evidence.

The app:

  • Presents a random riddle from a shared MongoDB question bank.
  • Lets a player upload a photo of their attempted answer.
  • Uses a vision-language model to compare the image with the riddle and return a structured verdict with short feedback.
  • Adds a playful mission-control feel, with a typewriter headline, evidence states, and clear success or "trail went cold" feedback.
  • Lets organizers add their own riddles in bulk using an Excel or CSV spreadsheet, with a downloadable template, validation, and a preview before submission.

It is designed for scavenger hunts, classrooms, youth groups, and anyone who could use a fun reason to take a walk and pay closer attention to their surroundings.

Demo

SeekGrass Riddle Gameplay Interface

AI Photo Verification Verdict and Feedback

Organizer Bulk-Import Panel and Template Preview

Code

GitHub logo querysmith-sys / SeekGrass

a web app , to play riddle-scavenger hunt

How I Built It

The backend keeps the image-verification pipeline lightweight: it accepts the active riddle and user photo, builds a structured multimodal request, and returns the model's JSON verdict and feedback. The frontend handles loading and error states smoothly while the field agent is out touching grass.

1. Open-Weight Vision via OpenRouter

To keep things fully open-source friendly without needing a heavy local GPU rig, SeekGrass routes all vision inference through OpenRouter using open-weight models. To handle free-tier rate limits gracefully, the backend features a built-in fallback chain:

  1. google/gemma-4-26b-a4b-it:free
  2. google/gemma-4-31b-it:free
  3. dots-studio/dots-3-note-preview:free

If a provider hits capacity limits, the engine instantly rotates to the next model with the same payload to ensure high uptime.

2. The MongoDB Riddle Bank & Excel Bulk-Importer

Riddles are stored in MongoDB so players can fetch challenges on the fly. For bulk upload or add extra questions there is a dedicated bulk-import panel:

  • Downloadable template with a single question header column.
  • Smart client-side file validation (rejects formula injections, duplicate text, extra columns, and oversized payloads) with a preview modal before submission.

3. UI & Local Deployment

The frontend uses a retro-brutalist mission-control aesthetic featuring bold borders, a typewriter hero header, and full mobile responsiveness, bit inspiration from arpit bhayani px0.ai UI.

Local Setup:
Configure MONGO_URI and OPENROUTER_API_KEY in the backend, and set VITE_API_BASE_URL on the frontend. Fire up the backend with npm run dev in backend/ and the client with npm run dev in frontend/.

Why Does Open Innovation Matter?

An outdoor game like this depends on seeing and reasoning about many different real-world objects, lighting conditions, and unpredictable angles. Open-weight vision models make it possible to experiment with that multimodal experience without tying the project to one closed model provider or getting bottlenecked by restrictive pricing and single-vendor constraints.

Using OpenRouter also makes model choice and fallback behavior transparent and completely replaceable. The project can test different image-capable models against the same task while keeping its application-level input and output stable. That flexibility matters for an open-source community project: contributors can improve the experience, compare models, and adapt the service as model availability and hosting options evolve.

The free hosted models still have shared capacity limits, which is why the backend uses a resilient fallback chain. Open innovation is not just about choosing a model; it is about keeping the system modular, transparent, and giving the project room to grow without locking yourself into a black-box ecosystem.

Prize Categories

  • Best Use of Render: Hosted the full-stack application, database bindings, and API runtime live on Render.

Top comments (0)