This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass.
What I Built
My balcony has a little garden: two Indian hibiscus, a money plant, jasmine, a blue aprajita, mint, tulsi and sadabahaar. All in pots. I water them every morning and every evening, without fail.
But a routine doesn't look at the sky. It waters the plants an hour before a downpour. It doesn't know a 38°C afternoon is coming. And it definitely doesn't go looking under leaves for aphids.
I didn't want another app to spend time in, though. The whole point of a garden is to not be on your phone. So I built Tendril, a garden assistant you barely have to open :)
- It plans the week from the weather. Every Sunday at 7 AM it reads the forecast, and a small open model running on my own machine writes a plan: at most two tiny tasks a day, each under six words.
- It checks the sky every morning. If rain shows up overnight, or a heat spike, it quietly rewrites just today's tasks.
- The plan is one picture. It's made to fit a phone's lock screen, with the top third left empty for the clock. One glance and you're back outside.
- Tell it what you did. Tap Done, or hold the mic and say something like "Watered the chillies, there are aphids under the tulsi leaves." It ticks off the watering, and since aphids are serious, it re-plans the rest of the week with neem oil first. It's set up for English and Hindi.
- It only nudges once. After 6 PM, if something's still pending, the page shows one gentle line. That's it. No streaks, no guilt.
- No accounts. Set your city, add your plants, scan a QR code, add it to your home screen. Done.
An app that wants you to close it as fast as you can sounds a bit odd, I know. But that's the whole idea :)
Demo
Searching for your city
Adding a plant
The morning plan
Telling Tendril what you did
Code
GitHub: https://github.com/pyarchana/tendril
How I Built It
Nothing fancy, and that's on purpose. Everything that thinks runs on the same machine:
- Python and FastAPI for the app, with SQLite for the garden's memory.
- Qwen 2.5 (3B), an open-weight model, running locally through Ollama. It writes the weekly plan and reads my notes.
- faster-whisper, an open speech model, turning voice notes into text right on the CPU.
- Open-Meteo for the forecast and city search. Free, and no API key.
- Pillow to draw the plan picture. Every icon in it, the sun, the clouds, the little leaf, is drawn in code.
- Docker Compose to run it all with one command.
A small model with big habits
A 3B model is tiny. That's what lets it run on a laptop, but it comes with some habits. My first real run taught me more than all my tests did:
- It copied my instructions into its answers. I asked for a short reason with each task, and got back things like "At most 2 tasks per day; fewer is fine on quiet days." Thanks, very helpful :)
- Then it copied my example onto every day. I showed it one sample day with "Water deeply at the roots". Next plan: deep watering, seven days in a row, for both plants.
- It was slow. The first plan took 242 seconds.
The fix wasn't a bigger model. It was splitting the work. The model handles what it's good at: varied, plant-specific ideas, and making sense of messy notes. Plain code handles what it can't be trusted with. The weather rules (skip watering above 60% rain, shade above 35°C, a deep soak after three dry days) are applied last, over whatever the model said. Repeats get trimmed. Copied reasons get swapped for a real weather note.
Asking for compact JSON helped with speed too. All that indentation was costing about a third of the tokens. A week plan now takes about 100 seconds, which is fine for something that runs quietly at 7 AM.
Keeping the model honest
Every plan has to come back as proper JSON: at most two tasks a day, actions under six words, only plants I actually own, and every date filled in. The server checks each reply with Pydantic. If something's off, it asks once more and says exactly what was wrong ("unknown plant 'Rose'"). If that fails too, a simple rule-based planner steps in. So a plan always shows up, model or no model.
Voice notes got a small safety net as well. In one test the model filed "I watered the chillies… aphids on the tulsi" entirely under tulsi and forgot the watering. Now a tiny keyword check runs alongside it and catches the obvious things like "watered", matched to the plant named in the same sentence.
Making it feel like a lock screen
I wanted the plan to feel calm, like a wallpaper rather than an app. Dark forest green, two big cards, a weather pill that says something like "29° · Rain at 4 PM", and a strip of the next six days at the bottom. Headings are in Bricolage Grotesque, everything else in Figtree.
Why Does Open Innovation Matter?
- My garden stays at home. My location, my voice and my plants' history live in one small file on a machine I control. Voice notes are turned into text on that same machine. The only thing that leaves is the garden's coordinates, to fetch the weather.
- It costs nothing to run every day. A planner that wakes up every morning, forever, is exactly the kind of thing where paying per request adds up. With an open model, there's no bill that grows.
- I could see the model's mistakes, and work around them. Every odd habit above showed up in the raw output, and I could fix it on my side the same day. No waiting on anyone.
-
Swapping models is one line. If a better small model comes out next month, I change
OLLAMA_MODELand pull it. Everything else stays.
A bigger closed model might have written prettier reasons. But a small open one that lives on my own machine, costs nothing and does the job is more than enough for a few pots on a balcony.
Trying It on My Balcony
The first plan for my balcony landed on a rainy week. The forecast showed rain on four days, with up to a 94% chance on one of them. So Tendril's advice for most of the week was simply: skip watering today.
For someone who waters twice a day no matter what, that was the most useful thing it could say :)
It also left the watering alone on the dry days, because my notes already say I water every morning and evening. It suggested pest checks and pinching off yellow leaves instead.
Turns out the best thing a garden assistant can say is sometimes "don't". 🌱




Top comments (0)