DEV Community

Rohit Mahajan
Rohit Mahajan

Posted on

Fieldnote: a tiny local AI prompt to help you notice more outside

Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass Submission 🌿

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

What I Built

Fieldnote is a pocket sized outdoor reflection companion. Write one thing you noticed on a walk a bird call, a patch of moss, wind in the trees and it gives you one short sensory prompt. The goal is to glance at the screen, get curious about your surroundings, and put the phone away.

The local path runs an open-weight model in the browser. If a device cannot run WebGPU, Fieldnote still offers a clearly labeled sample prompt; it does not pretend that the sample came from AI. I also built an explicit hosted-model path for devices that need it. That path sends the note to a Supabase Edge Function and then to Backboard, so it has different privacy and connectivity tradeoffs.

Demo

Try Fieldnote on Render

The first local model load needs a connection to download the model files. After they are cached, local inference can work without sending the note to a model server, on browsers and devices that support WebGPU and have enough memory. My testing also surfaced the limitation: some devices do not expose a compatible GPU, so the local model cannot start there. The hosted fallback is implemented, but I have not yet verified a complete live generation with its production provider credentials; I’m not presenting that route as a confirmed working demo.

Code

Source code on GitHub

The local model/runtime integration is in app.js; the hosted proxy is in supabase/functions/field-prompt/. The repository README covers local setup and deployment.

How I Built It

Fieldnote uses WebLLM to run Qwen2.5-0.5B-Instruct-q4f16_1-MLC with WebGPU in the browser. The model turns a short field note into one safe, one-minute observation prompt. Its system instructions explicitly avoid identifying wildlife or encouraging people to approach it.

The local route keeps the note in the browser. The model files are downloaded on first use and cached by the browser for this site. The app also has a separate hosted route: the browser calls a Supabase Edge Function, which keeps the Backboard credential server-side. Its deployment settings are intended to select google/gemma-3-12b-it through OpenRouter. Hosted generation needs network access and sends the note to the hosted service; it is not private local inference. That route still needs a successful production end-to-end check.

flowchart LR
  A[Notice something outside] --> B[Write a short field note]
  B --> C{Choose a route}
  C -->|Local, compatible WebGPU| D[WebLLM + Qwen in browser]
  C -->|Hosted, explicit opt-in| E[Supabase Edge Function]
  E --> F[Backboard / configured Gemma model]
  D --> G[One-minute field prompt]
  F --> G
  G --> H[Put the phone away]

Why Does Open Innovation Matter?

Open weights and an open browser runtime make the local first version possible: people can use the prompt without sending their observation to an AI provider, and there is no per request model API charge on that path. The small model is also replaceable, so the app can evolve as browser runtimes and compact models improve.

That openness comes with real constraints. WebGPU support, memory, and the initial model download determine whether the local route works on a particular phone. A hosted model can reach more devices, but it needs connectivity, may cost money, and means the user's note leaves the device. I want the app to make that tradeoff visible instead of quietly routing every observation to a server.

Prize Categories

  • Overall challenge
  • Best Use of Render (the live frontend is deployed as a Render Static Site)

Top comments (0)