Recipe Templates
When you click + Create Discount, the recipe gallery opens with templates grouped by the mechanism they use. The Common mechanisms group has six subcategories — % / £ discounts, Spend & save / tiers, Customer segments, Coupon-triggered, BOGO / bundle, Time / day — followed by a Seasonal · pre-filled row and a single dashed-border Build any discount tile.
Pick a recipe and Dino opens the rule editor pre-filled with sensible defaults for that pattern — including the matching Reward Type in the Rewards section, so a Fixed $ Off template lands on the matching dropdown value. The recipe name appears as a coloured type pill at the top of the editor so you always know what shape you’re working in; switch recipes at any time and the pill updates with it.
The canonical recipe list lives in src/components/recipes/templateDefinitions.js. The catalog below mirrors the shipping set 1:1 — if a row is here, the gallery shows the card; if a row is missing, the recipe isn’t shipping. All 27 mechanism tiles, plus the dashed “Build any discount” tile, are selectable today. The gift-product picker and the bundle-quantity (required_qty) editor have both shipped, so the Free gift, Mix & match bundle, Meal deal, and Mother’s Day gift tiles are fully live — nothing in the gallery is greyed-out.
How a recipe lands in the editor
Section titled “How a recipe lands in the editor”Picking a recipe does five things in one click:
- Reward Type pre-selected. The Rewards-section dropdown opens on the matching reward kind (% Off / Fixed $ Off / Free Shipping / Free Item). Tier rows inherit the same reward type so the first tier is ready to fill in.
- Required fields highlighted. Each template lists its required substitution fields — the amounts and pickers you need to fill in before the rule does anything (e.g. “Percent off”, “Pick day(s)”, “Pick a category”). The matching inputs in the editor pick up a “required” pill until you fill them.
- Targeting preset injected. Recipes that imply targeting (First-order welcome, VIP, Repeat customer, Day-of-week) drop a starter leaf into the Who is this for? / When does it apply? sections (or the Eligible Items sub-block of What triggers it? for product-scoped recipes) so the rule fires the way the template name implies. The starter leaf is a real condition you can edit — recipes are a thin layer, not a hidden code path.
- Cart label seeded. A sensible default cart-line label can be written into the Messaging section’s cart-label field, or you can leave the field blank and let it fall back to the localised string “Discount” at render time. Always editable.
- Plain English summary appears. The green box above the Rewards section reads the configuration back as a sentence in real time. As you fill in the required fields, the sentence completes itself — “Spend $100 → 10% off the cart” — so the rule is self-checking before you preview it.
Open the Cart Preview in the right rail to confirm the rule fires against a simulated cart before you publish. See Testing with Cart Preview for how to drive it.
% / £ discounts
Section titled “% / £ discounts”The most-recognised mental model: a percent or fixed amount off something.
% off the cart
Section titled “% off the cart”Single flat percentage off every order.
- Use case: site-wide sales, permanent loyalty discounts, simple promotions with no spend threshold.
- Example: “10% off every purchase.”
- Plain English summary: “10% off the cart.”
- Quirks: the simplest recipe in the gallery. Combine with Who is this for? to narrow to a role, or with When does it apply? to time-box it.
Fixed [ccy] off the cart
Section titled “Fixed [ccy] off the cart”Single flat fixed-amount off every order. The card label substitutes the store’s currency symbol.
- Use case: “£10 off” promotions where customers want to see exactly what they save.
- Example: “£10 off every order.”
- Plain English summary: “£10 off the cart.”
- Quirks: required-substitution includes the Currency zone field — fixed amounts depend on currency, so the recipe asks you to pick a zone up front. Cart label can use the
[ccy]token so the same rule renders as “£10 Off” or “€10 Off” in multi-currency stores.
% off a category
Section titled “% off a category”Percentage off a chosen category (or product list).
- Use case: category-wide promotions (“20% off all winter gear”), holiday sales, brand spotlights, end-of-line clearance.
- Example: “20% off all accessories.”
- Plain English summary: “20% off accessories.”
- Quirks: Dino does not modify catalog price — the discount applies at cart time, and the product page shows a crossed-out original + discounted price via the Product page block in the Messaging section. The original price stays in WooCommerce for reporting; the discount is the source of truth for “what the customer paid.”
Spend & save / tiers
Section titled “Spend & save / tiers”The customer crosses a spend or quantity threshold to unlock a deal.
Spend threshold cart discount
Section titled “Spend threshold cart discount”Percentage off once a cart spend threshold is met. The card is labelled “Spend threshold cart discount” in the gallery.
- Use case: classic “spend X get Y% off” promotions. AOV lift without giving away the percentage on small orders.
- Example: “Spend $50, get 10% off.”
- Plain English summary: “Spend $50 → 10% off the cart.”
- Quirks: the spend threshold sits in the What triggers it? section. The Spend-more nudge in the Messaging section auto-targets the threshold so the storefront can show “Spend $5 more for 10% off!” as the cart approaches it.
Spend & save (tiered)
Section titled “Spend & save (tiered)”Multi-tier percentage by cart subtotal — the more they spend, the more they save.
- Use case: graduated AOV lift, “spend more save more” seasonal sales, tiered loyalty.
- Example: “Spend $100 → 5%, $200 → 10%, $500 → 15%.”
- Plain English summary: “Spend $100 → 5% off, spend $200 → 10% off, spend $500 → 15% off.”
- Quirks: customers always get the best tier they qualify for — tier order in the editor is for display only. The spend-more nudge picks up the next tier above the current spend, not just the lowest. Click Add Tier to add levels; there is no fixed maximum.
Free shipping over a threshold
Section titled “Free shipping over a threshold”Free delivery once a spend threshold is met.
- Use case: the highest-ROI nudge in DTC — shoppers will add items to clear a shipping threshold more reliably than for a percentage discount.
- Example: “Free shipping over $50.”
- Plain English summary: “Spend $50 → free shipping.”
- Quirks: Dino sets the shipping line to zero rather than swapping shipping methods, so it works with any WooCommerce shipping setup. The spend-more nudge (“Add $X for free shipping”) is the conversion driver — keep it on.
Volume discount
Section titled “Volume discount”Per-product quantity tiers — “Buy 5 → 10% off, buy 10 → 20% off.”
- Use case: wholesale / B2B pricing inside a single store, bulk consumables (coffee, vitamins, candles).
- Example: “Buy 5 → 10% off, buy 10 → 20% off.”
- Plain English summary: “Buy 5+ of any of these items → 10% off, buy 10+ → 20% off.”
- Quirks: quantity tiers are evaluated per-product, not cart-wide — five different products in the cart don’t combine into a single 5-unit tier. Use the Eligible Items sub-block inside What triggers it? to scope the rule to the pool of qualifying products. The Product page display can show the whole tier table on the product page (great for conversion — customers see the bulk price before deciding how many to buy).
Customer segments
Section titled “Customer segments”Only fires for customers who match a segment.
VIP / role discount
Section titled “VIP / role discount”Exclusive rate for a specific WordPress user role.
- Use case: wholesale tiers, member-only pricing, employee discounts.
- Example: “Wholesale customers see 20% off.”
- Plain English summary: “Wholesale customers → 20% off the cart.”
- Quirks: Dino reads the WordPress user role directly — you can create a “Wholesale” role in WordPress (or with any role plugin) and target it without a separate B2B plugin. Combine with Where does it apply? for region-specific wholesale rates.
First-order welcome
Section titled “First-order welcome”Discount that only fires on a shopper’s first order.
- Use case: “10% off your first order” — the DTC standard new-customer hook.
- Example: “15% off your first order.”
- Plain English summary: “First-time customers → 15% off the cart.”
- Quirks: the preset enables the First-time customers row in Who is this for?, which writes a
past_order_count == 0targeting leaf — the BYO-rebuild shape that handles guests correctly. You don’t have to touch the leaf directly; the preset drops it in.
Repeat-customer reward
Section titled “Repeat-customer reward”Discount for customers with N+ prior orders.
- Use case: loyalty rewards (“10% off your 3rd order onwards”), retention nudges, VIP graduation.
- Example: “10% off your 3rd order onwards.”
- Plain English summary: “Customers with 3+ past orders → 10% off the cart.”
- Quirks: the past-order count uses the same engine path as First-order welcome (mirrored conditions). Combine with Currency in Who is this for? to give loyalty pricing per-currency.
Coupon-triggered
Section titled “Coupon-triggered”The customer enters a code at checkout to activate the discount.
Coupon code discount
Section titled “Coupon code discount”Percentage off when a code is applied.
- Use case: newsletter / influencer codes, recovery codes, segmented promotions.
- Example: “Code SAVE15 for 15% off.”
- Plain English summary: “Apply code SAVE15 → 15% off the cart.”
- Quirks: any non-coupon recipe can be turned into a coupon-activated one by adding a Coupon Code condition in What triggers it?. The coupon-triggered cards are shortcuts for that flow — same engine, different starting point. Use the Bulk Pool feature in the Coupons tab for one-use codes.
Coupon: fixed [ccy] off
Section titled “Coupon: fixed [ccy] off”Fixed amount off when a code is applied. Card label substitutes the store’s currency symbol.
- Use case: “£10 off your first order” codes, win-back vouchers, customer-service make-goods.
- Example: “Code WELCOME for £10 off.”
- Plain English summary: “Apply code WELCOME → £10 off the cart.”
- Quirks: same
[ccy]token support as the auto fixed-amount recipe — the same code can render “£10 Off” or “€10 Off” across currencies. Cap with Global Settings if you need a maximum-discount safety net.
Coupon: free shipping
Section titled “Coupon: free shipping”Free shipping when a code is applied.
- Use case: shipping make-goods (delayed orders), launch incentives, partner channels that need free shipping on demand.
- Example: “Code FREESHIP for free delivery.”
- Plain English summary: “Apply code FREESHIP → free shipping.”
- Quirks: combine with Where does it apply? to scope free shipping to specific zones — useful when you want to offer free shipping in your home country but not internationally.
Free gift with coupon code
Section titled “Free gift with coupon code”Free gift unlocked by a coupon code.
- Use case: sampler campaigns, influencer “drops”, fixed-window gift promotions.
- Example: “Code SAMPLE → free tote.”
- Plain English summary: “Apply code SAMPLE → free X added to cart.”
- Quirks: pick the gift product in the Rewards section’s gift-product picker; the coupon code is a required-substitution chip in What triggers it?. The gift drops into the cart as a $0.00 line once the code is applied.
BOGO / bundle
Section titled “BOGO / bundle”Three distinct BOGO mechanics, plus a mix-and-match bundle, a multi-pool meal deal, and a no-coupon free gift.
BOGO same item
Section titled “BOGO same item”Buy multiple of the same SKU — the cheapest qualifying unit is free.
- Use case: classic same-item BOGOF on a specific product or category, “buy 3 hats, cheapest free”.
- Example: “Buy 2 Hats, cheapest free.”
- Plain English summary: “Buy 2 of these items → cheapest one free.”
- Quirks: matching mode is
same_sku— five different products in the cart don’t satisfy the condition; the customer needs two units of the same SKU. Cart label clarifies “cheapest free” so shoppers don’t pick the wrong pair.
Buy A, get B free
Section titled “Buy A, get B free”Trigger product → gift product gift-with-purchase. Buy a specific item, get a different item free.
- Use case: gift-with-purchase campaigns (“Buy a sofa, get a cushion”), accessory pairings, sample distribution.
- Example: “Buy a Sofa, get a free cushion.”
- Plain English summary: “Buy [trigger] → free [gift] added to cart.”
- Quirks: required-substitution asks for two products — the trigger product (what unlocks the gift) and the gift category or product (what gets added free). This is not “buy two of the same SKU, cheapest free”; for that, pick BOGO same item.
Cross-product BOGO
Section titled “Cross-product BOGO”Buy any 2 from a pool of eligible products — the cheaper of the two is free.
- Use case: “any two t-shirts, cheaper free” — cross-sell within a curated pool of SKUs.
- Example: “Pick any 2 from a pool — cheapest free.”
- Plain English summary: “Buy any 2 of these items → cheaper one free.”
- Quirks: matching mode is
all— different SKUs from the same pool count. Required-substitution is the Eligible products picker. Cart label and product-page display both call out the “cheapest free” rule so shoppers don’t pick the wrong pair.
Mix & match bundle
Section titled “Mix & match bundle”Mix-and-match fixed bundle price.
- Use case: “any 3 for $25” multi-buys, gift-set price points, clearance lots.
- Example: “Any 3 candles for $25.”
- Plain English summary: “Any 3 of these items → $25 total.”
- Quirks: set the bundle size (
required_qty) and the fixed bundle price in the editor, then scope the eligible pool via the Eligible Items sub-block of What triggers it?. The bundle price applies when the cart holds exactly the qualifying quantity.
Meal deal
Section titled “Meal deal”Build-your-own combo — take a set number of items from each of several pools and pay one fixed combo price.
- Use case: “Main + Side + Drink for £5” meal deals, build-a-box bundles, fixed-price combos drawn from curated pools.
- Example: “Any main + any side + any drink for £5.”
- Plain English summary: “1 from Mains + 1 from Sides + 1 from Drinks → £5 total.”
- Quirks: unlike Mix & match (one pool, any N items), the meal deal uses multiple pools each with its own quantity — the customer takes the set number from every pool. Pools, per-pool quantities, and the combo price are edited inline in the pool-stack cards in the Rewards section. Runs on the
pooled_matchallocator.
Free gift over a spend threshold
Section titled “Free gift over a spend threshold”Spend X, automatically add a free product to the cart (no coupon required).
- Use case: “free sample with $50 spend”, subscription-style “free gift this month”, promotional bundling.
- Example: “Free tote over $75.”
- Plain English summary: “Spend $75 → free X added to cart.”
- Quirks: no coupon required — the gift is added automatically once the spend threshold is met. Pick the gift product in the Rewards section’s gift-product picker; it appears as a $0.00 cart line.
Time / day
Section titled “Time / day”The rule fires inside a time window.
Day-of-week sale
Section titled “Day-of-week sale”Discount that fires on chosen weekdays.
- Use case: “Wine Wednesday”, “Taco Tuesday”, weekday-only category sales.
- Example: “20% off wine on Wednesdays.”
- Plain English summary: “On Wed → 20% off wine.”
- Quirks: the weekday picker is a required-substitution chip in the When does it apply? section — the rule won’t fire until you pick at least one day. You can pick multiple (e.g. “Sat + Sun”) to make a weekend-only rule.
Flash sale (date window)
Section titled “Flash sale (date window)”Percentage off, auto-expires on a date you set.
- Use case: 24-hour drops, sitewide flash sales, scheduled bursts.
- Example: “24-hour 25% off sitewide.”
- Plain English summary: “Until 23:59 Sunday → 25% off the cart.”
- Quirks: the start_time / end_time sit on the rule itself (visible in When does it apply?). Once the end_time passes, the rule stops firing automatically; no need to disable it manually.
Weekend sale
Section titled “Weekend sale”Day-of-week sale preset to Saturday + Sunday.
- Use case: weekend-only promotions without having to remember the weekday picker.
- Example: “20% off accessories on weekends.”
- Plain English summary: “On Sat–Sun → 20% off accessories.”
- Quirks: mechanically identical to Day-of-week sale with Sat + Sun pre-ticked. Pick this card when “weekend” is the merchant frame; you can still re-pick days in the When section.
Seasonal · pre-filled
Section titled “Seasonal · pre-filled”Pre-built holiday templates with the typical schedule and copy baked in. Each is a worked example you customise rather than a separate mechanism.
Black Friday 20% off
Section titled “Black Friday 20% off”Black Friday preset — % off scheduled for the typical BF window.
- Use case: Black Friday / Cyber Monday weekend.
- Example: “20% off everything from Friday → Monday.”
- Plain English summary: “From Fri → Mon → 20% off the cart.”
- Quirks: Active from / Active until are required-substitution chips — pick the actual year’s dates. The percentage and category scope are editable; the recipe just gives a structured starting point.
Boxing Day clearance
Section titled “Boxing Day clearance”Boxing Day preset — % off scheduled for the typical post-Christmas window.
- Use case: UK / Commonwealth Boxing Day, December clearance.
- Example: “30% off clearance December 26 → 31.”
- Plain English summary: “From Dec 26 → Dec 31 → 30% off clearance.”
- Quirks: same shape as Black Friday — only the default copy and seasonal framing differ.
Mother’s Day gift
Section titled “Mother’s Day gift”Mother’s Day preset — gift or % off, single-day active window.
- Use case: Mother’s Day campaigns where the active window is one day rather than a multi-day weekend.
- Example: “Free gift on Mother’s Day.”
- Plain English summary: “On Mother’s Day → free X added to cart.”
- Quirks: uses a single Active on date (not a range) — edit to a range if you want a weekend rather than a single day. Shares the
free_giftrecipe, so the gift product is chosen in the Rewards section’s gift-product picker.
Subscriber birthday code
Section titled “Subscriber birthday code”Birthday preset — coupon code + % off, designed for personalised codes.
- Use case: birthday clubs, ESP-driven personalised codes (“BIRTHDAY-{first_name}”).
- Example: “Code BIRTHDAY-SAM for 20% off.”
- Plain English summary: “Apply code BIRTHDAY-SAM → 20% off the cart.”
- Quirks: the coupon code is a required-substitution chip — fill it from your ESP’s merge tag. Use the Coupons tab with bulk pools for high-volume personalisation.
Build any discount
Section titled “Build any discount”Start from a blank editor — no preset, no targeting leaf, no required substitutions. The dashed-border tile sits top-right of the gallery.
- Use case: when none of the recipes fit, or when you’d rather start clean and pick the reward type yourself.
- Quirks: there is no Plain English sentence until you pick a reward type in Rewards and fill in the basics. The other sections start in their default empty states (Anyone / Always / Anywhere / Auto-applied — with the Eligible Items sub-block defaulting to “All items”) — exactly the same as customising any other recipe down to its base.
Customising after creation
Section titled “Customising after creation”Every recipe is just a starting point. After the editor opens with the pre-filled settings, you can change anything:
- Adjust the discount amounts and tiers in Rewards
- Add targeting in Who is this for?, When does it apply?, Where does it apply?, and What triggers it? (which also houses the Eligible Items sub-block for products / categories / SKUs / attributes)
- Customise the cart-line label, product-page display, and spend-more nudge in the Messaging section
- Set a schedule in When does it apply?
- Verify with Cart Preview in the right rail before publishing
The recipe saves you from starting with a blank form — but nothing is locked in.
What’s next?
Section titled “What’s next?”- Build Your Own Discount — the six-section spine in detail
- Targeting — Who / When / Where / What triggers it? (and its Eligible Items sub-block) in depth
- Testing with Cart Preview — drive the right-rail preview before you publish
- Cart Labels — customise the shopper-facing label on each discount line
- Upsell Messages — spend-more nudges in the mini-cart, cart page, and checkout