The Challenge
Off-the-shelf retail and POS software assumes a simple model: a product goes in, a product goes out. An interior-materials retailer doesn't work that way. Products are sold by measurement, a quotation goes through several revisions and approvals before it ever becomes an order, deposits and balances are collected in stages across a long fulfilment cycle, and stock has to be reserved the moment an order is confirmed — not when it eventually ships.
None of the ready-made tools mapped to that reality, so the business ran on spreadsheets and manual coordination. Quotation revisions lived in separate files, reserved stock was tracked in someone's head, and payment stages were reconciled by hand. Every workaround was a place for numbers to drift out of sync — and the more the business grew, the more expensive that drift became.
The Approach
Rather than bend a generic product into the wrong shape, the system was built ground-up on .NET 8 Clean Architecture, with the domain modelled around how the business genuinely operates. A Next.js / React / TypeScript front end sits on top, giving staff a fast, modern interface for day-to-day work.
The core of the build:
- Measurement-based quotations with versioned revisions and an approval flow — every change is tracked, and nothing becomes an order without sign-off.
- Sales orders that auto-reserve stock on confirmation, so availability reflects real commitments instead of guesswork.
- Staged deposit and balance payments, tracked against each order through the full fulfilment cycle.
- Event-driven inventory, so stock movements flow from the actions that cause them rather than manual adjustment.
- Procurement and installation scheduling, connecting the sale to what actually has to happen to deliver it.
Clean Architecture wasn't chosen for its own sake — it keeps the business rules isolated and testable, so the modules still on the roadmap can be added without destabilising what's already live.
The Result
The platform is now live and in daily use. The spreadsheet workarounds are gone: quotations, reservations, payments and inventory live in one system that stays in sync by design. Staff work from a single source of truth instead of reconciling parallel files, and the business has a foundation it can keep building on — with further modules already planned.