Initial setup
The first time you open Assemblified, a setup wizard takes over the dashboard. It collects six shop-level choices that drive how every BOM executionBOM executionThe pipeline that runs when a Shopify order containing a BOM-bound variant is created, edited, cancelled, or refunded. Webhook → queue → DO handler → Shopify inventory adjustment, plus pre-assembled drawdown, sub-assembly recursion, and dynamic adjustment cascade. Every run writes one execution log row. Read more → behaves — which location to target, whether to follow per-event locations, how to handle refunds and cancellations, and whether managed quantities can go below zero. The dashboard stays blocked until you finish the wizard, but every choice is reversible from the Settings page later.
On this page
Section titled “On this page”- The six choices at a glance
- Default location
- Multiple locations
- Location-sensitive dynamic adjustments
- Returns handling (refunds and cancellations)
- Negative inventory
- Review and finish
At a glance
Section titled “At a glance”| # | Step | Setting key | Default | Conditional |
|---|---|---|---|---|
| 1 | Default location | defaultLocationId | (required) | — |
| 2 | Multiple locations | multiLocationSensitiveAdjustments | Off | — |
| 2b | Location-sensitive dynamic adjustments | locationSensitiveDynamicAdjustments | Off | Only shown when Step 2 = Yes |
| 3a | Refunds restore materials | refundsSyncDisabled | Restore (off) | — |
| 3b | Cancellations restore materials | cancelledOrdersSyncDisabled | Restore (off) | — |
| 4 | Negative inventory | allowNegativeInventory | Clamp to 0 | — |
A shop with a single Shopify location auto-fills Step 1 and skips the dropdown. The “Conditional” column flags steps the wizard hides based on earlier answers.
1. Default location
Section titled “1. Default location”Pick the Shopify location Assemblified should treat as its anchor. If your shop has only one location, it’s selected automatically.
- What it does. Sets the fallback location used whenever a more specific one isn’t available.
- Default. None — the wizard cannot advance past this step until you choose a location.
Execution impact.
- When an order or fulfillment webhook lacks an explicit location, the default locationDefault locationThe Shopify location Assemblified falls back to when an order or fulfillment webhook doesn't carry a more specific location. Inventory adjustments, dynamic recalculations, and per-location records all use this as their anchor. Read more → receives the inventory adjustment in Shopify.
- When multi-location modeMulti-location modeA shop-level setting that lets Assemblified prefer the location carried by the incoming order or fulfillment event. When off, every adjustment targets the default location regardless of payload. Read more → is off (Step 2 = No), every adjustment targets this location regardless of what the event payload contains.
- Dynamic BOMBill of MaterialsA bill of materials tells Assemblified how to build one unit of a finished good. When a customer orders the finished-good variant, Assemblified deducts the right component quantities from inventory automatically. Read more → recalculation reads from this location as a single shared inventory pool unless you also turn on Step 2b.
- Per-location residual rounding for raw materialsRaw materialThe atomic component of a BOM or sub-assembly. Two flavors: a Shopify-linked variant (inventory tracked in Shopify) or a virtual material (DO-side inventory only). Both kinds appear in the same component picker and are consumed identically when a BOM fires — except virtual materials never trigger a Shopify call. Read more → uses this location for any record that wasn’t created against a more specific one.
Use it for. Every shop. The app treats this as a required field; without it, BOM execution can’t sync inventory back to Shopify.
2. Multiple locations
Section titled “2. Multiple locations”Tell Assemblified whether your shop fulfills from more than one inventory location.
- What it does. When on, BOM execution prefers the location carried by the incoming order or fulfillment event over the default. When off, every event targets the default location.
- Default. Off (single-location mode).
Execution impact.
- On. The execution handler inspects the webhook payload, extracts the event location, and applies the adjustment there. Raw materialRaw materialThe atomic component of a BOM or sub-assembly. Two flavors: a Shopify-linked variant (inventory tracked in Shopify) or a virtual material (DO-side inventory only). Both kinds appear in the same component picker and are consumed identically when a BOM fires — except virtual materials never trigger a Shopify call. Read more → availability checks become location-aware too — a material is “available” only at the location the event names. If no location is in the payload, the system falls back to the default.
- Off. Faster, simpler. The app skips the per-event lookup and treats all inventory as one pool anchored on the default location.
Use it for. Shops that drop-ship from multiple warehouses, retail stores that double as fulfillment points, or any setup where stock isn’t physically shared across locations. Single-warehouse shops should leave it off.
2b. Location-sensitive dynamic adjustments
Section titled “2b. Location-sensitive dynamic adjustments”Only appears if you answered “Yes” in Step 2. Decides how dynamic BOM recalculation handles multiple locations.
- What it does. When on, dynamic adjustmentDynamic adjustmentA per-BOM toggle that recalculates the BOM's Shopify-displayed quantity from current component availability after every order. The displayed quantity is the bottleneck-resource count plus pre-assembled stock — your storefront never sells more than you can build. Read more → recalculates per location using that location’s specific inventory. When off, it uses a single shared default-location pool even though multi-location mode is otherwise active.
- Default. Off.
Execution impact.
- On. Dynamic recalculation reads inventory at the event location and computes “how many BOMs can we build here?” Different locations can show different sellable quantities for the same BOM.
- Off. Dynamic recalculation always reads from the default location, even when other adjustments use the event location. This is useful when locations share the same physical stock, or when you want one global “how many can we build” number across all of them.
Use it for. Multi-location shops whose locations don’t share inventory (separate warehouses, regional fulfillment hubs). Skip it if your locations all draw from the same physical stock — the global pool gives a more accurate buildable number than any single location would.
See Dynamic adjustment for the full formula and worked examples.
3. Returns handling
Section titled “3. Returns handling”Two independent toggles, one for refunds and one for cancellations. Each decides whether the corresponding event reverses the raw-material consumption that the original order triggered.
- What it does.
- Refunds — Restore materials (default): a refund returns the consumed components to inventory.
- Refunds — Don’t restore: a refund leaves the materials consumed.
- Cancellations — Restore materials (default): a cancellation returns the components.
- Cancellations — Don’t restore: a cancellation leaves them consumed.
- Default. Both restore (toggles off).
Execution impact.
- When restoration is on for an event type, the refund/cancellation handler reverses every component change the original execution made — Shopify-linked materials, virtual materials, and any cascading sub-assemblySub-AssemblyA reusable assembly block that composes into bigger BOMs. Define it once, include it in any BOM. At execution time, Assemblified expands the sub-assembly into its own components recursively. Read more → consumption.
- When restoration is off, the original consumption stays put. The order’s executions still log; the inventory just doesn’t roll back.
- These toggles only govern reversal. The decision to consume materials at order creation or order edit time is a separate setting, not part of this wizard.
Common patterns:
- Both on (typical). A returned customer order should look like it never happened — materials come back, you re-sell them.
- Refunds on, cancellations off. Treat cancellations as scrapped, donated, or otherwise written off; a refund is still a real return of unsold goods.
- Both off. Manual inventory reconciliation lives elsewhere (spreadsheets, ERP, accountant). The app just records what was executed and leaves restocking to a human.
See Refunds & cancellations for the per-BOM toggles that interact with this shop-level setting (notably “Keep assembled on return”).
4. Negative inventory
Section titled “4. Negative inventory”Decides whether Assemblified-managed quantities can drop below zero or stop at zero.
- What it does. When on, virtual raw materialsRaw materialThe atomic component of a BOM or sub-assembly. Two flavors: a Shopify-linked variant (inventory tracked in Shopify) or a virtual material (DO-side inventory only). Both kinds appear in the same component picker and are consumed identically when a BOM fires — except virtual materials never trigger a Shopify call. Read more → , pre-assembled stockPre-Assembled InventoryStock of finished sub-assemblies and BOM items that have already been built and are sitting on the shelf. When a work order needs a sub-assembly, it draws from pre-assembled inventory first and only builds fresh ones if the shelf comes up short. Read more → , and dynamic capacity calculations can carry negative values. When off, those values clamp at 0.
- Default. Clamp to zero.
Execution impact.
- Allow negativeAllow negative inventoryA shop-level setting that decides whether Assemblified-managed quantities — virtual raw materials, pre-assembled stock, dynamic capacity — can stay below zero, or get clamped at 0. Read more → . A virtual material at -50 means you owe 50 units — useful for backorder visibility, debt tracking, or shops that record consumption faster than receipts. Pre-assembled stock can read -3 if three more units shipped than the shelf had recorded. Dynamic capacity can stay informative even when one component runs out.
- Clamp to zero. Quantities never display negative numbers. When a material reaches 0, the app stops drawing from it; if a BOM execution would push it below zero, the system blocks or skips that draw depending on the surrounding rules.
Use it for.
- Allow negative suits manufacturers who pre-ship against inbound stock, or anyone who treats inventory like a running account that can be reconciled later.
- Clamp to zero is the safer default for storefront-facing shops — you only ever sell what’s actually on hand, and reports never show confusing negative numbers.
See Virtual materials and Pre-assembled inventory for the surfaces this setting affects.
Review and finish
Section titled “Review and finish”The final wizard step shows a summary table of every choice. Use Back to revise any step, then Finish Setup to commit.
On submit:
- All six values save to the shop’s per-shop settings store.
- The dashboard unblocks and shows the full Assemblified UI.
- Every choice remains editable on the Settings page — none of these are one-way doors.
Where to next
Section titled “Where to next”- Settings reference — the per-BOM toggles you’ll meet next, and how they interact with the shop-level choices made here.
- Refunds & cancellations — how the Step 3 toggles cascade through sub-assemblies and pre-assembled stock.