Case study

Small Batch Roasting

Operational overhaul and edge systems design for a green-coffee supplier: from a brittle WordPress setup to inventory the business can trust.

ShopifyEdge inventoryInternal ops toolingPre-launch
Small Batch Roasting storefront showing live origin stock counts
Fig. 01: Storefront with live origin counts, pre-launch work.
01

The problem

The business ran on WordPress with a tangle of plugins. Stock counts were inaccurate, phantom stock appeared across multi-origin lots, and overselling was frequent.

The deeper issue was representation: the warehouse reality of raw harvest lots and physical barrels had no faithful model in the system. When the software disagrees with the warehouse, nobody trusts the numbers, and every team invents its own workaround.

“The software should tell the truth about the warehouse.”

02

The model: Coffee Pools

The core design move was an information architecture that mirrors the warehouse. Raw harvest lots and physical barrels became an abstract parent data model (“Coffee Pools”) that dynamically governs child SKUs and multi-bean blends.

Blend availability derives from its underlying pools, so a stockout risk in one lot propagates honestly instead of silently overselling. This kept the range distinct from a standard Greenfield-style SaaS build: the emphasis here is operational overhaul, translating physical reality into data.

03

The engine: serverless edge

Shopify webhooks feed a serverless edge engine built on Cloudflare Workers with Cloudflare D1, performing atomic deductions in real time as orders land.

Moving this off the legacy stack removed the plugin failure modes and made counts accurate at the moment of sale, which is the only moment that matters for overselling.

04

The portal: built for the warehouse

A multi-persona internal tool covers dispatch, with a spatial lot and barrel map; operations, with blend stockout-risk alerts; and intake. Each role sees the same pools through the lens it needs.

This part of the work is internal to the company, so there is no public link to share. What follows is the lots board: live pool stock with lifecycle actions, exactly as the warehouse team uses it.

Internal lots board showing live pool stock across coffee lots
Fig. 02: Lots board, live pool stock with lifecycle actions.
05

The storefront

Up front, customers get honest numbers and help finding their coffee. The Flavour Finder matches stated tastes against live lot data, so recommendations are always tied to what is actually in stock.

It is the same pools model wearing a shopper-friendly face: shade in the flavours you enjoy, avoid the ones you do not, and the matches respect real availability.

Flavour Finder taste wheel matching customers to in-stock coffees
Fig. 03: Flavour Finder, taste preferences matched against live stock.

Why it matters

This project is data modeling, physical operations, and distributed systems, not just UI. It shows I can take a business whose system contradicts its warehouse and rebuild it so the software tells the truth.

ShopifySaaSInventory & ERP

Back to all work