Inputs in, ranked fits out.
The audit takes two inputs — fourteen nights of biometric signal and ten quiz answers — and produces a ranked list of up to five mattresses with a confidence number on each. Every audit reports its own per-phase wall clock at the top of your results — the dwell you see on the analysis screen is review time, not compute time. Same inputs, same audit, every time.
No machine learning, no opaque ranking. Just a weighted fit between your spec vector and each mattress's spec vector, plus a confidence model that tells you how constrained the answer is.
Eight dimensions.
Both you and every mattress in the catalogue are described by the same eight-dimensional spec vector. Each dimension is normalised to a 0–1 scale, except firmness (1–10) and height (cm). Matching is a weighted L2 fit across these eight features; categorical attributes (sleep position support, build, materials, price band) filter the catalogue before the fit runs.
| dimension | unit | your value | weight |
|---|---|---|---|
| thermal | 0–1 (cooler→warmer) | 0.78 | 0.18 |
| firmness | 1–10 | 6.5 | 0.16 |
| pressure relief | 0–1 | 0.82 | 0.15 |
| motion isolation | 0–1 | 0.74 | 0.12 |
| edge support | 0–1 | 0.61 | 0.08 |
| response | 0–1 (slow→fast) | 0.69 | 0.08 |
| height | cm | 28 | 0.05 |
| zoning | 0–1 | 0.71 | 0.05 |
Construction details (latex/foam/coil percentages), trial & warranty terms, and durability proxies sit alongside the vector as categorical metadata — they inform governance and tie-breakers but don't enter the fit distance. Full catalog.json for the catalogue side; per-user vector lives only in the audit session.
Parse → weight → score → rank.
01 · parse
Fourteen nights of wearable events are aggregated into a single biometric profile: median RHR, HRV reserve, skin-temperature delta, sleep-stage ratios, latency, wake count. ~1,200 events collapse to ~30 numbers.
02 · weight
The biometric profile plus the ten quiz answers produce a list of findings— observations like "elevated overnight skin temperature delta" or "side-dominant pressure profile." Each finding bumps one or more spec-vector weights up or down.
03 · score
For each of the 32 SKUs in the catalogue, we compute a weighted L2 distance between your spec vector and the mattress's spec vector:
fitᵢ = 1 − √( Σd wd · (ud − si,d)² )
04 · rank
Top fits by score (up to five), tie-broken on price-per-fit-point and trial generosity, with a governance pass that caps two variants per brand and suppresses near-duplicates. The remaining SKUs are kept in the audit blob but not shown by default.
How constrained is the answer?
Confidence is a separate number from fit score. It answers a different question: given the data we have, how tightly does it constrain the recommendation? Three multiplicative factors:
- data_volume — log saturation over nights of biometric data. ~0.7 at seven nights, ~0.9 at fourteen, approaches 1.0 by ~30. Zero for quiz-only audits.
- signal_agreement — starts at 1.0. Each unresolved disagreement between a biometric signal and a quiz answer pulls it down by 0.20 (floor 0.40). Each converged finding (both signals push the same feature in the same direction) adds 0.04, capped at +0.15.
- completeness — penalises missing high-leverage quiz fields (sleep position, build, budget, partner). Each missing field multiplies the score by 0.85.
Quiz-only audits fall back to 0.5 × completeness, so a complete quiz with no wearable lands at ~0.50; an incomplete quiz lands below. Bands for display: low 0.50–0.65, med 0.65–0.80, high 0.80–1.00.
Same inputs, same audit.
The engine is deterministic. No randomness, no A/B-tested rankings, no personalised weights that drift over time. If you re-run the audit with the same fourteen nights and the same quiz answers, you'll get the same five mattresses in the same order with the same confidence.
That's deliberate. The point of the audit is to be inspectable — you can open any rank's "why this" panel and trace the recommendation back to specific findings and weights.
Updated as the catalogue expands. Currently Melbourne, Sydney, Byron Bay, Adelaide brands. Brisbane + Perth in progress.