Your bestselling kit is a guess about the average customer. There is no average customer.
What changed is the boring part: pricing. Shopify Functions handles dynamic bundle pricing natively, so the discount logic lives in the cart rather than in a duplicated SKU for every possible combination. That was always the thing that killed these projects. You needed a variant for each permutation, inventory drifted out of sync, and finance could not reconcile the discounts. Now the rules run at checkout and the components stay ordinary products.
On top of that, the personalization layer is the actual differentiator. A short intake, either a quiz or a conversational prompt, captures skin type, climate, routine, and constraints. Purchase history fills the rest. The system assembles 4 or 5 items, prices them as a bundle, and holds them together as a single cart line that still decrements each component's inventory correctly. The customer sees a kit with their name on it. Your warehouse sees normal picks.
The compounding version is regeneration. When the customer reorders, the kit rebuilds against current inputs. A winter kit differs from a summer kit. A kit after 3 months of use differs from a starter kit. You are selling the same catalog with a new arrangement each time, which is mass customization without a single new SKU.
The catch is that personalization is only as good as the rules underneath it. Somebody has to define compatibility, exclusions such as never pairing 2 strong actives, margin floors so the algorithm cannot build an unprofitable box, and substitution logic for when the ideal item is out of stock. Substitution is where these systems fail publicly. There is a trust dimension too: if the contents shift between visits and you never explain why, the customer assumes the recommendation was arbitrary. Show the reasoning in 1 line next to each item.
Mass customization used to mean more SKUs and more risk. Now it means fewer SKUs, arranged differently for each person. The catalog stays small. The shelf gets personal.
