▼ DOC 07

Settings

Bench setup — formulas, hardware registries, costs, brand voice, integrations

The setup that drives every batch downstream. Settings is laid out as ten numbered sections, ordered roughly “essential to optional” — formulas + pitcher up top, branding + integrations toward the bottom. Hardware sections (wicks → lids → containers) sit in dependency order: containers reference your wick + lid registries, so define those first.

The eleven sections

  • 01 · Wax → Fragrance Ratio — My Waxes + My Formulas + the (oz wax × load %) = oz fragrance math + batch-size presets.
  • 02 · Pour Pitcher — your pitcher capacity presets.
  • 03 · Wick Registry — wicks you actually buy.
  • 04 · Lid Registry — lids you actually buy.
  • 05 · Container Registry — jars + tins + refills, referencing wicks + lids by ID.
  • 06 · Costs & Thresholds — default oil buy size, low-stock threshold, oz vs gm, wick-sticker line item.
  • 07 · Brand Dispatch — brand name, AI naming voice, recipe-share tagline.
  • 08 · Square Integration — OAuth + product mapping + Sync Now.
  • 09 · Shopify Integration — OAuth + product mapping + Sync Now.
  • 10 · Inventory Sync — source-of-truth picker + per-channel inbound/outbound + cadence.
  • 11 · Account Security — TOTP 2FA enable / disable (Basic + Pro). Step-up on every sign-in.

01 · Wax → Fragrance Ratio

The single most important card on the page. Three things live here: the waxes you buy, the formulas you reuse, and the BLNDR-wide ratio that drives every recipe.

My Waxes

  1. 1

    Add a wax

    Pick from the wax catalog (auto-fills the tech sheet — melting point, pour temp, cure time, recommended load range).

  2. 2

    Set the actual price you pay

    Per-pound cost. Drives $/lb in COGS — list price is fine for a quick start, but real margin needs your real wholesale price.

  3. 3

    Pin a default

    Click the on a row. The Mixer and Batch Planner both pre-select it on cold start.

My Formulas

A formula is a saved (wax + load %) pair you reuse. The Batch Planner reads from this list for its formula dropdown — useful when you pour the same wax+load combo across many recipes (e.g., “Coconut Apricot at 8%”).

  1. 1

    Add a formula

    + ADD A FORMULA → pick a wax → enter load % → name it → save.

  2. 2

    Pin a default

    Star a row. The Batch Planner picks it automatically when you start a new batch.

  3. 3

    Remove a formula

    The × button flips to DELETE? for 3 seconds. Click again to confirm.

    NOTE
    Two-step inline confirm instead of a native window.confirm() because iOS Safari can silently suppress confirm dialogs in some contexts — a real bug that bit a user once.

═ THE FORMULA ═ (the master ratio)

The big horizontal equation card: RECIPE RATIO BASE × FRAGRANCE LOAD = FO PER RECIPE.

  • RECIPE RATIO BASE — the oz of wax every recipe is built around (default 1 oz). Change it and every recipe scales with it.
  • FRAGRANCE LOAD — slider, 1–40%. Soaps + salves use much higher loads than candles; even within candles a maker may push past the wax's stated max for stronger throw. Min/max from the wax record show as a recommendation — flagged when exceeded but never enforced.
  • FO PER RECIPE (DERIVED) — the output number CHANDLER + the Mixer reference when scaling.

The card includes a plain-English readout below — “Every recipe will tell you to pour X oz of fragrance oil per Y oz of wax. Drop the load to 8% and it becomes…” — useful for sanity-checking the math.

Batch Size Presets

Quick-pick numbers shown when planning a batch (each = how many containers in one pour). Click an existing chip to remove it; click + to add a new one. Pick the counts you actually pour (6, 12, 24…) so you're not re-typing every time.

02 · Pour Pitcher

The capacity (oz) of the melting pitchers you actually use. Multiple presets supported — the Batch Planner's pitcher-size dropdown reads from this list.

  1. 1

    Pick or add a capacity

    Default presets: 40 / 60 / 80 / 100 oz. Click a preset to make it your active size, or use + Add to enter a custom number.

  2. 2

    Remove a preset

    Click the × on any preset chip.

TIP
If you use both a 64 oz and a 100 oz pitcher for different batch sizes, save both — the Batch Planner's pitcher-size input lets you pick at batch time without retyping.

03 + 04 + 05 · Hardware registries (Wicks → Lids → Containers)

HEADS UP — Order matters
Define wicks + lids beforecontainers. Container rows reference wick + lid IDs — the dropdowns in the container form only show entries you've already saved.

03 · Wick Registry

Wicks vary too widely across vendors for a centralized catalog to pay back, so users hand-enter what they own. Same row-shape as Lids.

  1. 1

    Click + Add

    Inline form. Required: Name (e.g., “ECO-12”).

  2. 2

    Optional fields

    Cost per unit, owned qty, restock threshold + restock_enabled, source URL.

  3. 3

    Save

    Row lands in the registry; available immediately in the Container form's default-wick dropdown.

04 · Lid Registry

Same shape as wicks. Name + optional cost / stock / threshold / URL.

05 · Container Registry

Two add buttons: + ADD for a regular container, + ADD REFILL for a refill SKU that inherits everything from a parent container.

  1. 1

    Click + ADD

    Opens the container form.

  2. 2

    Pick the default wick + lid from the dropdowns

    Both populated from your wick + lid registries (Sections 03 + 04). If either dropdown is empty, jump back, save what you need, then return — the dropdown updates immediately.

  3. 3

    Set wicks-per + lids-per

    Most jars are 1 + 1. Multi-wick vessels go up to 14×. The decrement multiplier lives on the container row, not on the wick/lid row — so a 14-wick container decrements 14 × wick.cost per unit produced.

  4. 4

    Fill in the rest

    • Name + size — “Status Jar 8oz”.
    • Fill weight — oz of wax it actually holds.
    • Cost — your buy price; in COGS.
    • Sell price + optional refill price.
    • Owned qty + restock threshold + restock_enabled.
  5. 5

    Refill rows

    + ADD REFILL creates a row that points at a parent container (inherits fill weight, default wick, default lid) but stores its own refill price. Refill containers in the Batch Planner show oil-amount + dedicated-pitcher controls instead of qty pills, and skip Square / Shopify outbound (the customer brought their own vessel).

06 · Costs & Thresholds

  • DEFAULT OIL BUY SIZE — pick from the catalog's known sizes (1 oz, 4 oz, 8 oz, 16 oz, 1 lb, 5 lb, etc.). Affects the cost-per-oz the Batch Planner uses for COGS.
  • LOW STOCK ALERT (oz) — global threshold for fragrance oils. Drops below this and an oil shows the amber Low badge in Owned Oils.
  • DEFAULT MEASUREMENTOUNCES or GRAMS. Affects the Batch Planner's per-pitcher breakdown unit and the refill row's oil-amount input.
  • OTHER EXPENSES → WICK STICKERS — adhesive disks at the bottom of every jar. One sticker per wick used; cost per sticker, stock on hand, warn-below threshold, reorder URL. Auto-applied to every batch — flows into COGS, decrements at commit.

07 · Brand Dispatch

  • BRAND NAME — appears on the public recipe-share page.
  • BRAND VOICE — the AI Namer's default voice. Pick from LUXURY — SOPHISTICATED, SNARKY — WITTY, BASIC — CLEAR, NOTE-BASED — DESCRIPTIVE. Per-name overrides happen in the Mixer; this just sets the default.
  • RECIPE SHARE TAGLINE — up to 100 chars. Shown at the bottom of every blndr.io/r/[shortId] share page. Default: “Crafted with BLNDR. Not alchemy, but close enough.”

08 · Square Integration

OAuth-based. Tokens are AES-256-GCM encrypted at rest.

  1. 1

    Click CONNECT SQUARE

    Bounces to Square's OAuth consent screen. Grant access to inventory + catalog read/write.

  2. 2

    Land back at /settings?square_connected=true

    The card flips to “Connected”. A wizard launcher appears: Map products.

  3. 3

    Map containers to Square catalog items

    For each saved container, pick the matching Square catalog item — that's the SKU finished candles will adjust on commit.

  4. 4

    Hit Sync Now (one-time pull)

    First sync mirrors current Square inventory into BLNDR's cache so the Stock Check + Owned Counts read accurately.

09 · Shopify Integration

Same OAuth model as Square. Tokens encrypted at rest. Adds two extras: GDPR webhook handlers (data-request, redact, shop-redact) and inventory backups.

HEADS UP — Sign into Shopify Admin BEFORE clicking CONNECT
Without an active Shopify session, the install never reaches BLNDR — Shopify shows a generic “Unauthorized Access” and bounces you out. This catches every new connector eventually.
  1. 1

    Open your Shopify Admin in another tab

    Make sure you're signed in to the same store you want to connect.

  2. 2

    Click CONNECT SHOPIFY in BLNDR

    OAuth consent screen appears with the requested scopes.

  3. 3

    Approve

    Land back in BLNDR. Map your containers to Shopify products (same picker as Square).

  4. 4

    Snapshot + sync

    The Shopify card has an “Inventory backups” subpanel — every sync auto-snapshots the current Shopify inventory so a bad sync is reversible.

10 · Inventory Sync (source of truth + cadence)

Once both integrations are connected, this is where you tell BLNDR which channel owns the inventory and which is a mirror.

  1. 1

    Pick the source of truth

    BLNDR, Square, or Shopify. The engine pulls from this channel on a schedule, decrements it on inbound sales (e.g., a Shopify order arrives), and pushes finished-candle counts to the mirrors when you Make Batch.

  2. 2

    Configure each channel

    One row per available channel with two toggles each:

    • Outbound — when ON, BLNDR pushes new counts to this channel.
    • Inbound — when ON, BLNDR receives new counts from this channel (via webhooks).

    The source-of-truth row is highlighted; you usually want its outbound OFF (BLNDR doesn't overwrite the source) and inbound ON (sales decrement the source). Mirrors typically have outbound ON (they receive) and inbound OFF (BLNDR ignores their changes).

  3. 3

    Pick a cadence

    How often the source-of-truth pull runs (every 15 / 30 / 60 minutes, etc.). Inbound webhooks fire in real-time on top of this — the cadence is just the safety-net poll for missed events.

  4. 4

    Save Sync Settings

    The button confirms with a green “Saved.” flash. Last synced timestamp updates as the engine runs.

TIP
If Square is your in-person POS source-of-truth and Shopify is your e-commerce mirror, the typical config is: Square outbound OFF + inbound ON (BLNDR receives sales), Shopify outbound ON + inbound ON (BLNDR pushes counts AND ingests web orders).

11 · Account Security (Basic + Pro)

Two-factor authentication for your account. Free tier sees an upgrade prompt — Basic and Pro can opt-in.

  1. 1

    Click ENABLE 2FA

    Routes to /auth/2fa/setup. A fresh TOTP factor is generated; you scan the QR with any authenticator app and enter the 6-digit code to confirm.

  2. 2

    Subsequent sign-ins step up

    After your password, you'll land at /auth/2fa/verify. Type the current code, you're back in. The challenge is required once per session.

  3. 3

    Disable requires a fresh code

    Click DISABLE 2FA on the Settings card. The button reveals an inline 6-digit input — entering a current code from your authenticator unenrolls the factor on the server. Without the code (or with an old one), the disable fails.

NOTE
Every enable / verify / disable event writes to security_audit_log so we have a forensic trail. See Account Security → User-side 2FA for the full flow.