§ 01 · overview

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.

§ 02 · the spec vector

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.

dimensionunityour valueweight
thermal0–1 (cooler→warmer)0.780.18
firmness1–106.50.16
pressure relief0–10.820.15
motion isolation0–10.740.12
edge support0–10.610.08
response0–1 (slow→fast)0.690.08
heightcm280.05
zoning0–10.710.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.

§ 03 · four phases

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 score for SKU i, lower distance = better fit
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.

§ 04 · confidence model

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:

confidence = data_volume · signal_agreement · completeness
  • 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.

§ 05 · determinism

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.

document
Engine v0.4.1 · catalogue 32 SKUs · AU only

Updated as the catalogue expands. Currently Melbourne, Sydney, Byron Bay, Adelaide brands. Brisbane + Perth in progress.