Retail & E-commerce
Three days of stock guesswork, gone
A two-floor clothing retailer replaced a Monday morning reorder meeting with a forecast read from its own till data.
This is an illustrative composite. It is drawn from delivery patterns across our work rather than published as a named client reference, and the figures describe the pattern rather than one audited engagement. We would rather label it than imply a reference we cannot put you in touch with.
- Industry
- Retail & E-commerce
- Arc
- Intelligence
- Size
- 48 staff
Context
A 48-staff apparel retailer running two floors in a city centre plus a small online store. Stock decisions were made every Monday by the floor manager and the owner, working from a Tally export, last year's sales and a shared instinct about the weather. They carried around 400 active SKUs across two seasons.
The problem
Reordering was a three-day cycle: pull the export, reconcile it against the online store by hand, argue about it, place the order. Fast-moving lines ran out mid-week and slow lines sat for two seasons. They were holding roughly four months of cover on lines that turned twice a year, and the cash tied up in it was the constraint on opening a third floor.
What we did
- 01Two days on the shop floor watching the Monday cycle, including the parts nobody had written down — the floor manager's mental note of which lines the online store cannibalised.
- 02Reconciled three years of Tally exports and the store's order history into one product record, resolving the SKU codes that had drifted apart between the two systems.
- 03Built a per-SKU demand model on the reconciled history, with seasonality and a size-curve split, and validated it against the last four quarters it had never seen.
- 04Shipped a reorder sheet that proposes quantities with the reasoning attached, and a weekly exception list of lines behaving unlike their forecast.
- 05Trained both managers on the floor and handed over the runbook for the month-end reconciliation.
Architecture
Nothing here is a black box. You can read the architecture before you sign, and you own it after.
- 01IngestNightly Tally export and store order pull, landed raw and versioned before anything transforms it.
- 02RecordOne product and sales record in Postgres, every row carrying org_id and frozen by trigger.
- 03ForecastPer-SKU seasonal model with a size-curve split, retrained weekly and scored against a held-out quarter.
- 04RetrievalJJ Atlas over the reconciled history, so a manager asking why a quantity was proposed gets the rows it came from.
- 05SurfaceA reorder sheet and an exception list, both exportable to the format the supplier already accepts.
Results
The numbers the work closed against.
- target reduction in stock-outs across 400 SKUs
- 31%target reduction in stock-outs across 400 SKUs
Basis: Modelled on 400 SKUs with three years of history, assuming a weekly retrain and a size-curve split. Derived from backtest error against held-out quarters, not from a live deployment.
- design target for producing a week's reorder
- 3 days → 40 mindesign target for producing a week's reorder
Basis: Three days is the observed manual cycle — export, reconcile by hand, meet, order. Forty minutes is the measured runtime of the reconciliation job plus review of the exception list.
- target reduction in cash held as slow-moving cover
- 22%target reduction in cash held as slow-moving cover
Basis: Assumes lines turning under three times a year carry four months of cover and move to roughly three. One month against an average 4.5 months of cover is about 22%.
- of held-out data a model is validated against before go-live
- 4 quartersof held-out data a model is validated against before go-live
Basis: A delivery standard we hold rather than an outcome: the model never sees these quarters during training, so the score is out-of-sample.
Stack
- Next.js
- Supabase Postgres
- pgvector
- Python
- Tally export pipeline
- Vercel
Related work
The carts that used to just leave
A grocery group's online checkout was losing more baskets than it converted. Rebuilding it recovered nearly a quarter of them.
23% target recovery of abandoned baskets within eight weeks
150 staffThirty-eight minutes to clear an exception, down to four
A freight operator's exception desk stopped being four people reading four screens.
4 min target median time to clear an exception, against 38 observed
Does this look like your business?
Tell us what is slow and what it is costing. We will point you at the closest precedent we have and say plainly where yours would differ.
Scope it with us