A few days after I got the idea to make my garden planning tool, I ran into quite a few hiccups.
In the atoms and molecules world, some of the atoms that made the raised beds for my garden got lost in transit… At the same time, I realized I miscalculated a few things (including my budget), and, consequently, the layout of my darling garden had to be tweaked.
Moreover, I found out walnut trees are known to be allelopathic - meaning they leak toxins in the soil that other plants may not tolerate well. Guess what would provide some shading to the garden on scorching afternoons?! A friggin' walnut tree. But since the garden's first year is an experiment of many things (no dig, Danish climate, my gardening skills, companion planting, gardening with deer and chickens running wild), I guess we add one more to the list: trying to grow plants in soil full of juglone. I wonder if there's a cheap soil test for this.
So, next year's garden will be exciting to watch!
But on to the thornier issues.
Surprisingly, there is too much and too little data for home gardeners on the web.
There's much of it because you can find a whole universe of websites that sell plants and seeds and provide good quality information about the plant and its care. To mention a few, the Royal Horticultural Society in UK, Thompson & Morgan, Andre Briant, and of course, the USDA Plant Database.
I searched for plant variety information—how and when precisely do you sow, plant, care, and harvest, and specifications such as space, moisture, soil, sun requirements, and so on. I couldn't find any consistent database with an API that provides all that.
If there are any, I could not find them, or they are proprietary or without an API. So, since I needed to use my garden planner yesterday (!!) I had to reconsider a few things.
The desire to build something AWESOME corrupted my initial plan. Instead of a "simple" tool, I started dreaming of enriching all data I found on plants across databases, thus creating a tool that would be interesting to botanists and horticulturists. Crazy, right?! Seeing the vast amounts of (by my criteria, incomplete) data, little of which served my needs, I had to take a breath and consider my priorities.
So, I will make a product for me instead of a product for the world. I must remember to keep things as straightforward as possible while still functional. What does that mean?
Since I will make a product for myself, I need an empty database. Sure, I need to model it the right way, but the entries will have to be manual, based on the seeds I purchase, for specific varieties with specific requirements. This revelation solves the crazy data problem—sort of. The database will be a graph in Neo4J, which I am just learning, but that's not a problem in and of itself. It's a challenge accepted by default.
The API will be reasonably straightforward CRUD. I doubt I will ever use the delete function, though. The point is to use this for years to come and evolve the data, not diminish it. However, since what I am building is essentially a "book of seeds," they do come with an expiration date, so I might have to "soft delete" a batch of seeds - not necessarily the species/variety.
I will be generating data using a front-end application.
If I find it necessary, I might still use external APIs for images, taxon information, etc. I will probably also use external sources, such as the ones mentioned above, to add valuable information about pests, care, and characteristics that I should keep in mind. These will require citation and a link, as is proper and nice for work well done.
The front-end app needs the mother-of-all-forms to generate the data correctly and slap me when I'm lazy. If the information I need is not on the seed packet or the seller's website, dig, guuurl! Incomplete data and messy descriptions are the reason I started this in the first place.
When creating an entry, I should also be able to search for / create companions and antagonists.
Ideally, I would also find some (font)icons that would make good illustrations for the garden drawing board.
Once the database is populated, an excellent search function would be nice to have. Also, I should be able to quickly access a group of plants/fungi (yes! I want to grow some mushrooms too soon). The plants' genera would probably do this. Maybe I should just custom group them? To be considered.
NOTE TO SELF: tags are always a quick, easy way to group things. Don't complicate things. If you need hierarchical data, consider how WordPress implements categories.