Monday, February 9, 2026

Orchid Documentation Automation: Because Copy/Paste Wasn’t Cutting It

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); 
}

The code example above makes sure that watering logs pull from columns C3/D3 on the Maintenance Log and append starting at row 55 on each individual orchid sheet, while repotting logs pull from G3/H3 and append starting at row 37. No more endless copy/pasting and hoping things work!  Now that its automated, I can spend less time entering data across the whole workbook.

To give you an idea of what this looks like in practice, here’s the little function that handles repotting logs. The idea is simple: this function is basically an automated filing assistant for each orchid:

// Append repotting log
function 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);
          }

This little script is basically an automated “note‑taker” for my orchids. Instead of scrolling through a sheet, finding the right orchid, hunting for the right section, and typing everything in by hand, the script does all of that for me.

Here's a breakdown of what happens, step by step:
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.

So instead of manually updating dozens of sheets, the script handles the boring part. I just tell it what happened, and it files the information exactly where it belongs.

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.)
Then it does the math:

  • 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




No comments:

Post a Comment