Plant Parenting with Code

Jan 10, 2026 5 min read

I keep killing my plants. Not intentionally, of course. I just forget to water them. I'll walk past a sad, droopy fern and think "oh no, when did I last water you?" The answer is usually "too long ago."

So I built a Telegram bot to remind me. Because apparently my solution to every life problem is "write some code."

Introducing Growr

Growr is a plant care reminder bot. You add your plants, specify their watering schedules, and the bot sends you a message when it's time to water. Simple concept, simple implementation.

But what started as a weekend project turned into something I actually use every day. And along the way, I learned a few things about building tools for yourself versus building products for others.

Why Telegram?

I thought about building a mobile app. Then I remembered how much I hate mobile development. The build times, the simulator weirdness, the App Store review process. For a simple reminder tool? Overkill.

Telegram bots are underrated. You get push notifications, you get a decent UI for free, you get cross-platform support without any extra work. The API is straightforward: receive messages, send messages, done. No OAuth complexity, no UI frameworks, no styling decisions.

My entire bot runs as a single Node.js script. It connects to Telegram, listens for commands, and schedules reminders. That's it. Deployment is pm2 start bot.js. Updates are git pull && pm2 restart bot.

How it works

When you first message the bot, it asks you to set up your household. You give it a name, maybe add family members who should also get reminders. Then you start adding plants:

/addplant Fiddle Leaf Fig, every 7 days

The bot parses this (thank you, Claude, for writing my parsing logic), creates a schedule, and starts sending reminders. When you water the plant, you tap a button and it resets the timer.

The scheduling turned out to be the interesting part. Initially, I just stored "last watered" timestamps and checked every hour if any plants were overdue. This worked, but it meant reminders arrived at random times—whenever the cron job happened to run after the plant became due.

So I switched to actual scheduled messages. When you add a plant, the bot calculates the exact next reminder time and schedules a message for that moment. This way, reminders arrive consistently at the same time each day (I picked 9 AM because that's when I'm usually awake and near my plants).

The features I didn't expect to need

Multiple households: Melissa and I have plants in different rooms with different care schedules. She wanted her own list, not mixed in with mine. Now each household is separate, with its own plants and members.

Snoozing: Sometimes I see the reminder but I'm in the middle of something. "Remind me again in 2 hours" turned out to be essential. Otherwise I'd dismiss the notification and immediately forget again.

Plant profiles: Different plants need different things. Some like misting, some need fertilizer monthly, some prefer being dry between waterings. I added the ability to track multiple care activities per plant, not just watering.

History: After a month of use, I realized I had data. When did I water each plant? How often did I actually water versus the schedule? This turned out to be useful for adjusting schedules—some plants clearly needed more or less water than their "official" recommendations.

The timezone thing

I'm in Germany. The server runs in UTC. Telegram messages have no inherent timezone. This should be simple, but of course it isn't.

The first version sent reminders at 9 AM UTC, which is 10 AM in Berlin. Fine in winter. But then daylight saving happened and suddenly reminders came at 11 AM. Not a huge deal, but annoying.

I added timezone support per household. You set your timezone once, and all reminders adjust accordingly. The server stores everything in UTC internally, converts to local time for display, and handles DST transitions correctly. Or at least it should—we'll see what happens in March.

What I learned

Build for yourself first. Growr started as a personal tool. I didn't do market research, I didn't build features I thought others might want, I just solved my own problem. This made development fast and the decisions easy.

Telegram bots are genuinely useful. This was my third Telegram bot (after a recipe bot and a household tasks bot), and I'm increasingly convinced that bots are underused. For anything that's basically "notify me about things" or "let me quickly add data from my phone," a bot beats an app.

Reminders need to be reliable. If users can't trust that the reminder will arrive, the whole system breaks down. I spent more time on error handling and monitoring than on features. The bot runs in a Docker container with automatic restarts, logs everything, and pings me if it crashes.

Simple problems have surprising depth. "Remind me to water plants" sounds trivial. But timezones, scheduling, multi-user support, snoozing, history tracking... the complexity adds up. This is true of almost every "simple" problem.

Plant status: improving

Two weeks in, and my plants are noticeably happier. The fern is no longer droopy. The fiddle leaf fig has new growth. The succulent... okay, the succulent might be overwatered now because I keep hitting "watered" whenever I see the notification. Need to adjust that schedule.

But overall, the bot works. Every morning at 9, I get a list of plants that need attention. I water them, tap the buttons, and move on with my day. The plants get cared for, I don't have to remember anything, and I feel slightly less guilty about my track record as a plant parent.

Sometimes the best software is the software that helps you do the small things you'd otherwise forget.