The Product Workspace (detail page)
The product detail page is where you do all the real work: build variants and SKUs, enter the bill of materials, set prices and forecast, run the progress gate, record tests, and finally push to Shopify. This is the most important page in setlist.
Where: setlist → Products → (click any product)
How the page is laid out
The page has two parts:
- Main column — four stage cards (Plan, Design, Review, Ready for launch), followed by Design notes and Tests.
- Right-hand aside — always-visible panels: Status, Progress gate, Readiness, Channels, and (if applicable) Campaigns.
The title shows the official name if set, otherwise the working name. The top-right button is context-aware — it's Push to Shopify (unlisted) until the product is in Shopify, then changes to reflect its Shopify state.
The page is live — changes made elsewhere (or by a teammate) appear without a reload.
How saving works
Two patterns, used consistently across setlist:
- Autosave — most inline fields (names, prices, SKUs, BOM quantities, forecast, classifications, test results) save themselves shortly after you stop typing, and immediately when you click away. A small line reads Saving… → Saved. No save button.
- Explicit actions — multi-part builders and one-shot operations use buttons: Save options, Add supply, Add test, Add note, stage changes, and the Shopify/Fulfil steps.
If a teammate changed the product while you were editing, a save can be rejected with "This product changed in another session. Review the latest values and save again." — just reload and re-enter.
The right-hand aside
Status
- Stage — a dropdown to jump directly to any stage. (This bypasses the gate — use the Advance button for the normal path.)
- Shopify — a badge: Not in Shopify / Draft / Active, with a "View in Shopify" link once linked.
- Owner, Product line, Launch, Forecast total, Launch date, and Due (with an Overdue / Due soon / On track badge).
Progress gate
The checklist for advancing to the next stage — "What's left before {next stage}." Auto items tick themselves; manual items are clickable. The Advance to {next stage} button activates only when every item is done. Full details: Stages & progress gates.
Readiness
A stage-agnostic 6-point checklist (Product named · SKU assigned · Final price set · Supplies added · Sales channels selected · Tests). This is the same number shown on the Products list.
Channels
Tap a row to toggle a sales channel: Online Store · POS · Shop. (Helper: "Tap to add or remove a channel.")
Campaigns
If the product belongs to any campaigns, they're listed here as links. Read-only — manage membership from the campaign side.
The progressive (stage-aware) view
By default (Settings → Preferences, on), the page follows the product's current stage:
- The current stage card is expanded (with a "Current" badge).
- Past stages collapse to a one-line ✓ summary you can click to expand and edit.
- Future stages collapse to a dimmed row explaining what they unlock; you can peek inside, but the fields are disabled until you get there.
Turn the preference off to see the whole page expanded at once.
Variants, bill of materials, costs…
Stage 1 — Plan
The product's identity and schedule.
- Identity: Working name, Product type + Subcategory (cascading), Owner, Description, and an optional Link to brief. The container SKU shows read-only as a chip.
- Timing: Launch group, Launch date (locked to the launch's start when a launch is assigned), and Target due date (defaults to launch date minus your design lead time).
- Availability: Product line, its read-only Behavior, and the conditional field it drives — Quantity (units cap) for limited-quantity lines, or End date for limited-date lines.
- Classifications: any classification fields set to show at Plan.
The official name is not set here — it first appears in Review. Plan carries it through untouched.
Stage 2 — Design
The heart of the page: variants, the bill of materials, costing, and the design sign-off.
Variants & options
You never see the word "variant" until there's more than one. A simple product quietly has a single default variant carrying its SKU, cost, and price. Variant grouping UI only appears once you add options.
Base product sits at the top: the master bill of materials and the total forecast. For a single-SKU product, build the base first, then add options to split it into variants.
To create variants, click Create variants (or Edit options if you already have some) to open the options editor:
- Define up to 3 options (Shopify's limit), each with a name (e.g. Size, Metal) and a list of values.
- New products pre-fill the option types defined on their product type (e.g. Rings → Size: 5,6,7,8,9) — edit or remove them freely. An Add from your option types shortcut offers presets you haven't added.
- Each value can carry its own SKU code (otherwise it's auto-derived), and each option has a Tests required for this option toggle.
- Click Save options. setlist builds one variant per combination. Existing combinations keep their SKU, price, and costs; new variants are created and inherit a fresh copy of the base bill of materials.
Once there's more than one variant, a Variants (n) section appears with a collapsible panel per combination.
↓ Saving builds one variant per combination.
SKUs
SKUs are auto-generated, never hand-built — assembled from the product type's template and your global prefix. The product-level "container SKU" is read-only; each variant's SKU is editable as a quiet override. See Product types & SKUs for how the template works.
Bill of materials (BOM / supplies)
Each variant has its own bill of materials — the supply/material lines and quantities that make one unit. (Packaging like boxes and cards goes here too — it's just supply lines.)
- Add supply: click Add supply, pick a material from the materials catalog (synced from Fulfil or added by hand), and enter the quantity per unit. "Unit cost is pulled from the material — you only enter the quantity used per unit."
- Can't find a material? Use Add new material to stub one (name + estimated cost + note). It lets you keep designing, but it blocks Ready for launch until it's added to Fulfil and reconciled.
- Copy between variants: Copy base BOM to all variants (overwrites each variant from the base), or Copy BOM from another variant (appends its lines).
| Supply | Qty | Unit cost |
|---|---|---|
Sterling silver wire 18ga SS-WIRE-18 | 8 cm | $0.42 |
Jump ring 4mm SS-JUMP-4 | 2 pc | $0.05 |
Kraft gift box PKG-BOX-S | 1 pc | $0.30 |
Packaging lives in the BOM too.
Costs & pricing
Inside each variant panel, the costs are read-only stats — you only type the planned Price:
| Field | Editable? | What it is |
|---|---|---|
| Material cost | No | Sum of the bill of materials (quantity × unit cost), packaging included |
| Labor cost | No | Pulled from Fulfil |
| Total cost (COGS) | No | Material + Labor |
| Price | ✅ Yes | The planned retail price — the pricing intent set in setlist |
| Margin | No | (Price − COGS) ÷ Price, with your target margin shown |
| Suggested | No | The price that would hit your target margin at the current cost |
Once a product exists in Shopify, setlist also mirrors its live Shopify price. If live and planned prices disagree, a drift banner shows both values for every affected SKU and asks you to resolve it explicitly:
- Adopt Shopify price as the plan updates the planned price in setlist.
- Push planned price to Shopify restores the live Shopify price from the plan.
Nothing resolves silently. The Price history panel keeps an append-only record of planned edits, Shopify changes, pushes, and adoptions with timestamps and actor/source details.
Forecast
How many units you expect to make/sell, per variant:
- Total forecast (on the Base product) distributes across variants by the product type's forecast weights (even split if none).
- Each variant also has its own Forecast units field you can override directly.
Design approved
A Mark design approved stamp sits at the bottom of the Design card. Tick it once the design, variants, BOM, and SKUs are locked — it satisfies the Design gate so the product can advance to Review. (Undo any time.)
Stage 3 — Review
Finalize for launch.
- Official name — set the Shopify-ready name here (it first appears at this stage). This is what syncs to Shopify.
- Finalize pricing & forecast — a table with one row per variant: set each final price (prefilled from the suggested price) and forecast (prefilled from the type target). Margin and forecasted gross profit update live.
- Raw materials needed — the procurement hand-off: total materials to build the whole forecast (quantity per unit × forecast, summed across variants), with on-hand and reorder data from the catalog, plus an estimated total spend. A Short badge flags runs that exceed stock on hand.
- Classifications set to show at Review.
Stage 4 — Ready for launch
The Launch checklist — hand-off steps to get the product live. Pushing to Shopify creates an unlisted product (active, not published) so Fulfil can sync it. Customers can't see it until you list it live.
First time? Pushing to Shopify and listing live each need an extra Shopify permission the first time you use them — setlist shows a Request access card in place of the step. Grant it once and the action appears. See Shopify access & permissions.
- Push to Shopify (unlisted) — creates the product in Shopify (active but unpublished) with the full options/variants/SKU/inventory matrix, and links it back. (Disabled until there's a name and a price, and until inventory access is granted.) Fulfil ingests it within ~2 hours.
- Product synced to Fulfil — Check Fulfil looks up the SKU and ticks when found (or mark it synced manually). Needs the Fulfil connection.
- BOM in Fulfil — (scaffolded — the Fulfil BOM API isn't wired yet, so this step stays pending for now.)
- List it live in Shopify — publishes the product to your channels (needs publishing access). Add the listing content (description + photos) in Shopify, then go live. Once it's live, setlist's job is done.
Pushing to Shopify creates an unlisted product so Fulfil can sync it.
Tests
The Tests section (always visible at the bottom) records internal QA tests against the product. A Tests required switch turns testing on/off for the product. When on, tests are organized by option value (a test on "Size: 7" covers every variant with that value). Add test pulls names from Settings → Testing presets, which prefill the prescription and owner. Update each test's status and result inline. The cross-product view of all tests lives on the Tests page.
This is internal QA testing, not the sample-to-people User testing feature.
Design notes
A running thread for design decisions, test outcomes, and questions. Type a note (Enter sends, Shift+Enter for a newline), and attach images with the paperclip, by pasting, or by dragging them into the composer (under 10 MB each). Pending images appear inside the composer before you send. Notes are attributed to you automatically — there's no author field.
There's no separate reference-image gallery on the product page today. The only image attachments here are images on design notes.
Shared materials
If this product uses a raw material that other products also use, a Shared materials section appears, showing the shared stock and which products draw on it — handy for spotting contention before a run.