Lately, I’ve been diving into scripting at work. Real, hands-on automation that makes you think about structure, edge cases, and keeping things maintainable over time. And being the nerd that I am with a hobby I love, my first thought was: I can totally use this for my orchids!
What started as a simple spreadsheet to track my plants has evolved into a fully automated, modular, and surprisingly elegant system for managing both my Orchid Inventory Workbook and my Keiki Inventory Workbook. It’s become a sandbox for everything I’ve been learning... cleaner logic, better data handling, helper functions, and workflows are smooth as butter. Learning JavaScript has been a bit daunting at times but having a background with HTML coding and other light coding things I've done in the past has certainly helped me with this project.
My orchid workbook used to be a mishmash of manual entries, lots of frustration and half‑automated ideas. Now it’s a cohesive system with real structure behind it. I built scripts that take simple inputs on my Maintenance Log sheet and automatically write them to the correct orchid’s individual sheet.
// Append watering log function log
Watering(orchidName, date, notes) {
const sheet = getOrchidSheet(orchidName);
const logStartRow = 55; // Find next empty row let row = findNextEmptyRow(sheet, logStartRow);
sheet.getRange(row, 1).setValue(date);
sheet.getRange(row, 2).setValue(notes);
}
// Append repotting logfunction Repot(orchidName, date, notes) {const sheet = getOrchidSheet(orchidName);const logStartRow = 37;const row = findNextEmptyRow(sheet, logStartRow);sheet.getRange(row, 1).setValue(date);sheet.getRange(row, 2).setValue(notes);
When I enter the repotting info once on the Maintenance Log such as the date, and any notes:
The script looks for that orchid’s individual sheet (each plant has its own page).
It jumps to the repotting section of that sheet which always starts at row 37.
It finds the next empty line, so it doesn’t overwrite anything.
It writes the date and notes in that space, neatly and consistently, every time.
Since repotting isn’t just about recording what happened... it’s also about planning ahead. I also added a function that automatically calculates the next repot date based on the plant’s repot frequency.
Here’s the simplified version of that script:
function calculateNextRepotDate(lastRepotDate, frequencyYears) {
const next = new Date(lastRepotDate);
next.setFullYear(next.getFullYear() + frequencyYears);
return next;
}
What this function does, is it takes two pieces of information
- When was the orchid last repotted?
- How often that orchid needs repotting (like every 1 year, 2 years, etc.)
- It starts with the last repot date
- Adds the number of years from the frequency
- And gives you the exact date the orchid will be due again and posts it on the main Inventory sheet as well as the corresponding orchid sheet
That date gets written automatically into the right place in my workbook. No mental math, no calendar reminders, no “wait, when did I last repot this one?” It also has visual "stop sign" clues to let me see if the repot date is good, getting close to needing to be repotted or due/past due.
I built the confirmation checks to be rock-solid so that fixed date entries always get placed where they should and made sure that the structure can handle unusual cases. I can't tell you how many times I broke my workbook and figured out how to fix it to make it right again.
As I learned more at work, I started applying what I learned here:
I created helper functions for repeated logic
I made sure there was clear separation between data gathering and data writing
Made sure there was consistent formatting across sheets
Made the code predictable, readable code that I can actually maintain with notations on what aspect of the code is for by using comments in the scripting.
Once the orchid workbook was working the way I had envisioned, I realized the Keiki Inventory Workbook could use the same treatment. The structure was similar enough that I could reuse and adapt much of the logic, but different enough that it needed its own design.
Now the keiki system mirrors my orchid system:
It includes automated maintenance logging
It has consistent sheet templates
It uses clean, modular scripts
And its workflow that feels just as reliable
I'm really happy with the way these two workbooks have come together and work as well as they do. It certainly makes tracking and logging data much, much easier than what it was.
Learning scripting at work has completely shifted my mindset. Instead of just putting up with annoying roadblocks, I start by spotting patterns and instead of grinding through repetitive tasks, I find ways to automate them. And instead of dealing with messy data, I build systems that stop the mess before it starts.
Bringing that mindset into my orchid hobby has been unexpectedly rewarding. Every improvement feels like a breakthrough. Every bug fixed is a lesson learned. And every time the system works as intended, I get that quiet, nerdy satisfaction that makes it all worth it.
These workbooks aren’t just tools anymore they’re proof of how far I’ve come in building things that are reliable and genuinely useful.
Maybe I'm a bit OCD with this project, maybe not? All I know is that I'm having fun with it and enjoy seeing it come together!
Take a look if you'd like! The workbook is best viewed on PC or a larger screen:
https://docs.google.com/spreadsheets/d/1UrcoDPCyKMuMPp9sYqYoSnZbNQZvxK09ISzvIGaSHo/edit?usp=sharing


%20-%20Brave.png)
