This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
Matara Garden is a weekly checklist for home gardeners in Matara, Sri Lanka. You open it once, see what is ready to harvest, what suits sowing this month and what the rain means for your beds, then put the phone down and go do those things. Ticking them off is the only screen time left.
It has three lists:
The header has a small rain gauge, because in Matara the rain decides everything. October is "very wet" in my data, so the app tells you to clear the drains and keep rain-sensitive crops back instead of telling you to water.
At the top there is a short note from Gemma, in English or Sinhala, that sums up the week.
It is for anyone with a few beds, grow bags or a kitchen garden in the southern wet zone who keeps asking "what should I actually do this week?" and doesn't want another app account.
The app on a laptop, with a few jobs already ticked off (the screenshots use an example garden log):
The same page on a phone, which is where it gets used:
"My garden" is where you log what is growing. Each crop shows how far it is from harvest:
An app like this only works if the screen stays short, so I tried it the way it is meant to be used. The video above shows it: I open the checklist on my phone, read what this week needs, go and do those jobs in the garden, and tick each one when it is actually finished.
The phone talks to the laptop over home Wi-Fi (python server.py --host 0.0.0.0), so the phone needs no mobile data and the laptop needs no internet. Ticks are saved the moment I tap, so there is no save button to remember.
A weekly garden checklist for home gardeners in Matara, Sri Lanka. Open it, see what to harvest, sow and look after this week, and tick things off as you do them outside. The screen is the shortest part of the day.
It runs on your own laptop, offline. A small rule-based crop calendar decides what needs doing (so dates and crops are never made up), and a local open-weight model, Gemma through Ollama, writes the short weekly note at the top.
ollama pull gemma3
python server.py (on Windows you can also double-click start.bat)
Your browser opens at http://localhost:8000. To open it on your phone, run python server.py --host 0.0.0.0 and visit http://<your-laptop-ip>:8000 on the same Wi-Fi.
No packages to install: the app uses only Python's standard…
To run it:
ollama pull gemma3
python server.py
It uses only Python's standard library, so there is nothing to pip install. On Windows you can double-click start.bat.
The stack is Python's standard library, Ollama, Gemma 3, one HTML page and two JSON files. No pip, no npm, no build step.
The design came out of a mistake. My first version gave Gemma the crop data and asked it to write the whole checklist. It worked offline, but I wouldn't trust the output in a garden. It opened with "Okay, here's your Matara garden checklist", wrapped headings in markdown asterisks, and told me to stake brinjal and chili plants that were not in my garden, because it blended tip lines from the data into its advice. A small model with loose grounding will do that.
So I split the job in two:
crops.json holds sowing months, days to harvest and rain tolerance for each crop, plus a rain level for each month. Plain Python combines it with garden.json to build the three lists. Dates and crops can't be invented, because the model never produces them.
The rest is deliberately small. A local server built on http.server exposes a tiny JSON API, and one HTML page talks to it. Ticks are saved into garden.json through the server, so progress survives a restart and isn't locked inside one browser. The server rejects non-JSON posts and unknown Host headers, so another website open in your browser can't poke at your garden.
There are 23 unit tests, and a GitHub Actions workflow runs them on Python 3.9, 3.11 and 3.13. It also builds the checklist for all 12 months and starts the server to check it serves the page. None of it needs Ollama.
I pair-programmed this with Claude. Most of the code was written together, and I ran, read and tested it myself.
Two limits to be upfront about. First, crops.json is starter data written from general knowledge, not an agricultural reference. The app says so in its footer, and the README asks gardeners to check sowing windows with their local Agrarian Service Centre. Second, the Sinhala note is a one-line change to the prompt, but small models are usually less fluent in Sinhala than in English, so treat that note as a draft and have a Sinhala reader check it.
The garden is where the signal is worst. Gemma runs through Ollama on the laptop, so the whole app works with Wi-Fi off. A hosted API would turn it into a page that fails exactly where it is needed.
My garden is nobody else's data. Where I live, what I planted and when stay in a JSON file on my machine. There is no account, no API key and no billing page.
It costs nothing to run. A weekly note for a home garden is not something I want to pay per call for, or manage a key for.
I can change anything. The model is one --model flag. The Sinhala note is a single line in the prompt. crops.json is a plain file, so a gardener in Galle or Kandy can copy the project, change the rainfall levels and the sowing months, and have a planner for their own district. That is hard to do with a service you only reach through someone else's API.
It also showed me the limits. A small local model is not a frontier model, and my first version proved it. Because the whole pipeline was in front of me, I could see exactly where the model went wrong and decide it should only do the part it is good at: friendly wording on top of facts that code has already checked.
Best Use of Gemma: Gemma 3 runs locally through Ollama and writes the weekly note in English or Sinhala, while rule-based code keeps it grounded.