(CASE 03 · STEMWISE)
Building and running a production SaaS, end to end.
It started as my own spreadsheets for wholesale orders and inventory, and they were too slow. What replaced them now runs purchasing and sales for 20+ businesses, $200K+ through it.

(TL;DR)
- SITUATION
- My own wholesale orders and inventory lived in spreadsheets: every order re-typed by hand, the same plant named a dozen ways.
- WHAT I DID
- Designed and built the whole product: dashboards, the ordering flow, the layer that matches a plant’s many spellings to one name, and the pricing engine inside the database.
- RESULT
- 20+ businesses run purchasing and sales through it, $200K+ combined and over 12,000 plants purchased and sold, verified 2026-08-24.
(WHERE IT STARTED)
It started as my own spreadsheets, and they were too slow.
Before there was a product, there were two spreadsheets, and I was the one keeping them up to date.
Orders came in from multiple different apps every time and I had to copy each one in by hand, everyone spelled the plant names differently, and the totals were only right after I redid the math myself. I wanted it faster, and I wanted to teach myself AI Development, so I built the thing that replaced both.
(THE PRODUCT)
The dashboards customers run, and the site that sells them.
Stemwise is one place for a plant business to keep its stock, its orders, and its analytics, instead of a folder of spreadsheets.
The public site and the dashboards Stemwise customers work in today. I built and designed every part of it myself.




(THE DATABASE)
The part nobody screenshots.
Every plant I buy arrives in a batch, and batches bought months apart cost wildly different amounts.
Why build the lot system? Plant prices fall fast: about 90% in two months is normal. Monstera Bulbasaur tissue cultures, plants grown from cells in a lab, went from $300+ retail to $27 in two months. An average cost hides that. Charge each sale against its own batch and the profit is real.
51 TABLES · 92 FUNCTIONS · 85 ACCESS RULES · VERIFIED AGAINST THE LIVE DATABASE, 2026-08-31
SCROLL THE DIAGRAM SIDEWAYS TO READ IT →
(THE ALIAS INTELLIGENCE)
Teaching the data to recognize a plant.
The same plant gets typed a dozen ways: Albo, Monstera Albo, Monstera Deliciosa Albo (Large Form). A person knows those are one plant. A database does not, unless it is taught.
I kept this by hand first: a tab mapping whatever a plant was called that week onto the name I used. It worked until it stopped working, so the database does it now.
1,636 messy names → 491 plants
SCROLL THE DIAGRAM SIDEWAYS TO READ IT →
ALIAS MATCHING · SCOREBOARD
The product writes most of these extra names itself, from rules like dropping the genus off the front of a name. Before any generated name ships, one check asks whether that same word already points at a different plant. It catches two plants claiming one word.
1,528 of 1,530 generated aliases shipped without a name collision, 99.9%
generated aliases shipped without a name collision
99.9%
two names for two plants collided; both were caught before shipping
VERIFIED AGAINST THE LIVE DATABASE, 2026-09-01
THE CAUGHT CASE
One rule drops the genus off the front of a name. Two different plants were left answering to the same single word, so the check refused to create either name rather than guess which plant a customer meant.
- "Veitchii" · Platycerium Veitchii vs Anthurium Veitchii2026-05-07
491official plants in the library2 merged by hand
These are the product’s own names for its rules. genus_prefix, the only one that ever collided, drops the genus off the front of a name, so a record reading Monstera Albo also answers to Albo.
71 names audited · 7 unlinked found and fixed 2026-09-02 · 2 new plants
The headline is a collision-free rate: of the 1,530 names the generator produced, 1,528 shipped without a second plant already claiming the same word. It is not a measure of whether each name points at the right plant. Both figures are a dated snapshot of queries against the live database, not a live feed; refreshing them is a rerun of the recorded SQL, and the date above moves with it.
(ORDERS THAT RUN THEMSELVES)
One link replaces the back-and-forth sales process.
Wholesale orders used to arrive as messages on four or five different apps and get copied into a spreadsheet by hand. Now the buyer fills in one form and the order is already in the system. It also acts as a lead generator for potential users, as the form can prompt wholesale users to sign up to track their purchase order and inventory through Stemwise.
A customer opens the wholesale form, or a presale form where people order before the plants have arrived. They pick plants at live prices and can still edit their own order afterwards. Demand adds itself up as the orders come in, so users always know what they need to fulfill.

(SKETCH TO FEATURE)
A customer sketched what she needed on a sticky note. Three weeks later the feature was live.
One customer’s sticky note started the mother-plant feature: tracking the big plants that every cutting is taken from. Her sketch, the DMs it arrived in, and the screen that shipped have their own page.
3 WEEKS · REQUEST TO LIVE
READ THE CHAIN →