The fragrance catalog has thousands of oils across half a dozen vendors (we call them houses). Your library is the subset you actually own or care about. Mixer search surfaces your library first; recipe ingredients resolve against it; restock alerts target it; the Oil Engine watches it for vendor discontinuations and cross-house duplicates.
The page at a glance
Three layers stacked from the page header down:
- Top action —
+ IMPORT OILin the page-header actions row (for hand-entering an oil that isn't in any vendor catalog yet). - Filter row —
All Houseschips on the left,Search…input on the right. - Selection bar — appears when there are unowned oils visible:
Select all N unowned, an owned-count, and aClear selectionbutton after you've selected anything. - Card grid — 1 / 2 / 3 / 4-up depending on viewport. Each card is a single oil.
- Sticky save bar — slides up from the bottom whenever you have pending adds or removals. Houses the qty-input toggle + Save / Remove / Clear actions.
Browse + filter
- 1
Open Library → Oils
Sidebar →
Oil Library(URL:/library/oils). Open to every tier; the per-tier oil cap (10 / 25 / 100 / ∞) gates how many you can save. - 2
Pick a house (vendor)
Top filter chips.
All Housesis the default; click any vendor name (e.g.,CandleScience,The Flaming Candle) to scope the grid to that house only. Each house has its own brand color, applied to that vendor's card backgrounds — useful for visually scanning a mixed grid. - 3
Search by name OR note
The search box matches against both the oil name AND its top / middle / base notes. So typing
tobaccosurfaces every oil that has “tobacco” in its notes, even when it's not in the name (e.g., a “Library at Dusk” oil that lists tobacco as a top note).TIPSearch and house filter compose. Pick a house first to narrow the grid, then search inside it — useful when you're comparing similar SKUs across vendors. - 4
Read the cards
Each card is laid out top → bottom:
- Name + vendor name — color-coded by house. If the manufacturer (the actual perfumer / sub-brand) differs from the listing vendor, that name shows below in mute text.
- Note breakdown — top / middle / base notes laid out by category. On mobile, tap to expand; desktop shows them inline.
- Application tags —
CANDLE,WAX MELT,SOAPif the vendor publishes safety data for that use. - Spec tags —
PHTHALATE-FREEwhen the vendor certifies it. - State badges —
IN LIBRARYwhen you own it;WILL REMOVEwhen marked for removal but not yet saved.
The detail panel
Click anywhere on a card to open the full detail modal. It's the same modal whether you're browsing or already own the oil — just the bottom action button switches between Add to My Library and Remove from Library.
Sections you'll see (only the ones with data render):
- Header — name, vendor (linked to the source PDP), manufacturer if different.
- Notes — color-coded blocks: yellow top notes, rose middle notes, amber base notes.
- Price tiers — every size the vendor sells (1 oz / 4 oz / 16 oz / 1 lb / etc.) with both per-oz and total price columns. Sorted ascending by size.
- Details — flashpoint (°F), vanillin %, soy performance (1–3 stars), phthalate-free yes/no, Prop 65 required / not required.
- Applications — for each of candle / wax melt / bar soap: a SAFE/UNSAFE pill plus the vendor's recommended usage min–max range.
- Documents — direct links to the IFRA Certificate, Safety Data Sheet (SDS), and Allergen Statement when published. Open in a new tab.
Add one oil to your library
- 1
Open the card
Click the card to open the detail modal. (Or click the empty selection slot on the card to add it without opening details — more on that below.)
- 2
Click Add to My Library
Big hazard-orange button at the bottom of the modal. Adds the oil to
user_librariesfor your account immediately, with an oz quantity of 0. - 3
Set the quantity later
The card flips to
IN LIBRARY. To set the actual ounces you own, head to Inventory → Owned Oils — that's the qty-management surface. Or use the bulk flow below to set quantities at add-time.
Add multiple oils at once
The bulk flow is the fastest way to seed your library after signup, or restock after a big order.
- 1
Select the oils
Click the small selection slot on each card to mark it (the slot is the small box on the card, separate from the body — clicking the body opens the detail modal). Or use
Select all N unownedat the top of the grid to mark every unowned card visible at the current filter.TIPFilter by house first, then clickSelect all unownedto grab everything from one vendor. Useful when stocking up after a CandleScience order. - 2
Sticky save bar appears
The bottom of the page now shows a save bar: count of items, a toggle for the qty inputs, and a
Savebutton. - 3
(Optional) Click Add quantities
Toggles a per-oil oz input row for every selected oil. Type the ounces you own. Skip any row to save it with 0 oz (you can update later from Inventory).
- 4
Save
Click
Save. All selected oils land in your library at once with their entered (or 0) quantities. The selection clears.
Select all N unowned is filter-aware — it picks every unowned card currently visible. Switching the house filter and adding more works fine; the existing selection stays in memory until you save or clear.Remove oils from your library
- 1
Mark for removal
Click an owned card to open the detail modal →
Remove from Library. The card flips toWILL REMOVE(it's pending, not committed). To unmark, click the card again →Keep in Library. - 2
Bulk-mark by clicking owned cards
Same selection mechanic as the add flow, but on owned cards instead.
- 3
Confirm via the save bar
The save bar shows “N to remove”. Click
Removeto commit, orClearto abandon all the pending removals.
recipe_history for past usage is preserved.Import an oil that isn't in any vendor catalog
If a vendor we don't scrape (or a one-off custom blend you commissioned) sells an oil you want to use:
- 1
Click + IMPORT OIL in the page-header actions
Top-right of the Library page. Opens the import dialog.
- 2
Fill in the basics
Name, vendor, notes (top / middle / base), and any pricing or safety info you have. None of the document fields are required — leave them blank if you don't have an SDS link.
- 3
Save
The oil lands in the catalog AND your library at the same time. It's tagged with a manual-entry source so the daily scrape job won't overwrite it.
Oil Engine — duplicates + discontinued swaps
The Oil Engine handles two related problems: cross-house duplicates (the same oil sold by two vendors under similar names) and discontinued-oil swaps (vendor pulled the SKU; here's a replacement). It runs automatically after library changes and can also be triggered manually from the Inventory page's RUN ENGINE button.
Cross-house duplicates
When BLNDR detects two library entries that look like the same underlying oil sold by different houses:
- 1
The Oil Engine modal opens
Auto-fired when the dupe detector finds a candidate post-library-add. You can also trigger it manually with
RUN ENGINEon Inventory. - 2
Review the suspected pairs
Each pair shows: name match score, family match, side-by-side notes, and per-house $/lb pricing.
- 3
Choose
SAME OIL — KEEP BOTH— dismiss for 90 days. Useful when you're intentionally hedging vendors.SAME OIL — CONSOLIDATE— merge into the cheaper house's entry; the duplicate is removed.DIFFERENT OIL— dismiss permanently. Lands induplicate_dismissalsso the engine never asks again.
Discontinued-oil swap
Houses discontinue oils. BLNDR catches it on the next scrape and flags your library row.
- 1
Spot the DISC badge
Discontinued owned-rows show a hazard-stripe border +
DISCONTINUED · N oz leftbadge in the Inventory page. - 2
Click SWAP
Opens the Oil Engine with auto-suggested replacements:
- Same name across houses always wins — Gingerbread → Gingerbread, regardless of note overlap.
- Falls back to note-similarity when no exact name match exists.
- Manual search if the auto-picks miss.
- $/lb shown on every candidate at your preferred buy size.
- 3
Confirm the swap
The discontinued row gets a
swapped → [target]badge. Your recipes that referenced the old oil get an entry inrecipe_historyand the ingredient row swaps in place. - 4
Use up remaining stock
The discontinued row stays so you can pour through it. When stock hits 0, a
REMOVEbutton surfaces. Click to remove the library link (catalog row stays).
STOP FLAGGING THISin the Oil Engine. Useful when you're using up the last bottle and don't intend to restock at all.