Recommendation model

How LayerLab decides.

The engine is rule-based and explainable. Every fragrance is stored as a set of estimated materials carrying LayerLab's own volatility, potency, and dose-threshold data. Two fragrances are then evaluated as two films on skin over a wear day, and the output is a trajectory and a verdict rather than a score.

Where the data comes from →

01

Materials, not summaries

A fragrance is a set of materials with an estimated load. Each material carries a half-life that says how fast it leaves skin, a detection threshold that says how loud it is at a given load, a substantivity figure, and where known the dose above which its character changes into something else.

This matters because the interesting failures are material-level. Indole reads as jasmine at low load and as something much worse above threshold. Two fragrances that both look floral in summary can fail in ways a summary structurally cannot see, because the summary has already thrown the molecule away.

02

Magnitude is not character

What you smell is load measured against detection threshold, not load alone. A material at a tenth of the load can dominate one at ten times as much if its threshold is a thousand times lower.

perceived = remaining / odor_threshold

Potency is log-compressed and bounded between 0.5 and 5, because a material a million times below another's threshold does not smell a million times louder. Without this step an engine can tell you two fragrances share a character and still miss that one of them will simply erase the other.

03

Two sprays are not one blend

Each fragrance keeps its own material set through the whole computation. They are never averaged into a single profile, because averaging is what produces the false claim that a blend has one settled character.

remaining(t) = load × exp(-ln2 × t / half_life)

Every pair is evaluated at ten minutes, one hour, three hours, and six hours. At ten minutes you smell both openings. At six hours you smell whichever base outlived the other. The honest output is that path, so that is what the app shows.

04

Failures are non-monotonic

When the combined load of a material across both fragrances crosses its threshold, its character switches and the blend is penalised. Neither fragrance has to be over on its own - that is exactly the case a smooth scoring function over a continuous variable can never catch.

  • Caused by layering - neither side was over alone. Full weight.
  • Made worse by layering - one side was already over. Half weight.
  • Already present - one side was over and the other adds none. Reported, but not charged against the pair.

Context moves the threshold too. Thiols that stay bright in a citrus opening turn feral over a warm amber base, so the presence of amber-woods lowers the dose at which a thiol flips. Same material, opposite result, depending on what it is sitting over.

05

Rules between material classes

Three kinds, and they do different jobs. Reinforcing pairs are the only thing that can earn a recommendation. Masking pairs mean the quieter side stops contributing. Clashing pairs are a hard rejection.

  • Reinforces - amber-woods with musk, vanilla with cured tobacco, rose over oud, milky fruit with cut stem.
  • Masks - amber-woods bury a citrus opening within the hour; burnt sugar swallows green sap.
  • Clashes - aldehydic soap over cured tobacco, sulfur over phenolic smoke, roasted material over sea air.

A clash needs a higher presence threshold than a hint, because a trace of one material should not veto an otherwise sound pairing.

06

The verdict is absolute, not relative

Verdicts are decided per pair against fixed criteria. Nothing is graded on a curve against the rest of the catalogue, and nothing is truncated into a recommendation because the list looked empty.

  • Not recommended - a severe threshold flip, a clashing pair, or one fragrance more than twice as loud as the other at two or more checkpoints.
  • Workable with care - a milder flip, a masking pair, one lopsided checkpoint, or uncomfortably high combined projection.
  • Recommended - none of the above, and at least one reinforcing pair, and both fragrances holding at least a fifth of the blend at two or more checkpoints.

That last line is the load-bearing one. A recommendation requires positive evidence rather than the mere absence of failure, which is what makes "this fragrance has no good partner" a reachable answer. The goal selector only reorders candidates that already earned their tier.

What this model still cannot do

Stated plainly, because a layering engine that hides its limits is not worth trusting.