I kept forgetting about my cactus… A developer built SlothPlant, an open-source plant caretaker that pairs an Arduino UNO R4 WiFi soil-moisture sensor with a locally run open-weight model (gemma3:1b via Ollama) to send a two-line notification through ntfy only when a plant needs water. The pipeline runs soil readings through a Flask server on the developer's laptop, keeping data local with no API keys or usage fees, and is MIT licensed with setup steps in the README. The developer reports the first automatic "thirsty" alert arrived unprompted and is now tuning thresholds, since placeholder values make the cactus request water more often than it should. This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady https://dev.to/challenges/hacktoberfest-week3-2026-10-19 SlothPlant is a plant caretaker for people who forget their plants. An Arduino UNO R4 WiFi watches the soil moisture of my cactus, and a small open-weight model running on my laptop reads the readings and writes a sleepy two-line message to my phone, but only when the plant actually needs me. It saves me the chore of remembering to check on the plant. I never look at it; it quietly checks itself and speaks up when it matters. A cactus is also the ultimate sloth plant, since it barely needs anything. Here's SlothPlant watching my cactus, with the soil sensor in the pot and wired to the Arduino's A0 pin: And here's the notification that arrived on my phone when the soil read dry: A plant caretaker for people who forget their plants. An Arduino watches the soil all day, a small open-weight model running locally reads the readings, and your phone gets a sleepy two-line message only when the plant actually needs you. Built for the Hacktoberfest Open-Source AI Challenge Week 3: Sloth Day . It grew out of a class assignment on Arduino, and the open-source AI part was built this week. php Soil sensor - Arduino UNO R4 WiFi - Flask server laptop - Ollama gemma3:1b - ntfy - your phone readings.csv . gemma3:1b through Ollama writes the plant's message and judges borderline cases. MIT licensed, with setup steps in the README. The pipeline: soil sensor → Arduino UNO R4 WiFi → Flask server on my laptop → Ollama running gemma3:1b → ntfy → my phone. pip path on Windows and got around it by calling python -m pip . Because the model runs on my own laptop, my data never leaves it. There are no API keys, no usage fees, and nothing that stops working if a service changes its pricing. A project like this is tiny, a $30 board and a free model sending a few messages a day, and a closed API would turn it into a recurring cost for almost no work. Open weights also let me pick a model small enough for a student laptop and swap it later without rewriting anything. During testing, my first "thirsty" notification arrived without me checking on anything, which was the whole point. I'm still tuning it: my thresholds are placeholders from class testing, and a cactus likes dry soil, so it can ask for water more than it should. Next steps are per-plant tuning, or telling the model the plant is a cactus so it asks far less often.