Every Record Now Has a Source
As an experiment, last week I introduced r/InternetIsBeautiful to Plant Smart. To my surprise, it was overall very well received! Obviously, there were a few inevitable bad-faith comments from your standard-issue dickheads, but along with a lot of positive vibes I also got heaps of great suggestions and feature requests. So, this post covers not only a database scrub, but everything I’ve added as a result of the thread.
The database lost some weight.
Originally, the plant database held around 480 records. It now holds around 280, so roughly 200 records are gone. About 170 of them came from a single symptom list, and all of them included “cardiac failure”. That one symptom pushed every associated record to the top severity level. They read as “critical” because of the shared symptom list, not because of the plant itself. The list came from older sourced data that I never properly scrubbed and vetted, so I nixed those records entirely from the primary data set.
Sucks, but a smaller database you can trust beats a bigger one you cannot.
How I source vetted data.
At the moment, I check each record against the following authoritative data sources:
- The ASPCA toxic plant list. It gives the clinical signs for dogs, cats and horses. This is the original reference that started the project way back in December of 2022.
- The Guide to Poisonous Plants from the College of Veterinary Medicine and Biomedical Sciences at Colorado State University. It gives the clinical signs for each body system and it names the animals that the plant affects. It is stronger than the ASPCA list on horses and other farm animals.
Every one of the 280 or so records that remain traces back to at least one of these two references. That’s the whole bar. If a plant can’t clear it, it doesn’t get a record.
Both references are copyrighted material. I cite them and link to them directly without publishing any of their text. Each record holds my own symptom names only. If you’re curious, the attributions page lists every licensed source used to build the site.
If you know of another authoritative data set that covers animals, the plants that are toxic to them and the associated symptoms, please let me know in the comments below or on the contribute page.
What I removed, specifically.
I removed the inaccurate records and enriched and corrected the rest. These changes break down into three groups.
- The old data set covered seven animal types. The update reduces coverage to cats, dogs and horses. That doesn’t mean I’ve given up on birds, fish, reptiles and small mammals. If I find good data for any of those groups, they go straight back in. Until then, they’re parked.
- I also changed the rule that sets the severity level of each record. The old rule just took the worst symptom on the record. Now there’s an extra condition: a record with a single “critical” symptom and no “severe” symptoms gets marked “severe” instead. Nothing huge, but I felt it was worth mentioning.
- A handful of records turned out to be duplicates, so I merged them.
The plant index is now a “Field Guide”.
Reddit user u/Abbot_of_Cucany mentioned that their bird guide indexes each species twice: the common name in plain type and the scientific name in italic type. I thought this was a great idea, so I built it. Of course, I got a little carried away, so the page now also holds a filter box. Type part of a name and the page shows every matching plant on record. A letter row sticks to the top of the screen while you scroll, and it marks the letter you’re currently reading through.
The front page got some filter updates!
Some people requested more filters, so I delivered. The additions cover severity, plant shape and the geographical regions where you might come across a plant in the wild. Those last two data points were already sourced, but not really in use. At least not in any obvious way. I also added a newer, tighter, photo-centric grid view for smaller screens. Personally, I think it looks good, but I’m not sure if I’m going to keep it. Let me know what you think!
The extra dropdowns squished everything together in the filter bar, so I had to rethink how to display them. I replaced all the individual dropdowns with a single multi-level filter menu. You can now click around and filter as you go. I also shrank the icons a bit to save more space, but they expand when you hover over them with a mouse or tap them on a small screen.
Also, worth noting: your filter selections stay in the browser between visits.
The data for the “Found in” filter comes from GBIF, the Global Biodiversity Information Facility. GBIF counts the wild sightings of each plant in each country. A country counts as a match when it holds one percent or more of the sightings for that plant. It’s a totally arbitrary, non-scientific threshold that I imposed to keep the country list as tight as possible.
Safe plants get a facelift!
The safe plants list now holds over 30 common household plants. The new entries include the spider plant, the bamboo palm, sage and baby’s breath, among others. A new entry joins this list only when the ASPCA marks the plant as non-toxic and only when the plant is absent from my own database. Each entry also carries a note that names the toxic plant people confuse it with. For instance, bamboo palm is safe while sago palm is deadly.
Based on a couple of user suggestions, each safe plant also includes a small gallery of three related photos sourced directly from the naturalist community at iNaturalist. Clicking a photo opens a lightbox with a zoomed-in view along with attribution and licensing information.
It now has a blog… sort of.
This part wasn’t a suggestion. In addition to the updates page, I thought some kind of small blog would make sense. The articles I write about the site live here, where visitors to Plant Smart will most likely never read them. So, instead of building actual blogging functionality, I decided to syndicate the articles from here. I updated my Hugo templates to generate an RSS feed for each tag. Every article about Plant Smart carries the plantsm.art tag, so the site can ingest all the relevant content on its own.
The page shows one featured note first, just the latest entry in the list. Five recent notes follow as cards. Finally, an archive section gives one row per note, grouped by year. There’s just not enough content at the moment to fill that section out, so it stays hidden for now. Also, something you can’t see just yet: a text filter appears after 15 or so entries and works just like the one in the field guide.
Finally, some changes to the API.
The API gives one file for each animal in the database. Since the data scrub, four of those files no longer exist: birds.json, small-mammals.json, reptiles.json and fish.json. The database itself no longer holds plant records for those animals. The API page documents the files that remain. Every other endpoint and every other shape stays the same.
What’s next?
I want the other four animal types back. A rabbit owner needs this data as much as a dog owner does. I’m on the lookout for a reference that gives the symptoms per plant for birds, fish, reptiles and small mammals, but there’s just not a lot of authoritative data out there. If you know of one, tell me in the comments below or on the contribute page.
I also want those 170 records back, but each one needs a reference that names the plant and gives the clinical signs. Until then, they stay on the back burner.
That pretty much covers it. It’s been a fairly hectic week of coding and rolling out updates, but it’s been a lot of fun. At the time of writing, the Reddit post sits at over 530 upvotes! It’s always risky sharing something you’ve made with the world, but more often than not, people appreciate it. It really put a smile on my face.
Till next time!
1 revision since publication
- bbbaa15 +32 −28 some editing and a new opengraph image
- d8c7084 +99 −0 published
Comments