DEV Community

gbetibienvenu
gbetibienvenu

Posted on

Plot Buddy: a weekly outdoor card that tells me to put the phone down

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 1:

What I Built

Plot Buddy is a weekly outdoor coach for small home gardens (a bucket, a grow bag, a balcony or a backyard) in Lagos, Nigeria. You answer two questions and get a one-screen "outdoor card": two or three tasks, how many minutes they take, and when to check back. The card says "Put the phone down". You can print it or send it to WhatsApp, and then the real work happens outside. The screen is the shortest part of the experience.

It is for people who want to grow food in small spaces but don't know what to plant this week.

Demo

Code

GitHub logo Bientechsavvy / plot-buddy

Week1 HackToberfest

Plot Buddy

A weekly outdoor coach for small home gardens (bucket, bag, balcony, backyard) in Lagos, Nigeria You spend about one minute on the screen, then 20 to 30 minutes outside. Hacktoberfest 2026, Week 1: Touch Grass.

How it works

  • api/planner.py decides what to do this week from a sourced rules file (api/rules/crops_lagos.json). Plain code, no AI.
  • An open-weight model (qwen2.5:1.5b via Ollama) only rewrites the card in friendly English or Pidgin.
  • api/guard.py throws the model text away if it adds numbers, money, links or crops the rules did not produce.
  • Standard library only. No packages to install.

Run it (Git Bash)

python -m unittest discover -s tests -v          # run tests
python api/server.py                              # rules only, http://localhost:8000
LLM_BACKEND=ollama python api/server.py           # with the local open model
Enter fullscreen mode Exit fullscreen mode

Honest limits

  • Every crop window is marked verified: false. Sources disagree and some are low…

How I Built It

  • Rules decide, the model phrases. planner.py reads a sourced rules file (crops_lagos.json) and decides what to plant or check this week. It is plain code with automated tests.
  • Open-weight model for the wording, two ways. Locally, qwen2.5:1.5b runs through Ollama (works offline). On the live site, a hosted model, [MODEL NAME AND LICENSE: CONFIRM ON ITS MODEL PAGE], is called through one Backboard API key. Both rewrite the card in simple English or Pidgin, and switching is one environment variable.
  • A guard checks the model. guard.py throws the model's text away if it adds any number, price, link or crop the rules did not produce, or drops the total minutes. The app then falls back to the rules text. If the model is down, the app still works.
  • Cost protection. Replies are cached and capped per hour, and /api/status shows which backend is active without revealing the key.
  • Standard library only. No packages to install. Deployed on Render.
  • Sources for every crop window. Each planting window links to its source, and every crop is marked verified: false.

Lesson from an earlier project: I tested a 1.5B model on real messages and it invented a street address and prices. Small models are good at wording and bad at deciding, so the decisions live in code.

What my own tests caught

I saved the planner's output for six test cases (tests/results-v1.txt) and read them like a user would. They showed three bugs: "plant ... in your balcony" and "in your bag" read wrongly, a low-confidence note about leafy greens appeared on cards that never mentioned leafy greens, and the sources list included crops that were not on the card. I fixed all three, added tests, and saved the corrected output as results-v2.txt. I also hit a TLS certificate error calling Backboard from Windows and fixed it without turning certificate checks off.

Why Does Open Innovation Matter?

  • The small model runs on my own laptop, so it needs no internet, no API key and costs nothing per card.
  • I could read, test and change every piece, including the guard that stops the model from inventing facts.
  • Moving from a laptop model to a hosted one was one setting, not a rewrite. With a closed API I would be tied to one vendor's model.
  • Honest limits: only the generated card text goes to the hosted model, never what the user types. It covers Lagos and four crop groups. The planting dates come from public sources that disagree, so the app tells users to confirm with a local extension officer.

Prize Categories

  • Best Use of Render: the app is hosted on Render.
  • Best Use of Backboard: the live site calls a hosted model through one Backboard API key.

](https://dev.to/challenges/hacktoberfest-week1-2026-10-05)*

What I Built

Demo

Code

How I Built It

Why Does Open Innovation Matter?

My Agent Session

Prize Categories

Top comments (0)