recommendations
New Feature: Compose recommendation mappings can now target specific product variants — both for what must be in the cart (the trigger) and for what you want to recommend. Previously mappings only worked at the product level, so any variant of a trigger product would fire the rule. Now you can say "only if the Small Red variant is in cart" and "recommend the Large Blue variant specifically".
When you build a mapping, the product picker now lets you drill into a product and select one or more specific variants. You can mix variant pins and product-level entries in the same mapping.
Here's how it behaves:
- Variant-pinned trigger: the mapping only fires when one of the selected variants is in the cart. If you pick multiple variants on the same row, any of them will satisfy the rule.
- Variant-pinned recommendation: the recommended product shows in checkout with the pinned variant already selected, instead of the checkout guessing based on cart contents.
- Quantity thresholds still apply: if you require "at least 2" of a trigger, the total across all pinned variants of that product must meet the threshold.
- Mixed rows: a single mapping can combine product-level entries (any variant of that product) with variant-pinned entries on other rows.
Example use cases:
- "If the cart has the Small Red T-shirt, recommend the Large Red T-shirt" — classic size-up cross-sell on the same SKU.
- "If the cart has the 1L bottle of olive oil AND the 500g pasta, recommend the Italian Gift Box (Large size)" — multiple triggers, variant-pinned recommendation.
- "If the cart has any of the Small, Medium, or Large variants of the Basic Hoodie, recommend the Premium Hoodie" — OR-matched variant trigger.
We also added a few quality-of-life improvements to the mappings admin:
- Search and filter: the mappings list has a search box (matches product IDs, titles, and handles) and tabs for All / Active / Draft.
- Column sorting: click the Status, Source, or Type columns to sort.
- Edit in place: each row has an Edit button that reopens the picker with the current product and variants preselected, so updating one entry doesn't mean rebuilding the whole mapping.
- "Same product on both sides" warning: if a product appears as both a trigger and a recommendation, a banner now explains that you need the component's "Recommend same products" setting enabled for variant-to-variant upsells on the same product to show.
- CSV support: exported CSVs preserve variant pins as
productId:variantId(orproductId:vid1|vid2for multiple variants). CSVs without variant pins continue to work exactly as before.
Existing mappings continue to work without changes — variant pinning is purely additive.