▼ DOC 02

Mixer

The slider-based recipe scratchpad — where every blend starts

The Mixer is the engine. You add up to 10 fragrance oils, set their absolute fragrance amounts in oz (sliders are oz, step 0.01), pick a wax + load %, name the blend, and save. Three things help you along the way: the Pairings panel below the scratchpad, the live Scent Profile bar, and the AI Namer.

Cold start (no oils yet)

Three paths from an empty bench:

  1. 1

    Pick a starter blend

    Six pre-built starter recipes at the top. Click one and the scratchpad fills with it.

  2. 2

    Tell Chandler what you want

    Type a vibe (“rainy bookstore”, “fall apple orchard at dusk”) into the compose box. Chandler returns a recipe + a shopping list of any oils you don't own. Click LOAD INTO MIXER.

  3. 3

    Build it manually

    Click + ADD OIL, search by name or family. Library oils surface first.

Building a blend

  1. 1

    Set each oil's oz

    Each oil row has a slider in oz (step 0.01). You're setting the absolute fragrance amount to pour, not a percentage. The TOTAL chip at the bottom reads TOTAL: X.XX oz / Y.YY oz plus one of:

    • ● LOCKED — sum matches the load budget (within 0.005 oz); save enabled.
    • ● OVER BY Δ oz — sum exceeds the budget; save disabled.
    • ▼ ADD Δ oz — sum under the budget; save disabled.

    The load budget (foBudgetOz) is derived from your active wax × load %: wax_oz × load_pct / 100.

  2. 2

    Pick a wax

    Required before save. Dropdown shows your saved user_waxes. Defaults to the wax pinned in Settings.

  3. 3

    Name the blend

    Type a name OR click ✨ NAME IT for AI suggestions.

    TIP
    Click SAVE without a name and the namer auto-opens. Pick a candidate and the save fires automatically with the chosen name.
  4. 4

    Save (four flavors)

    • SAVE BLEND — primary commit, routes to Recipes after.
    • + START ANOTHER — saves, clears the scratchpad, stays in Mixer.
    • SAVE AS VARIANT — POSTs a new recipe with (variant) suffix. Doesn't overwrite the parent.
    • ↻ REMIX — REGENERATE AMOUNTS — does NOT save. Rerolls the oz amounts on the current oils (random 0.5–1.5× weight per oil, normalized so the sum equals foBudgetOz, last oil absorbs rounding) so you can re-explore.
NOTE
Opening a recipe whose baseline wax differs from your current settings baseline auto-scales the displayed oz to your baseline — so a recipe saved at 50 oz baseline opened in a 10 oz session shows correctly-scaled values. Component state is { oil, ozAtBaseline }; there is no percentage field anywhere — every render-time percent is derived at the boundary.

The Pairings engine

Below the scratchpad. Updates as you add or remove oils. Each card shows a color-coded match score (emerald ≥70, green ≥50, amber ≥30), the oil name, why it scored well, and a notes preview with matched notes highlighted. Click + ADD TO BLEND to drop it in.

  • LIBRARY ONLY checkbox — limits suggestions to oils you own.
  • Mode toggle — pair to the last-selected oil vs. the whole composition.
  • — reroll suggestions deterministically.

The Scent Profile bar

Sits between the family tags and the oil rows. Three colored segments — yellow (top), rose (middle), amber (base) — sized by your blend's current ratio. Updates in real time as you slide. Hidden when none of the oils carry note data.

The AI Namer

Click ✨ NAME IT to open. Pick voice + modifier, click ✨ GENERATE, get three candidates. Click any to load. Re-roll for fresh attempts.

Voices (7): Signature, Basic, Note-based, Luxury, Ampersand, Apothecary, Auto.

Modifiers (10): Straight, Snark, Romantic, Playful, Nostalgic, Gothic, Decadent, Rustic, Botanical, Culinary.

NOTE
Voices are curated for candle naming specifically — no perfume-coded or book-coded options. Numbered names like “Cedar No. 04” are intentional (Voluspa, Boy Smells, etc. all use this convention).