The Problem
A hardware retail chain with 12 branches was running each location on a different piece of software. some on old desktop POS systems, some on spreadsheets. Inventory was managed per-branch with no central visibility. When customers asked "can you check if another branch has it in stock?", staff couldn't answer without making a phone call. Purchase orders to suppliers were generated manually in Word documents.
The owner was expanding to 4 more locations and needed a single platform to manage the entire chain.
What I Built
The platform consists of three interfaces: a branch POS (desktop app), a web back-office, and a management dashboard.
Point of Sale (desktop, Electron): the branch-level POS runs as an Electron desktop app for offline resilience. Barcode scanning via USB or Bluetooth scanners. Products display real-time stock levels across all branches. Sales process: scan items, apply customer discount, choose payment method (cash/card/credit account), print receipt or send by SMS. End-of-day cash reconciliation and Z-report generation.
Inventory management: real-time stock levels per product per branch. Stock transfer requests between branches (raise request → originating branch manager approves → dispatch updates → receiving branch confirms). Low stock alerts configurable per product, triggering email and in-app notifications to the branch manager and purchasing team.
Supplier & purchase orders: supplier database with product-supplier mappings and price lists. PO generation from low-stock alerts or manual entry. PO approval workflow (branch manager raises → head office approves → sent to supplier via email PDF). GRN (goods receipt note) process: receive against PO, quantities matched, variance flagged.
Customer accounts: business customers (contractors, trade buyers) have credit accounts with configurable limits and 30/60-day payment terms. Outstanding balance shown at POS during checkout. Aging report for accounts receivable.
Financial reporting: daily sales summary per branch, margin analysis by product category, slow-moving stock report, top products by revenue and units, and monthly P&L per branch exportable to Excel.
Technical Highlights
The backend is Spring Boot with PostgreSQL. All branch POS instances replicate to a central database via the REST API, with a local SQLite database for offline operation (sync on reconnect). The offline queue handles up to 72 hours of transactions.
Barcode label printing uses the Zebra SDK integrated into the Electron app. Labels include product name, SKU, price, and barcode. generated per-branch with branch-specific pricing where applicable.
Redis caches branch stock levels for the "check other branch" lookup, invalidated on any stock movement event.
Outcome
All 12 existing branches were migrated to the platform over 14 weeks. The four new branches launched directly on the new system. Cross-branch stock visibility eliminated most "check if another branch has it" phone calls, with staff reporting faster customer service. Purchase order cycle time dropped from an average of 4 days (manual Word doc + email + chasing) to same-day for standard orders.
The owner cited the management dashboard as the unexpected highlight. seeing a P&L comparison across all branches in one view was "something I'd never been able to do before."