All projects
Shopify case study
Shopify Automation Dashboard
Order, inventory and fulfilment automation for a multi-warehouse Shopify brand.
- Overselling incidents
- → 0
- Inventory sync lag
- 6h → 90s
- Hours saved / week
- 11
admin.shopify.com/inventory
SKU-1042synced
SKU-2298synced
SKU-3311synced
SKU-4470synced
Interface reference — rendered from the real component structure, not a stock image.
The problem
Stock counts drifted between two warehouses and Shopify, so oversells happened during every promotion.
The solution
A sync service that reconciles inventory on webhook and on schedule, plus a dashboard showing drift, failed syncs and fulfilment status in one place.
Hard parts
Shopify rate limits and out-of-order webhooks. Solved with a leaky-bucket queue and version checks before each write.
Outcome
Oversells stopped, and the fulfilment team works from one screen instead of three tabs.
Technology used
- Shopify Admin API
- Node.js
- Supabase
- n8n
- React
How it was delivered
- 01Client problemInventory drift caused refunds and support load after every campaign.
- 02ResearchTraced where counts diverged: manual warehouse edits never reached Shopify.
- 03PlanningChose Shopify as source of truth with reconciliation both ways on a fixed cadence.
- 04WireframeOne dashboard: drift table, failed job list, manual re-sync action.
- 05DevelopmentNode worker consuming Shopify webhooks, writes queued through a rate-limited bucket.
- 06TestingRan a mirrored development store through a simulated flash sale.
- 07DeploymentContainerised worker plus a Vercel-hosted dashboard, secrets managed per environment.
- 08ResultsZero oversells across the following two promotional periods.
Lessons learned
Treat webhooks as unordered hints, never as a source of truth. Always reconcile against the API.