<!-- Source: https://www.orderkraft.com/docs/concepts/built-on-the-fly/ -->

# Built on the fly

Some products aren't built from a fixed recipe. A necklace gets the charms the customer picked. A gift box gets whatever went into it. What the product is made of changes with every order, even though the product itself stays the same.

Orderkraft calls these *built on the fly*. It's a production strategy you set on a product, alongside *Regular* and *Made to order*.

## How it's different from made-to-order

A [made-to-order](/docs/concepts/made-to-order/) product has a bill of materials: a fixed list of what it takes to build one. Every order for it consumes the same materials in the same quantities.

A built-on-the-fly product has no fixed list, because there isn't one. The parts arrive on the order itself, as separate line items the customer added to their cart. On the Shopify order, a necklace and its two charms are three lines, not one. Production has to know those three lines belong together, or the charms get treated as their own work and the necklace as an empty build.

## Telling Orderkraft how your store groups the parts

How those lines say they belong together depends on your storefront setup, and Shopify has more than one convention for it. Orderkraft can't guess which one your store uses, so you tell it once, at **Settings → Built-on-the-fly configuration**.

The setting is called *How they appear on the order*, and it has three options:

| Option | When it's yours |
| --- | --- |
| Don't group | Customers don't pick parts in the cart, or you're not sure yet |
| Bundle app | You're using a bundle app on Shopify |
| Custom theme | A Shopify developer or agency built your theme |

*Don't group* is the default, and it's the safe one. Orderkraft reads every line on its own and ignores any grouping information, which is correct for any store that doesn't sell pick-your-parts products.

*Bundle app* covers stores where a Shopify bundle app assembles the parts. Those apps mark every line of the bundle, parent included, with the same group identifier, and Orderkraft uses that to keep them together.

*Custom theme* covers stores where a developer built the picking into the theme itself. Custom themes tend to mark only the parts, not the parent. Orderkraft then finds the parent among the ungrouped lines, using the group's attributes to tell two of the same product apart, like two necklaces with different engravings.

If you're not sure which option matches your store, ask. The settings page has a *Contact us* link for exactly that. Picking wrong means parts end up as their own production work instead of belonging to the parent.

## What changes in production

Once the configuration matches your store, a built-on-the-fly order line produces a manufacturing order like any other. The difference is in the material list.

The parts the customer picked show up as inputs, each tagged *Customer's choice*, with the material name linking back to the line on the Shopify order. If the product also has a bill of materials behind it, those recipe inputs sit alongside them, tagged *From bill of materials*. One manufacturing order can carry both: the necklace chain from the recipe, the charm from the cart.

A part only becomes an input if its SKU matches a material in your Orderkraft catalog. Parts with no matching material are skipped rather than blocking the order, so a mismatch shows up as a missing input instead of a failed import.

## What stays the same

Everything else about the manufacturing order works the way it always does. It has a status, a location, holds, a timeline, and a [ship-by date](/docs/concepts/manufacturing-orders/). It shows up in the production queue, on the [Shopify order page](/docs/setup/track-production-on-the-order-page/), and in [Flow triggers](/docs/automation/flow-triggers/). The customer's delivery promise still comes from the product's lead time, so a built-on-the-fly product needs one set just like a made-to-order one does.
