(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.

The Stemwise main dashboard customers run

(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.

REDRAWN FROM MY ORIGINAL SHEET · PLANT VENTURE, 2025
REDRAWN FROM MY ORIGINAL SHEET · PLANT VENTURE, 2025 · CUSTOMER NAMES REMOVED

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 main Stemwise dashboard
THE MAIN DASHBOARD · LIVE PRODUCT
The Stemwise inventory page
INVENTORY · VARIETY, STAGE, VALUE · LIVE PRODUCT
The Stemwise dashboard analytics panel
ANALYTICS · STAGE VALUE, SALES, TOP SELLERS · LIVE PRODUCT
The Stemwise plants dashboard
THE PLANTS DASHBOARD · VARIETY, STAGE, LINEAGE
SCROLL-THROUGH OF THE LIVE SITE · CAPTURED 2026-08-30

(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

REDRAWN FROM MY ORIGINAL SHEET · MOCHI’S JUNGLE WHOLESALE, 2026 · MONSTERA BULBASAUR, ROW 61, AT $20
The Stemwise database redrawn as a flow: FIFO lot consumption and the COGS engine

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

REDRAWN FROM MY ORIGINAL SHEET · PLANT VENTURE, 2025
The Stemwise alias resolution flow: aliases and canonical synonym pairs resolving to one variety

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

genus_prefix800variegation_suffix405typo195strip_variegated130
ALIASES GENERATED, BY RULE · 1,530 TOTAL · SCALE 0-800ONLY GENUS_PREFIX COLLIDED: 798 SAFE, 2 CONFLICT

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.

SCROLL-THROUGH OF THE LIVE PRESALE FORM · CAPTURED 2026-08-31
The live Stemwise presale order form, empty
THE LIVE FORM, EMPTY AND READY TO FILL · NO CUSTOMER DATA · PRICES ARE THE PRODUCT’S OWN LIVE ESTIMATES

(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 →
A wholesale grower’s sticky-note inventory sketch