This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass.
What I Built
I wanted a small outdoor invitation, not another feed to scroll. Pocket Field turns a sentence like “I want to hear the rustling and chirping around me” into a short activity card: sit outside, listen for three kinds of sounds, and draw their directions on paper.
It is for someone who has a few minutes and wants help choosing how to spend them outside. I can choose a time budget, a setting such as a balcony or park, and whether to walk or stay in one spot. The app gives me one card. I can save it as text, print it, or remember its three steps and close the screen. The “I'm heading outside” button removes the planner and leaves only the card.
The AI is the selection engine. An open-weight sentence embedding model understands a request beyond exact keywords, while hard filters keep the selected card within the chosen time, movement and setting. The instructions themselves are a small, editable catalog of original activities. I did not need a language model inventing a trail or guessing the weather.
I started this new project on October 6, inside the first week's entry period. Earlier environment preparation was only installation and a model smoke check; it was not this entry.
Demo
Download the video walkthrough using GitHub’s Download raw file button. It shows real captured screen states: the planner, a matching card, the responsive mobile layout and the simplified card view. It is a screen-state walkthrough, not an outdoor-use recording.
See the actual downloaded text card. The laptop app runs locally; installation and offline-start instructions are in the README. The responsive layout also works at a mobile-sized browser viewport, but the loopback server is only reachable on the computer running it. I take the saved or printed card outside rather than hosting my inputs remotely.
I have tested the local matching flow, rejection cases, mobile layout and text download. I have not field-tested it outdoors yet, and I do not claim the optional outdoor-testing bonus. Print CSS is included; automated print-preview verification was inconclusive.
Code
The MIT-licensed source includes the activity catalog, local server, browser interface, frozen dependencies, diagnostic queries and results. No weights, credentials or user input history are committed.
How I Built It
I used sentence-transformers/all-MiniLM-L6-v2, an Apache-2.0 open-weight model, through Sentence Transformers on CPU. The revision is pinned in the code. It embeds a request and 16 activity descriptions into normalized 384-dimensional vectors; cosine similarity ranks the activities that survive the hard filters.
For example, “rustling and chirping” should find the sound-map card even though those exact words are absent from its description. A five-minute budget with easy walking on a balcony yields no card, instead of silently relaxing the constraints. Unrelated input such as a SQL-index request is also rejected in the recorded checks. The low-score threshold is a heuristic, not a probability of correctness.
Eight integration tests passed, covering matching, constraints, malformed requests and browser-origin/Host rejection. On eight author-written diagnostic queries, the intended card ranked first in 8/8 cases and within the first three in 8/8. Median warm local request time was 4.86 ms on the development laptop. The complete diagnostic output contains every query and result. This is a small developer check, not an independent benchmark; startup and downloads are excluded from the timing.
The server uses Python's standard library and binds to loopback. The page has no external fonts, scripts or analytics. After caching the model, I ran it with offline mode enabled. Requests stay in memory for inference and are not stored or sent to an external API. No account, API key, paid service or GPS permission is needed.
The limits are deliberate: English input, a small catalog, no route guidance and no claims about species, health or weather. A local semantic matcher can still misunderstand an unsupported request. The next useful test is taking a card outside and seeing whether its steps are easy to remember.
Why Does Open Innovation Matter?
For this project, openness lets the screen stop being a dependency. I can cache the weights, disconnect from the internet and still choose a card. A closed API would add a server connection and put the request into someone else's infrastructure; this workflow does not need either.
Openness also makes the recommendation inspectable. I can read the exact card the model is ranking, change its wording, or add a seated alternative. A contributor can replace the model and rerun the included diagnostic queries, rather than trusting an opaque service or repeating my performance numbers.
I want the useful output to fit on a scrap of paper. The model makes that first choice easier; the rest of the experience belongs outside.

Top comments (0)