cd /news/generative-ai/grassroots-a-game-that-sends-your-wh… · home › topics › generative-ai › article
[ARTICLE · art-149334] src=dev.to ↗ pub= topic=generative-ai verified=true sentiment=↑ positive

Grassroots: A game that sends your whole friend group outside together

A developer built Grassroots, an offline-first mobile game that assigns daily outdoor quests to friend groups and verifies completion with photos judged by a locally hosted open-weight Gemma model. Photos are sealed on the phone when there is no signal and judged once the user reconnects, with the model running on a 4 GB RTX 2050 laptop at roughly 3.5 seconds per photo after an optimization that cut processing from about a minute per task. The developer reports 9 of 9 correct judgments on a small test of leaf photos against lookalikes and indoor shots, cautioning the sample was small and used clean images.

by read6 min views1 publishedOct 11, 2026

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

Group chats are full of plans that never happen: "we should go out this weekend." Everyone means it, and nobody goes.

Grassroots turns that plan into a game. Your squad gets a quest every day to do together, outside: "Stroll together along the winding path in the park", a ball game, a walk-and-talk, a round of frisbee. Do it with your friends, send your photos, and you all score, with a +10 together bonus if your photos were taken within 90 minutes of each other. There's also a five-stop photo walk ("Photograph a fallen leaf"), and streaks, levels and a leaderboard to keep the squad honest. If you've been on your phone too long, a detox quest nudges you back out.

An open-weight referee keeps it fair. Gemma looks at every photo and decides whether it counts: are people in it, does it fit the quest, was it taken outdoors? It runs on my laptop's 4 GB graphics card, not in someone's cloud.

Parks and trails often have no signal, so the app doesn't need one. Your photos stay sealed on your phone like envelopes, and Gemma opens them when you're home. Nobody has to stare at a screen while you're out there with your friends.

The name is two ideas: the grass where you play, and the roots, the AI that waits at home while everything else grows out from it and comes back.

What's the point of wandering alone, collecting photos for nobody, when the best part of being outside is who you're with? In Grassroots your friends are part of the game. The quest is something you do together, the photos prove you were there together, and the leaderboard turns a simple walk into friendly rivalry: who found the best flower, whose streak is still alive, who earned the together bonus because the whole squad actually showed up. You're not racing a clock or your own screen time. You're competing with your friends, in the same place, on the same platform, and laughing about it afterwards.

Scoring: a squad quest is 10 points plus a streak bonus, each walk stop is 4 (+10 for finishing all five), and the detox quest is 15.

I switched my phone offline and took a photo for a walk stop. The app did what it promised: a banner said one item was sealed on my phone and would upload when I reconnected. Back online, my laptop printed a verdict and the envelope went from "Saved on your phone" to "Passed +4". A friend joined from a second phone, and Gemma described what it saw in plain words: a soccer ball on grass, a bright flower with green leaves. We ended 8 points to 4.

What I measured Result
Judge accuracy 9 of 9 on a small test: leaf photos against lookalikes and indoor shots
Speed now about 3.5 seconds per photo on an RTX 2050 (4 GB) laptop
Speed before one fix up to about a minute per AI task
Offline photos sealed with no signal, uploaded and judged once back online

That test was small and used clean photos, so treat it as promising, not proven.

Try it: https://grassroots-488t.onrender.com. Photos are judged only while my laptop is running the home judge. If you see "waiting for the home judge", that is the design, not a bug. The demo runs on a free host, so its data can reset.

The screenshots above come from my own phone.

Go out. Seal it. Bring it home.

An offline-first outdoor game for friends. You do real things outside, photos stay sealed on your phone, and a local open-weight AI (Gemma) opens the envelopes when you get home.

Built for the DEV Hacktoberfest Open-Source AI Challenge, Week 1: Touch Grass.

Live demo: https://grassroots-488t.onrender.com (judging only happens while the home judge is running, see Limitations).

Create a squad, share the code, and compete on daily outdoor goals:

Activity What you do Points
Squad quest The whole group does an activity together (ball game, walk-and-talk, frisbee, stretching). Each player sends a photo. 10 + streak bonus (up to 5)
Together bonus Two squadmates' passed photos were taken within 90 minutes of each other. +10 each
Walk challenge Five photo checkpoints of simple things (something blue, a tree, a gate). Stops are revealed one at a time. 4 per

The hosted app is only a mailbox and a scoreboard. The AI never runs on the server.

Phone (installable web app, works offline)
   |  sealed photos upload when there is a connection
   v
Render: Node server in "hub" mode  <--- outgoing calls only ---  Laptop: worker.js
   stores sealed photos, scores points                            Gemma 4 E4B via Ollama
Layer What I used
Front end One HTML file, service worker, web app manifest
Backend Node and Express, a single JSON file
Model Gemma 4 E4B ( gemma4:e4b-it-q4_K_M ) through Ollama
Hosting Render, plus worker.js on my laptop
Decision Why
Seal photos on the phone and judge them at home Outdoors there is often no signal, and the judge lives at home anyway
Gemma through Ollama on a 4 GB laptop GPU Open weights, runs locally, no cost per photo, and friends' photos don't go to a cloud AI
Squad quests with a 90-minute together bonus The point is doing things with friends, and photo times need no GPS and work offline
Screen time is typed in A web page can't read phone usage, so it's an honest self-report
Each walk stop is judged on its own Judging comes later, so one failed stop must not block the rest
A hosted mailbox plus a home worker A public link without paying for a GPU server, and the worker only makes outgoing calls, so no router setup
Photos are deleted once judged Friends' photos stay on the server for as short a time as possible
Installable app, fonts bundled with it It has to open with no signal, so there are no CDN files

ollama ps said 100% GPU, so I was wrong. The cause was Gemma 4's "thinking" step. Turning it off took judging to about four seconds. I built this with help from an AI assistant (Claude) for code and planning. The testing and the decisions were mine, and they're all written down in the repo (decision.md, flow.md).

Where open was worse: a larger closed model would likely read tricky photos more reliably, and it would judge at any hour. Mine only judges while my laptop is on. That's the price of keeping the roots at home, and for a game about friends going outside, I'd take that trade again.

Thanks to the Gemma and Ollama teams for making a vision model run on an ordinary laptop, and to my friends for being the test squad.

── more in #generative-ai 4 stories · sorted by recency
── more on @grassroots 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/grassroots-a-game-th…] indexed:0 read:6min 2026-10-11 · —