The selection engine

How a message gets selected.

On every page load: eleven signal families generate candidates, eligibility filters them, weighted scoring ranks them. One wins per slot — in under a hundred milliseconds.

Book a demo
Selection/Skelbo Jacket — BlackLive
PDP·primary slot4 candidates · 1 selected
CART_PRESSURESelected
22 in carts last 24h
0.87
ATTENTION
89 viewed last 7d
0.74
SCARCITY
Only 4 left
0.71
MOMENTUM
Demand surging
0.65
POST/bundle62ms200 OK
PDP · primaryPLP · tileCart drawerSearch
The pipeline

Thirteen steps. Under a hundred milliseconds.

Every Flockr request runs the same pipeline. Read the demand state of every product on the page, generate candidates from eleven signal families, filter, score, allocate. Render, return, emit analytics — all inside a p50 of around 62ms.

01~3ms

Normalise

Parse the request. Build slot and surface context.

02~14ms

Read

Fetch demand state from DynamoDB.

03~8ms

Generate

Create candidates from 11 signal families.

04~5ms

Filter

Eligibility: placement, journey, freshness.

05~12ms

Score

Two passes. Best message, then best products.

06~7ms

Allocate

Assign slots. Apply diversity. Rotate ranks.

07~13ms

Render

Render messages. Return. Emit analytics.

p50 latency
62ms
median request
p95 latency
187ms
95th percentile
Error rate
<0.1%
trailing 30 days

Same pipeline. Every request.

Step 1 — Eligibility

Not every signal fits every surface.

Every signal family has a surface-fit score per surface — the first filter every candidate passes through. Scarcity makes sense in cart drawer; less so on a category browse. Intent is strong on listing pages; weak on PDP. Rank messages qualify by category position, not by score.

Engine/Surface-fit matrixexample values
Strong fit0.9 – 1.0Moderate0.7 – 0.89Weak0.6 – 0.69Excluded< 0.6Rank-qualified
Family
PDP
PLP
Cart drawer
Cart page
Search
attention
0.90
0.92
0.88
0.85
0.92
intent
0.45
0.90
0.88
0.88
0.94
purchase
1.00
0.96
0.96
0.94
0.84
scarcity
0.98
0.70
1.00
1.00
0.72
momentum
0.91
0.88
0.78
0.60
0.90
rank
rank
rank
rank
rank
Surface-fit values feed directly into message scoring. A candidate with surface-fit below 0.6 is dropped before scoring. Rank-based families qualify by category position rather than score, and rotate alongside any other eligible messages on the same surface. Example values shown — each client is tuned with AI and ML.
Step 2 — Journey stage

Same product. Different stage.

The engine knows where each shopper is in their journey — browsing, comparing, deciding. The same set of candidate messages gets scored differently depending on the stage. Cart pressure wins at decision time. Best-seller proof wins during early exploration.

EvaluatingBerghaus Skelbo Jacket — Black· same candidates, three contexts
Browsing
RANKWins
#3 Best Seller in Outerwear
0.91
Also evaluated
attention
0.78
scarcity
0.62
cartPressure
0.41
Comparing
ATTENTIONWins
89 viewed last 7d
0.88
Also evaluated
scarcity
0.74
rank
0.71
cartPressure
0.64
Decided
CART_PRESSUREWins
22 in carts last 24h
0.94
Also evaluated
scarcity
0.86
attention
0.62
rank
0.55

Same engine. Different moments.

Steps 3 & 4 — Scoring

Two passes. One score.

The first pass picks the best message for each product. The second picks which products earn slots across the page. Separating them keeps the page commercially balanced — a strong product with a moderate message can still earn a slot ahead of a weak product with a strong message.

Scoring/Message weightspass 1 of 2

Message scoring weights

Picks the best message for each individual product.

proofStrength
0.30
surfaceFit
0.20
freshness
0.16
journeyFit
0.12
confidence
0.10
clarity
0.08
placementFit
0.04
Total — 7 componentsΣ 1.00
Scoring/Product weightspass 2 of 2

Product scoring weights

Picks which products earn slots on multi-slot surfaces.

bestMessageScore
0.50
proofStrength
0.18
relevanceScore
0.16
contextualBoost
0.10
diversityScore
0.06
Total — 5 componentsΣ 1.00
Why two passes

Picking the best message for one product (pass 1) and picking which products earn slots across the page (pass 2) are different decisions. Separating them means a strong product with a moderate message can still earn a slot ahead of a weak product with a strong message — which keeps the page commercially balanced, not just message-led.

Steps 5 & 6 — Allocation

Score wins. With limits.

Three rules sit on top of raw scoring. Slot budgets per surface. Diversity gates to prevent one signal type monopolising a page. Rank-message rotation so shoppers see both a rank claim and a scored signal — never just one.

Allocation

Slot budget & diversity gate

Each surface has a slot budget — PDP gets one primary slot, PLP gets one per tile. A diversity tolerance prevents a single signal family from monopolising the page when multiple candidates share that family.

Diversity tolerance2 of the same family / page
Rotation

Rank rotation

Best Seller, Most Viewed, and Most Reviewed messages qualify by category position — not by score. When a product is eligible for both a rank message and a scored signal, they rotate — each shown for a few seconds — so shoppers see both proofs.

Rotation interval5s · shared slot
Tunable

Per-client overrides

Every threshold, weight, and eligibility rule above is configurable per client. Sensitive on a small catalogue, stricter on a large one. Defaults are reasonable; tuning earns the last few percent.

Configurable values~120 per client
Continuously optimised

Defaults that learn.

Every weight, eligibility value, and journey-stage score on this page is a starting default. From go-live, Flockr observes which messages drive engagement on which surfaces and in which journey stages, and adjusts continuously. AI and ML close the gap between sensible defaults and the right values for your catalogue.

Engine/Message weights/Live tuningAI tuning
Message scoring weights forDripmoda— defaults at go-live vs ML-optimised values today.8 weeks observation·updated every 24h
WeightDefaultChangeOptimised
proofStrength
0.30
10%
0.27
surfaceFit
0.20
15%
0.23
freshness
0.16
13%
0.18
journeyFit
0.12
17%
0.14
confidence
0.10
20%
0.08
clarity
0.08
13%
0.07
placementFit
0.04
25%
0.03
The model learned that for Dripmoda's catalogue, surface fit and freshness matter more than raw proof strength.
Adjustments:147·Lift:+8.4%
See it work

Watch a message get selected.

30-minute walkthrough. We'll trigger a live request on a catalogue like yours and walk through every step of the selection — eligibility, journey-stage scoring, allocation, rotation.

Book a demo
SelectionLive
CART_PRESSURESelected
22 in carts last 24h
0.87
ATTENTION
89 viewed last 7d
0.74
SCARCITY
Only 4 left
0.71
POST /bundle62ms200 OK