Kutu Studio concept by Minimolo
Back to case study

Every order either moves or gets a reason.

Kutu is an order exception workflow for a small online shop. Each order passes intake, validation, deduplication and a stock check. Anything that cannot ship waits in an exception queue with its cause attached, and the ops team gets one summary alert.

Eight demo orders run inside this page. This is a workflow prototype modelled on an n8n flow: nothing connects to n8n, ships a parcel or sends a notification.

demo run

Orders in
8
Ready (simulated)
4
In exception queue
4
Duplicates caught
1

Documented result of one full demo run.

Tick t+28

The conveyor

Teal belts carry an order forward. Striped chutes drop it into the exception queue with the reason attached. Inspect any station to see its rule and the JSON it handled.

Key

  • Pass belt
  • Exception chute
  • Order on a station
  • Failed or escalated

Intake

One item per order from the demo batch

Received
8

Validate

Required fields and a whole-number qty

Passed
6
Held
2

Holds drop to the exception queue

Deduplicate

key = email|sku|qty

Passed
5
Held
1

Holds drop to the exception queue

Stock check

stock[sku] >= qty, two lookup tries

Reserved
4
Held
1
Failed
0

Holds and failures drop to the exception queue

Ready for fulfilment

Simulated: no shipment is created

Orders
4

KT-1041, KT-1043, KT-1044, KT-1046

Exception queue

Retry from the holding station, max 3 attempts

Open
4
Escalated
0
Review
0
Resolved
0

Team alert

One summary per run, not sent

Message
Composed
Sent
No

Eight demo orders

Each label shows where its order ends in the documented demo run.

  • KutuZ3

    KT-1041

    SKU
    KB-TOTE-S
    Qty
    2
    Postcode
    34710

    Canvas tote, small

    Ready (simulated)

  • KutuZ1

    KT-1042

    SKU
    KB-NOTE-A5
    Qty
    3
    Postcode
    (empty)

    A5 dot notebook

    Held: missing field

  • KutuZ5

    KT-1043

    SKU
    KB-LAMP-02
    Qty
    1
    Postcode
    10115

    Clamp desk lamp

    Ready (simulated)

  • KutuZ2

    KT-1044

    SKU
    KB-CANDLE
    Qty
    4
    Postcode
    75011

    Fig wax candle

    Ready (simulated)

  • KutuZ4

    KT-1045

    SKU
    KB-MUG-01
    Qty
    6
    Postcode
    1050

    Stoneware mug

    Held: out of stock

  • KutuZ4

    KT-1046

    SKU
    KB-NOTE-A5
    Qty
    5
    Postcode
    08001

    A5 dot notebook

    Ready (simulated)

  • KutuZ5

    KT-1047

    SKU
    KB-LAMP-02
    Qty
    1
    Postcode
    10115

    Clamp desk lamp

    Held: duplicate

  • KutuZ3

    KT-1048

    SKU
    KB-TOTE-S
    Qty
    2x
    Postcode
    06420

    Canvas tote, small

    Held: invalid quantity

Step inspector

Validate, order KT-1042

Example from the documented run.

Input

{
  "orderId": "KT-1042",
  "email": "deniz.aral@example.com",
  "sku": "KB-NOTE-A5",
  "item": "A5 dot notebook",
  "qty": 3,
  "shipTo": {
    "postcode": "",
    "zone": "Z1"
  }
}

Rule

required = [orderId, email, sku, qty, shipTo.postcode, shipTo.zone]
empty required field    -> hold "missing_field"
qty !~ /^[1-9][0-9]*$/  -> hold "invalid_qty"
all checks pass         -> route to Deduplicate

Output

{
  "valid": false,
  "errors": [
    "shipTo.postcode is empty"
  ],
  "route": "exception",
  "reason": "missing_field"
}

demo stock

SKUItemStartAvailable
KB-TOTE-SCanvas tote, small64
KB-NOTE-A5A5 dot notebook105
KB-LAMP-02Clamp desk lamp32
KB-CANDLEFig wax candle84
KB-MUG-01Stoneware mug22

Run log

  1. t+28Team alert composed for 4 unresolved exceptions. Not sent: prototype.
  2. t+27KT-1048 held at Validate: qty "2x" is not a whole number.
  3. t+25KT-1047 held at Deduplicate: same key as KT-1043.
  4. t+22KT-1046 reserved 5 of KB-NOTE-A5; ready (simulated).
  5. t+18KT-1045 held at Stock check: needs 6, 2 available.
  6. t+14KT-1044 reserved 4 of KB-CANDLE; ready (simulated).
  7. t+10KT-1043 reserved 1 of KB-LAMP-02; ready (simulated).
  8. t+06KT-1042 held at Validate: shipTo.postcode is empty.
  9. t+04KT-1041 reserved 2 of KB-TOTE-S; ready (simulated).

Exception queue

Retry re-runs an order from the station that held it. A third failed attempt escalates it. Only KT-1048 has a demo fix.

OrderReasonHeld atAttemptsStatusActions
KT-1042Missing fieldshipTo.postcode is emptyValidate1 of 3Held: missing field
KT-1045Out of stockneeds 6, 2 availableStock check1 of 3Held: out of stock
KT-1047Duplicatesame key as KT-1043Deduplicate1 of 3Held: duplicate
KT-1048Invalid quantityqty "2x" is not a whole numberValidate1 of 3Held: invalid quantity

Team alert preview

#ops-exceptions (simulated)Kutu workflow

Kutu order exceptions: 4 unresolved.

  • Missing field (1): KT-1042
  • Out of stock (1): KT-1045
  • Duplicate (1): KT-1047
  • Invalid quantity (1): KT-1048

Not sent: prototype. Composed at t+28.

A production build starts with three decisions.

  • SourcesWhere orders come from, and the exact shape each payload takes when it arrives.
  • RulesWhich problems hold an order, which get an automatic fix, and how many retries a failure earns.
  • AlertsWhich channel the team watches, and who owns each reason in the queue.
Talk to Minimolo about a workflow

Minimolo designs and builds n8n workflows for operations teams. Scope, rules and timeline are agreed in writing first.