updresser

How we count

The worn signal — methodology

How updresser measures whether a recommended piece was actually worn, what a partner can see, and what can never be seen.

Engine constants on this page: 14-day attribution window · worn within 30 days · k-anonymity floor 1,000 — read from src/engine/attribution.ts at build time.

What we measure

One chain, five links: an item is recommended to a person inside updresser → she taps through to a shop → a matching piece arrives in her wardrobe → she wears it → she wears it again. Every link is her own record: the click she made, the piece she scanned or added, the days she logged wearing it. Nothing is inferred from a bare purchase, and nothing is bought from anyone else.

The attribution window

A piece counts as arrived on our suggestion when it is added within 14 days after a click whose query plausibly names it (a conservative name-and-category match — a black blazer clicked, a black blazer added). A piece added later, or one that no click describes, is not attributed. The window is a constant in the engine, tuned only by a recorded decision, never silently.

"Worn" means worn within 30 days

A piece is worn when her own wear record says so — the daily mirror photo or a "wear it today" tap — and it is counted as worn-within when that happens within 30 days of arrival. The count UNDER-counts by construction: the record keeps the latest wear, so a piece worn early and again later can fall outside the window. Under-counting is the safe direction for a number a partner will one day pay on.

What a partner can ever see

A share, never a person: "N % of the people who bought it wore it within 30 days". The share is reported only when at least 1,000 people are in the number (the k-anonymity floor); a cohort that could be narrowed below 1,000 is not reported at all. Never who wore it, never when, never what else she owns. We do not sell user data — not de-identified, not anonymised, not bundled; we sell the outcome.

The hard guard

The money follows the advice; the advice never follows the money. Attribution lives outside the styling engine's scoring tree and outside ranking, and a build-time test fails the build if that separation is ever crossed. What updresser suggests is never influenced by what a partner pays.

Consent and status

Only consented usage records count, and a person can withdraw that consent in the app at any time. Today no partner is billed on the worn signal; the method is published before the first contract so that it can be audited before it is sold. The counting code is the method — it lives in the open engine module named below, and the numbers on this page are read from it when the page is built.

Auditing it. The funnel is one pure function, attributionFunnel, with unit tests beside it; the k-anonymity rule is wornSignalReport in the same module. Ask us for the code path and the tests — the answer is the same file.

Open the Library in updresser →