Aurum Jewelry
Retailer Console
0 real Fit Requests in this store + 240 synthetic demo requests · 161 SKUs in the catalog
Synthetic demo data. Funnel, hearted→bought, Return-Risk and recipient-mix numbers include 240 seeded, generated Fit Requests so the console has volume for the demo. They are not real shoppers. Real requests are counted on every card under "Real only". Undertone Coverage uses the live catalog only.
Fit Requests
Completion rate
56%
135 of 240 sent requests completed
Real only: 0 of 0
How this is calculated
completion = completed / sentCompleted = the recipient sent their hearts (status completed).
Conversion
Hearted → bought
58%
of givers whose recipient hearted a shortlisted piece bought a hearted piece (56/97)
Real only: 0/0
How this is calculated
hearted→bought = completed requests where a hearted shortlist piece was bought
/ completed requests with ≥ 1 hearted shortlist pieceCatalog gap
Cool-undertone coverage
37%
Only 60 of 161 SKUs suit a cool undertone estimate
How this is calculated
coverage(tone) = SKUs whose metal is "recommended" for tone / all SKUsRule table: server/verticals/jewelry.ts (jewelryRules.metalFit), sourced in docs/research/jewelry_rules.md.
Estimate
Return cost avoided
$93
2.5 fewer expected returns on 71 gifts (11.0% → 7.5%)
Real only: $0 on 0 gifts
How this is calculated
Default inputs (11% baseline, $37 per return, ±50% score effect). Edit them in the Return-Risk card below.
Fit Request funnel
Sent → opened → completed → purchased
- Sent240 · 100%
- Opened192 · 80% of prev.
- Completed135 · 70% of prev.
- Purchased71 · 53% of prev.
Real only: sent 0 · opened 0 · completed 0 · purchased 0
How this is calculated
sent = Fit Requests created
opened = status opened, consented, tried_on, completed or deleted
completed = status completed (hearts sent)
purchased = completed AND a shortlisted piece was bought as a gift
step rate = stage / previous stagePurchases come from the "Buy as a gift" checkout (POST /api/retailer/purchase): only pieces on that request's shortlist count, and the event stores no recipient data. Requests that expired unopened: 46.
Synthetic requests follow stated demo assumptions: open 82%, complete 71% of opened, heart 30% per piece (55% when the metal suits), buy 62% when something was hearted. Scores use the published fit-v1.1 weights. Seeded, so the same every time.
Hearts vs purchases
Did they buy what was loved?
- Bought pieces that were hearted
- 79%
- 56 of 71 gifts · real 0/0
- Purchase rate after a completed request
- 53%
How this is calculated
bought were hearted = bought pieces the recipient hearted / bought pieces
purchase rate = purchased / completedUndertone Coverage
Who can your catalog suit?
Warm
48%
77 / 161 SKUs
Neutral
100%
161 / 161 SKUs
Cool
37%
60 / 161 SKUs
Gap
Only 37% of the catalog suits a cool undertone. Watches: 29% (7 of 24).
Add 10 watches in white gold, silver, platinum to reach 50% for cool-undertone recipients.
| Category | SKUs | Warm | Neutral | Cool |
|---|---|---|---|---|
| Earrings | 48 | 44% | 100% | 40% |
| Necklaces | 41 | 56% | 100% | 34% |
| Rings | 26 | 46% | 100% | 38% |
| Bracelets | 22 | 41% | 100% | 45% |
| Watches | 24 | 50% | 100% | 29% |
How this is calculated
suits(sku, tone) = jewelryRules.metalFit(sku.metal, tone).strength == "recommended"
coverage(tone) = |SKUs that suit tone| / |SKUs|
gap = lowest-coverage tone, then its lowest category
to add = ceil((50% × total − count) / (1 − 50%))Warm: yellow and rose gold. Cool: white gold, silver, platinum. Neutral: every metal (docs/research/jewelry_rules.md, Table 1). No metal is ever "avoid", so a piece outside a tone is still acceptable; recipients' hearts carry half of every Fit Score. Undertone is an estimate the recipient can override.
Return-Risk estimate
Before and after Fit Requests
71 gifts bought through a Fit Request (0 real). Estimate from published benchmarks, not a measured return rate.
- Before
- 11.0%
- 7.8 returns · $289
- After
- 7.5%
- 5.3 returns · $196
- Avoided
- $93
- ≈ $1,303 per 1,000 gifts
How this is calculated
P(return) = baselineRate × clamp(1 + maxReduction × (50 − score) / 50, 1 − maxReduction, 1 + maxReduction); expected cost = P(return) × costPerReturnBefore = every gift returns at the baseline rate (a gift chosen without a Fit Request scores 50). After = the mean of P(return) over the Fit Scores of the pieces actually bought.
- Baseline: market.md K3 (S31, Eightx 2026): fine jewelry online 8–15%, midpoint 10–12%.
- Cost: market.md K6 (S5, Eightx 2026): jewelry and accessories $37 mid. Markdown loss on resale is excluded (market.md K5 / S31), so the cost is conservative.
- The score effect (score 100 halves the risk, 0 raises it by half at ±50%) is our assumption; no source measures it.
- Benchmarks are US 2025–2026 secondary syntheses (grade C): directional, not a forecast.
Recipients, in aggregate
Who completed a Fit Request
Undertone (estimate or recipient's choice), n = 135
- Warm30%
- Neutral41%
- Cool28%
Face shape estimate, n = 135
- Oval30%
- Round20%
- Square11%
- Heart-shaped14%
- Oblong10%
- Diamond-shaped9%
- Triangle-shaped6%
How this is calculated
Completed requests only. A breakdown appears once at least 5 requests are in it; any group under 5 shows as "< 5", and if only one group is hidden the next smallest is hidden too, so it cannot be worked out by subtraction. No photo, color value or per-person estimate ever reaches this page.
Auto-Ingest
Ingest a store
Paste a store URL. GiftFit picks the lowest tier that works, reads public product data only and builds the catalog the Fit Engine scores.
How this is calculated
Tier 1 platform API → Tier 2 sitemap + JSON-LD → Tier 3 headless render + grounded extraction; the lowest tier that works wins (docs/ingest-policy.md).
complete rows = SKUs with metal AND price AND images / all SKUsPoliteness is enforced in code: robots.txt first, ≤ 1 request/s per host, allow-listed hosts only. In fixture mode every page comes from self-authored fixtures on reserved .test hosts.
Script tag
Add Gift it right to any product page
One line before </body>. The button appears only on pages whose product is in your ingested catalog.
<script src="https://your-giftfit-app/giftfit.js" data-store="aurum" async></script>How this is calculated
The script finds the product (data-giftfit-sku, JSON-LD Product or Open Graph), asks /api/retailer/lookup whether it is in the catalog, then adds the button in a shadow root so the store's CSS and ours never mix. The Giver Panel opens in an iframe from this app; the two talk only through origin-checked postMessage, and no token, request id or recipient data crosses the frame.
Cross-origin demo: GIFTFIT_ORIGIN=https://your-giftfit-app node client/plugin/demo/serve-host.mjs, then open http://127.0.0.1:4310/.
Privacy: this console shows aggregates only. It never receives recipient photos, colors, CIELAB values, face measurements or any one person's estimate. Aurum Jewelry is a fictional demo store. Generated Tue, 03 Nov 2026 06:32:17 GMT.