Direct-to-consumer retail
AI Growth Console
Our merchandising decisions are weekly. Our data is weekly. Our competitors are daily.

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
- Flagged for merchandiser
- 38
- Recovered baskets
- 1,184
- Reporting lag
- Live
- Questions self-served
- 312
by abandonment reason
SKUs at margin or stock risk
reason-matched follow-up
was 6 days
no analyst involved
Abandonment, classified by reason
| Reason | Baskets | Recovered | Action taken |
|---|---|---|---|
| Shipping cost at checkout | 2,140 | 486 | Threshold reminder + free-shipping tier shown |
| Payment failure | 890 | 401 | Retry link, alternative method offered |
| Size or fit hesitation | 1,630 | 208 | Fit guidance + free returns surfaced |
| Comparison shopping | 1,180 | 72 | No discount sent — margin protected |
| Out of stock variant | 572 | 17 | Back-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.
A basket is abandoned20:41
One of roughly six thousand this month.
Classified by reason20:41
Where they stopped, not just that they stopped.
Recovery matched to the reason21:10
Not one template for every cause.
A cohort deliberately left aloneDaily
Comparison shoppers convert anyway. A discount only costs margin.
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.
- 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
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.
- 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- Performed by System
Orders accumulate
- Performed by A person
Weekly export pulled
Monday morning
- Performed by A person
Joined by hand in a spreadsheet
- Performed by A person
Report circulated
Already six days old
- Performed by A person
Baskets chased generically
One template for every reason
- Performed by A person
Stock risk found too late
After
1 human step- Performed by System
Orders flow into the metric layer
- Performed by Automated
Margin, returns and stock risk scored
Continuously, by SKU
- Performed by Automated
Abandonment classified by reason
Shipping, payment, hesitation
- Performed by System
Recovery matched to the reason
- Performed by A person
Merchandiser acts on a ranked list
Same day
- Performed by Automated
Answers any question with its query shown
- 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.