Sets

Table of Contents

Stella supports two kinds of sets. Both are shop SKUs that wrap other products — our matching after the analysis runs on the products inside. That's why Stella needs to know which products are included in sets, so that she knows which sets are a good match for the user. Choose the type that matches how the set is set-up in the shop. If, in rare cases, you need to have a custom own matching logic on a specific set, then define those products as "normal" products in Stella and let the recommendation engine match the set as a whole.

Short overview of both set types, when to use which, and how to check them in the Stella dashboard (about 2½ minutes):

Fixed Set vs Dynamic Set

AspectFixed Set (SET_OR_PALETTE)Dynamic Set (DYNAMIC_SET_OR_PALETTE)
How it is set-up in your shopA real SKU whose contents is a fixed mix of products. Can have multiple variants where each variant has a different composition (e.g. different foundation color).A shell product with no additional variants. The content of the set can be configured by the user in a custom set creator on your PDP. They pick one variant per slot (or keep Stella’s pre-fill).
What the shopper buysOne shell variant — a real SKU which already defines its composition.A configurable mix that is stored as additional information on the cart item of the set's SKU.
Result pageNormal product card. Content lines list the components.Special set card with Edit Set.
Add to cartSame as a normal product: the shell variant. No set_id.stella-add-to-cart includes set_id and items (the chosen variants).
How Stella matchesAfter analysis, a lift shows a shell variant when every Must-Match Component Variant assigned to that Funnel is in the recommendation set. Unassigned Must-Match products are ignored.Slots are filled from recommended variants of the allowed products.

Both set types do not support other sets as components inside them but only "normal" products.

Fixed Sets

A Fixed Set is a real shop SKU whose variants are fixed combinations of other products (Shopify Bundles or a hand-built mix). Product Type is SET_OR_PALETTE.

The shopper adds one shell variant to the cart. Matching uses the Component Variants inside each set variant, not matching logic on the shell. For each product in the set, you must define if that component should be evaluated for the matching process or not:

  • Must-Match = true means that the component must be in the Funnel's recommendation result after analysis or this set variant is hidden — unless the product is not assigned to that Funnel, in which case Must-Match is ignored there
  • Must-Match = false means that the component is not relevant for the matching process - e.g. a brush in a foundation set.

Examples:

  • Valentine's Day Set — a fixed set with one specific lipstick color, one specific matching lipliner and a case. The first two components are Must-Match to show the set only to users that suit these two colors and the third one is not relevant for the matching process.
  • Brow kit SKUs — one variant per possible shade mix. Must-Match on the pencils so shoppers get the set with the matching pencil color.
  • Brush Set — foundation + blush brushes. Leave Must-Match off for both brushes so this set is always recommended (if it is assigned to a funnel).

Fixed Set setup

  1. Edit the product and set Product Type to SET_OR_PALETTE (shown as Fixed Set).
  2. Open the Fixed Sets tab on the products list.
  3. Use the Composition chip. For each set variant, add ordered Component Variants, quantity (default 1), and Must-Match. Values are already pre-populated by us if we can get the info from shopify (see below) or from our StellaDataAI which tries to infer it from the product data and PDP. You can also click Fill with AI in the composition editor to run that again (it overwrites the current composition).
  4. Assign the Fixed Set to a Funnel the same way as a normal product (and to a result-page tab if the funnel uses tabs).
  5. Assign Must-Match products to a Funnel when that Funnel should apply Must-Match to them (tag / include them in SRL). If a Must-Match product is not assigned to a Funnel, matching ignores Must-Match for that product there.

A Fixed Set variant with no composition never appears in recommendations.

Must-Match

If Must-Match is on and the product is assigned to the Funnel, that Component Variant must be in the recommendation result after analysis or this set variant is hidden. If the product is not assigned to that Funnel, Must-Match is ignored there. If it is off, the item rides along (brush, sharpener, pouch) and does not affect matching.

Result page and try-on

The Fixed Set appears as a normal product card. Content lines use the full variant name in composition order, with (Nx) when quantity is greater than one. Add-to-cart sends the shell variant as a normal product via the stella-add-to-cart event (no set_id). See Analysis Events Documentation for more details. StellaTryOn uses each distinct VTO-eligible Component Variant.

A funnel-assigned Fixed Set can also be added to Buy the Look as a pre-defined set product (same list as Dynamic Sets). The shopper only sees lifted variants; they switch SKUs in the look builder and cannot Edit Set. Add-to-cart is still the selected shell variant.

Shop sync (Shopify only)

Shopify Bundles

If you are using Shopify and use the Shopify Bundles app to define the sets, then you do not need to define the sets in Stella manually - we will automatically sync the sets from your shop. We will set the must match flag for each component that is assigned to a funnel. Products that are not assigned to a funnel (yet) will be set to must match false, so this setup sometimes still needs some manual tweaking.

Manual setup

If you are not using the Shopify Bundles app, you can sync the sets by using a metafield custom.fixed_set on each variant of the set with a JSON object in the following format. A valid metafield is the source of truth for that variant’s composition.

Example:
For each variant of the set a JSON like this needs to be added:

{
  "components": [
    { "variant_id": "30306711765072", "quantity": 1, "must_match": true },
    { "variant_id": "39305383215184", "quantity": 1, "must_match": true },
    { "variant_id": "31808509706320", "quantity": 1 }
  ]
}

StellaDataAI when composition is not defined

If there is no Shopify Bundle definition and no valid custom.fixed_set metafield (or the metafield does not clearly define the mix), StellaDataAI tries to fill the Component Variants from your product data and PDP.

How well that works depends on how your catalog and PDP are structured. When the contents are obvious on the page (named products, variant lists, a clear bundle description), Data AI can often get it right. When the mix is only implied, in images, or named differently than in your catalog, it can miss or mis-assign components.

After sync open Composition on the Fixed Sets tab, check each set variant, and fix anything that is wrong. Matching only works if the Component Variants are correct.

Dynamic Sets

If you offer sets that let users choose which variants of a group of products they want, create a Dynamic Set. The analysis result page shows a special product card, pre-filled with recommended variants. The user can still change variants with Edit Set.

Examples:

  • Eyeshadow Palette — The user selects colors from available refills; the set is pre-filled with our recommended colors.
  • Concealer & Foundation Set — Sell both together and let the user choose the shade for each product.

For the best experience, integrate your shop so it can apply the user’s selection. Details are in the sections below.

Setup

To set up a Dynamic Set, go to the products list. Find the product that is sold as a custom set and edit it. Set Product Type to DYNAMIC_SET_OR_PALETTE (the field is above "Hide this product from Stella").

The product appears on the Dynamic Sets tab. Edit the set by clicking the slots pill. In the modal, add ordered slots. Each slot lists which products are allowed, and can be marked as hidden. Values are already pre-populated by us if we can get the info from Shopify (see below) or from our StellaDataAI which tries to infer slots from the product data and PDP. You can also click Fill with AI in the slots editor to run that again (it overwrites the current slots).

Visible slots define what the shopper chooses — one selection per slot. Hidden slots are always added automatically and are not shown in the shopper set editor (e.g. a palette case). Because they are auto-filled, a hidden slot may only contain exactly one product, and that product must have exactly one variant.

Examples

Eyeshadow Palette

  • 4 visible slots, each allowing only Eyeshadow Refill
  • 1 hidden slot with Eyeshadow Palette Case

Concealer & Foundation Set

  • Slot 1: Concealer
  • Slot 2: Foundation

Choose 3 glow items for just 20 €

  • 3 visible slots, each allowing Glow Blush, Glow Foundation, and Glow Highlighter

Shop sync (Shopify only)

An alternative to the manual setup is to use a dedicated metafield on the product, if you are using Shopify. By defining the sets in your shop system, we will automatically sync those settings into our platform when the product is synced. The metafield must be fully valid (all referenced products must already exist in Stella). If the metafield is missing or invalid, any existing Stella set definition is left unchanged.

Create a custom metafield with the key custom.dynamic_set and in the value define the set as a JSON object with:

  • slots: An ordered array of slot objects.
    • product_ids: Shopify product IDs allowed in this slot
    • hidden: Whether the slot is fixed/hidden from the shopper editor (default false). Hidden slots must list exactly one product ID, and that product must have exactly one variant in Stella.

Example:

{
  "slots": [{ "product_ids": ["111"] }, { "product_ids": ["111", "222"] }, { "product_ids": ["444"], "hidden": true }]
}

Legacy metafields that used products + total_size are still accepted by the sync service and compiled into slots.

StellaDataAI when slots are not defined

If there is no valid custom.dynamic_set metafield (or the metafield does not clearly define the slots), StellaDataAI tries to fill the slots from your product data and PDP.

How well that works depends on how your catalog and PDP are structured. When the options are obvious on the page (named products, shade lists, a clear set builder), Data AI can often get it right. When the mix is only implied, in images, or named differently than in your catalog, it can miss options or leave names unmatched.

After sync open the slots editor on the Dynamic Sets tab, check each slot, and fix anything that is wrong. Matching only works if the allowed products per slot are correct.

Pre-fill the set on the PDP

When the user clicks on a set on our result page, we will open the PDP of the set and attach the chosen variants as query parameter. You can use this query parameters to pre-fill the set with the requested items, to give the user the best user experience.

https://yourshop.com/products/awesome-set?variants=123123445,1235623,23452345654,1234653435

Enhance your theme, to look out for the variants parameter and pre-select these variants in the set.

Adding a set to the cart

At your company settings, you can enable the "Add to cart" button for sets. When enabled, the user will be able to add the configured set directly from our result page to the shopping cart.

To make this work, your add-to-cart script needs to be extended to support your shops logic on how to add sets to the cart. Your add-to-cart script is either implemented directly in your shop's theme or added in the company settings in our platform.

If the item that wants to be added to the cart is a set, then the payload of the stella-add-to-cart event is containing a set_id with the product ID of the set and the items list the variants to be added to the set.

See Analysis Events Documentation for more details.

Allow clicks on the variants in our widget

On PDPs of sets our widget will display all the variants that are available in the set and are recommended to the current user. By default clicking on a variant is disabled (in contrast to normal products).

To offer users the possibility to click on a variant, you need to implement a script that will catch this click and add the selected variant to the set.

  1. Set the RENDER_SET_VARIANTS_AS_LINKS property in the stella settings to true. See General Settings for more details.

    After this, you can listen to the stella-variant-clicked event and add the selected variant to the set (details on the which variant is clicked is in the event payload). See Widget's Events Documentation for more details.