Nature Quest: an on-device open AI that sends you outside and gets out of your way
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass What I Built Most "AI for the outdoors" ideas still end with you staring at a screen. Nature Quest is built the other wa
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
Most "AI for the outdoors" ideas still end with you staring at a screen. Nature Quest is built the other way round: the screen is the shortest part of the experience.
You tap once. An open AI model running on your own phone picks a short mission that fits where you are and how you feel, for example "Five greens" or "Count the voices" (listen for three minutes and count the different bird calls). The card is simple: a title, why this quest, your task, and the time. Then the app says "Your quest is ready. Now put the phone away." and dims itself. You go outside. When you come back it asks what happened, you share a few words and an optional photo, and your journal, streak and achievements grow. Then it tells you that is enough screen for now.
It is not a chatbot. The AI works behind the scenes: Mission, Reality, Return, Reflection, Progress. It is for anyone who wants a nudge outside without another feed to scroll, including people with weak signal, small data plans and mid-range phones.
Demo
Live app (installable PWA, works offline after setup): https://nature-quest-c14be.web.app
Code
Kings-creation
/
nature-quest
"Offline-first PWA where an on-device open AI picks outdoor quests that get you off your phone"
Nature Quest 🌿
An offline-first PWA that uses an open-weight AI model, running on your own device, to write short real-world missions, then deliberately gets out of your way so you can go outside.
Built for the DEV / Hacktoberfest 2026 "Touch Grass" challenge.
The loop: one tap gets a quest, the screen tells you to put the phone away and rests itself, you go outside you come back and say how it went, and your journal and streak grow. The screen is the shortest part of the experience.
Open AI, no paid APIs
Quests come from a library of 114 hand-checked missions. An open-weight model on the phone picks the one that fits you.
| Job | Model | Notes |
|---|---|---|
| Smart matching (default, recommended) |
Xenova/all-MiniLM-L6-v2 (Apache-2.0, about 25 MB) via Transformers.js / ONNX Runtime Web, in a Web Worker |
Embeds what you type ("tired after work, want something calm"), the time of |
The repository was created on October 11, 2026, inside the challenge window (Oct 5 to 11).
How I Built It
The open AI at the core
-
Smart matching (default).
all-MiniLM-L6-v2(Apache-2.0, about 25 MB) runs in the browser through Transformers.js and ONNX Runtime Web, inside a Web Worker. It reads what you type ("tired after work, want something calm"), the time of day, the season, who you are with, your energy, and a gentle lean toward quests you finished before. It re-orders a library of 114 hand-checked quests by meaning. - It can only re-order. The model never writes or adds a quest, so it cannot ramble or invent something unsafe. Every quest also passes app-level safety rules (no climbing, water, roads, foraging, darkness or strangers).
-
Optional creative writing. The same provider layer can drive a small on-device writer, or a bigger open model on your own computer, for example
gpt-oss:20bthrough Ollama. It is experimental and off by default.
What went wrong, and why the design changed
I started by having a small language model write every quest on the phone. On my mid-range Android phone (Chrome, CPU only; the WebGPU API existed but no graphics adapter was available) Qwen2.5-0.5B loaded in about 19 seconds, took about 15 seconds to produce a first word, and then wrote around 0.3 tokens per second. A whole quest needs about a hundred, so it never finished. A smaller 135M model was faster but rambled into stories and also never produced a usable quest. So I stopped forcing one model to do every job. Small open models are great at understanding meaning (fast, offline) and poor at long free writing on weak hardware. The final design uses the right model for each job.
The rest of the stack
- Offline-first PWA: service worker, IndexedDB, and a sync outbox. Everything runs on the device. Firebase gives optional sign-in; the cloud backup code exists but I did not enable Firestore for this demo, so my progress stays local.
- Never stuck: every model runs behind a watchdog with timeouts, a skip button, and an in-app self-test that prints where the time goes.
- Honest verification: time outside versus quest length, an optional photo (kept on the phone and checked only for being a real, non-blank image), and the person's own words. Each completion is labelled self-reported, time-checked or photo-attached. The AI never claims to have seen anything.
- No double rewards: completion is idempotent, so double taps, reloads and crashes cannot count a quest twice.
- 68 automated engine tests and 69 browser checks (offline reload, stuck or crashing model, matching, photo evidence).
Field test: I tried it on my own phone on October 11. The app picked "Stand in the light" for me and labelled it "Picked for you by all-MiniLM-L6-v2", and I started it. I finished "Bench pause" (5 minutes outside, labelled "Time on quest checked") and wrote "This was relaxing" in my journal. I also finished "Lean and look up" and attached a photo, which the app labelled "Photo attached". I finished that one in about a minute, so the journal honestly records 1 minute. That is why the app records time instead of pretending.
Why Does Open Innovation Matter?
- It runs with no internet. The place you want this app is a trail or a park, exactly where the signal drops. A closed API cannot go there. A model cached in the browser can.
- It costs nothing to run. No keys, no per-quest bill, no credit card to try it.
- Your words and photos stay on your phone. No server I control ever sees them.
- It is swappable. A tiny matching model on a phone, a bigger open model on a laptop, one app. Open weights let me measure each model on the real device and change the design when one failed.
- Where it was worse, honestly: small open models were too slow and too chatty to write whole quests on a mid-range phone. I did not hide that. I redesigned around what small open models do well and kept free writing as an optional mode.
Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.


