From formula and batch to shelf and Shopify — one operating system.
The Problem
Fragrance production spans formulas, batches, QC, and retail — usually split across spreadsheets, a POS, and Shopify. When those diverge, you lose yield visibility, stock truth, and the ability to trace a bottle back to its batch.
Our Answer
One Laravel domain model from raw material to sale, with a Next.js admin for the plant and a POS for the counter. Shopify is a channel into the same record — not a second source of truth.
Leaked Fragrance needed manufacturing discipline and retail speed in one stack. We built a Laravel DDD backend covering raw materials, suppliers, purchase orders, goods receipts, formulas, production orders and schedules, quality control, finished goods, stock pools, transfers, financials, and Shopify order sync — plus a Next.js admin and counter POS with shifts, receipts, and reporting. Traceability ties a bottle on the shelf back to the batch and the materials that made it.

What's inside
Formulas, production orders, schedules, yield/loss reporting, and QC gates before goods move.
Raw materials, suppliers, POs, GRNs, payables, and supplier returns in one flow.
Finished goods, stock pools, transfers, and scan-level batch traceability.
Shift-based POS with receipts, transaction history, and floor-friendly UX.
Catalog and orders stay aligned between the online store and the ERP record.
Financials, reports, and operational alerts for the team running the plant and the shop.
How we got here
Fragrance ERP BRD: procurement through POS and Shopify
Materials, formulas, production, QC, inventory, financials
Counter flows, shifts, receipts, Shopify order sync
Traceability, printing, and live ops polish