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.

Size
48 staff
Platforms
AtlasForge

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

  1. 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.
  2. 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.
  3. 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.
  4. 04Shipped a reorder sheet that proposes quantities with the reasoning attached, and a weekly exception list of lines behaving unlike their forecast.
  5. 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.

  1. 01IngestNightly Tally export and store order pull, landed raw and versioned before anything transforms it.
  2. 02RecordOne product and sales record in Postgres, every row carrying org_id and frozen by trigger.
  3. 03ForecastPer-SKU seasonal model with a size-curve split, retrained weekly and scored against a held-out quarter.
  4. 04RetrievalJJ Atlas over the reconciled history, so a manager asking why a quantity was proposed gets the rows it came from.
  5. 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

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