Skip to content
Koderead

Direct-to-consumer retail

AI Growth Console

Our merchandising decisions are weekly. Our data is weekly. Our competitors are daily.

A person taping parcels at a packing bench

A direct-to-consumer retailer where margin, returns and stock risk are all knowable and none of them are visible until a Monday export. Abandoned baskets are chased with one template regardless of why they were abandoned, and the marketing team spends its week assembling reports rather than acting on them.

The product

AI Growth Console

The queue, the approval screen, the exception list. Every number is readable and every handover is visible.

GRGrowth

MerchRetail

Orders this month
24,800
Baskets classified
6,412

by abandonment reason

Flagged for merchandiser
38

SKUs at margin or stock risk

Recovered baskets
1,184

reason-matched follow-up

Reporting lag
Live

was 6 days

Questions self-served
312

no analyst involved

Abandonment, classified by reason

Basket-abandonment breakdown — AI Growth Console
ReasonBasketsRecoveredAction taken
Shipping cost at checkout2,140486Threshold reminder + free-shipping tier shown
Payment failure890401Retry link, alternative method offered
Size or fit hesitation1,630208Fit guidance + free returns surfaced
Comparison shopping1,18072No discount sent — margin protected
Out of stock variant57217Back-in-stock notification offered

1,184 recovered in total. Note the comparison-shopping row: the system deliberately sends no discount there, because that cohort converts anyway and a discount only gives away margin.

Flagged for a merchandiser

  • LM-4471 Linen Shirt

    Return rate 31% vs 9% category

  • LM-2210 Canvas Tote

    Margin 11.2%, below 18% floor

  • LM-8802 Wool Scarf

    14 days cover at current velocity

Asked in plain language

“Which SKUs lost us money last month?”

→ 3 SKUs below margin floor · query and source shown with the answer

Built by Koderead to show the operating system. Figures are a worked example.

Watch one record

Where the handover actually happens.

A screenshot shows a state. This follows a single record through the system, including the point where it stops and waits for a person.

One abandoned basket, start to finishWorked example
  1. A basket is abandoned20:41

    One of roughly six thousand this month.

  2. Classified by reason20:41

    Where they stopped, not just that they stopped.

  3. Recovery matched to the reason21:10

    Not one template for every cause.

  4. A cohort deliberately left aloneDaily

    Comparison shoppers convert anyway. A discount only costs margin.

  5. Merchandiser gets a ranked list08:00

    Three SKUs, with the reason and the number attached.

State

Basket value
£84.00
Last step reached
Shipping options
Customer
Returning, 3 prior orders
Reason
Unknown

Refunds beyond policy thresholds require human approval

Deeper into the build

The screens where a person is still in the loop.

A queue is easy to show. What matters is what happens at the record, at the approval, and at the exception — because that is where the design either holds or does not.

Margin flag — LM-2210 Canvas ToteMerchandiser decision
Units sold, 30 days
1,840
Average selling price
£28.40
Landed cost
£21.60
Returns rate
9.1%
Contribution margin
11.2%
Category floor
18.0%

System recommendation

Below the category floor for three consecutive weeks. Discounting has been the recovery lever and is the cause. Options are a price rise, removal from the recovery sequence, or accepting it as a loss leader — this is a commercial decision, not an automated one.

  • Below floor 3 weeks
  • High discount exposure
  • Volume is strong
ApproveEditReject

Pricing changes are proposed with margin shown. A merchandiser commits them.

Previously visible only in a Monday export, by which point another week of discounting had already run.

Recovery by reasonThis month
Baskets classified
6,412
Recovered
1,184
Margin protected
£14,200

discounts not sent

  • Shipping cost at checkout486 of 2,140
  • Payment failure401 of 890
  • Size or fit hesitation208 of 1,630
  • Comparison shopping72 of 1,180

The comparison-shopping cohort is deliberately sent no discount. It converts anyway, so a discount there only gives away margin — which is the sort of judgement a rules engine does not make on its own.

The change

Where the work moved.

Amber marks a step the system performs. Solid ink marks one a person still performs. The counts above each column say the same thing in numbers.

Today

5 human steps
  1. Orders accumulate

    Performed by System
  2. Weekly export pulled

    Monday morning

    Performed by A person
  3. Joined by hand in a spreadsheet

    Performed by A person
  4. Report circulated

    Already six days old

    Performed by A person
  5. Baskets chased generically

    One template for every reason

    Performed by A person
  6. Stock risk found too late

    Performed by A person

After

1 human step
  1. Orders flow into the metric layer

    Performed by System
  2. Margin, returns and stock risk scored

    Continuously, by SKU

    Performed by Automated
  3. Abandonment classified by reason

    Shipping, payment, hesitation

    Performed by Automated
  4. Recovery matched to the reason

    Performed by System
  5. Merchandiser acts on a ranked list

    Same day

    Performed by A person
  6. Answers any question with its query shown

    Performed by Automated
  • Automated
  • A person
  • System
  • Customer

Scope of authority

What this system is not allowed to do.

On a real engagement this is a document your operations lead signs before anyone writes code.

  • Refunds beyond policy thresholds require human approval
  • Payment details are never handled conversationally
  • Consumer-rights obligations — returns windows, cancellation rights — are enforced as rules, not interpreted
  • Pricing changes are proposed with margin shown; a merchandiser commits them
  • Every answer shows its query and source so a surprising number can be checked

Built from

The solutions behind this build.

Your version of this

This took a mapped workflow before it took any code.

If this looks like your direct-to-consumer retail, the place to start is the same place we started here.