Guide · Made-to-order products on Shopify
A practical Shopify workflow for made-to-order products
Define one reusable specification, price the choices you can support, send straightforward configurations to checkout, route custom work to a quote your team reviews, collect a deposit and the balance where your plan allows, and carry the same specification into production. This guide walks that path using Makewright’s actual behaviour.
The short answer
Made-to-order selling breaks on Shopify when the customer’s choices, the price and the workshop instructions live in three different places. The workflow below keeps them together. A customer builds a specification on your product page. Makewright validates it and calculates a price on the server. Configurations backed by real Shopify merchandise go to checkout; formula-priced or review-required work goes to a quote your team approves. Approval creates a Shopify draft order for the full price or a deposit, the balance follows as a second invoice, and a printable production sheet carries the agreed specification and payment state to the bench.
Every worked number in this guide comes from Northline, Makewright’s demonstration store, and its Ridgeline dining table starter template. They are demo prices in USD, reproduced by the app’s own tests. They are not customer orders, merchant results or a pricing recommendation, and Northline is not a case study.
- Stage
- 1 of 6
- Who acts
- You, in the Makewright admin
- Where
- Templates, then Products and your theme’s product template
- Plan
- Any plan. Conditional logic and uploads need Growth or Pro.
Write the specification once
A template is the reusable specification behind a product. Add fields in the order a customer should answer them. Give each one a plain customer-facing label and a short, stable key, because pricing rules and every historical order refer to that key.
The Ridgeline starter shows the field types that matter for made-to-order work.
| Field | Type | What it does for the build |
|---|---|---|
| Table size | Single select | 180 × 90 cm, 220 × 100 cm or Custom size. Custom size is flagged as requiring a quote and carries the fulfillment label “Custom top — see dimensions”. |
| Custom dimensions | Dimension group | Length 120–320 cm, width 70–120 cm and top thickness 3–8 cm in 1 cm steps. Shown and required only when Custom size is chosen. |
| Timber | Swatch | White oak, American walnut or ash, shown as colour swatches. |
| Finish | Single select | Hard wax oil, matte lacquer or Custom stain match. The stain match requires a quote. |
| Stain or timber reference | File upload | Up to three JPG, PNG, PDF or SVG files. Shown only when Custom stain match is chosen. |
| Base | Single select | Trestle, tapered leg or blackened steel plinth. |
| Add an extension leaf | Checkbox | Adds 50 cm and stores under the top. |
| Quantity | Quantity | 1 to 20 tables. |
| Access or delivery notes | Long text | Stairs, lift access, site contact. Up to 600 characters. |
Two details do the most work later. Conditional logic keeps the form short: the dimension group and the reference upload appear only when an earlier answer makes them relevant. Fulfillment labels translate a customer choice into workshop language, so “180 × 90 cm — seats 6” prints as “Top 1800×900” on the production sheet.
When the template is ready, run its price tests, publish it, assign it to an active Shopify product from Products, then add the Makewright Configurator app block to your product template in the theme editor. Makewright does not edit theme files; the block needs an Online Store 2.0 JSON product template, which is how Shopify’s theme app extensions work. Published versions are immutable, which is what lets an old quote still show the rules it was priced under. Template documentation.
Carried forward → a published template version with stable field keys, fulfillment labels and review flags, attached to a live Shopify product.
- Stage
- 2 of 6
- Who acts
- You, in the Makewright admin
- Where
- The template’s pricing rules and saved price tests
- Plan
- Fixed-price options on every plan. Formula pricing needs Growth or Pro.
Price the choices you can support
Makewright prices on the server, never in the browser, from named rules attached to the template. The Ridgeline template uses eight.
| Rule | Type | Demo amount |
|---|---|---|
| Table base price | Shopify variant | $3,190.00 |
| Larger stock size | Fixed add-on | +$420.00 for 220 × 100 cm |
| Walnut upgrade | Fixed add-on | +$380.00 |
| Matte lacquer | Fixed add-on | +$140.00 |
| Blackened steel plinth | Fixed add-on | +$560.00 |
| Extension leaf | Fixed add-on | +$320.00 |
| Custom top area | Per area | $960.00 per m² of length × width, only for Custom size |
| Workshop minimum | Project minimum | Raises a custom total to at least $1,800.00 |
The rule type decides the route as well as the amount. A base variant and fixed add-ons describe merchandise Shopify already knows about, so a configuration built only from them can check out. Per-dimension, area, volume, percentage, tiered-quantity, formula and minimum rules produce an estimate that no cart can charge, so any configuration that uses one routes to a quote.
Three saved test cases, three results
| Configuration | Calculation | Total | Route |
|---|---|---|---|
| 180 × 90 cm, white oak, hard wax oil, trestle, one table | Base price only | $3,190.00 | Checkout |
| Two 220 × 100 cm, walnut, matte lacquer, steel plinth | ($3,190 + $420 + $380 + $140 + $560) × 2 | $9,380.00 | Checkout |
| Custom 260 × 110 × 4 cm, white oak, hard wax oil, trestle | $3,190 + (2.60 × 1.10 m² × $960 = $2,745.60) | $5,935.60 | Quote |
Each saved test records the inputs, the expected total and the expected route. A template cannot be published without at least one test, and a failing test blocks publication, so a later edit to a rate cannot quietly change a total or move a configuration from checkout to quote. The $1,800 workshop minimum is below the custom total here, so it adds nothing; thickness stays in the specification but this area rule multiplies length and width only.
See the formula-pricing page for the rule types or read pricing and routing documentation.
Carried forward → a price trace: which rules fired, under which published version, and whether the result is a checkout price or an estimate for review.
- Stage
- 3 of 6
- Who acts
- The customer, then your team
- Where
- Your product page, then the Makewright quote inbox
- Plan
- Any plan.
Send it to checkout or to a reviewed quote
The checkout path
For a supported configuration, the storefront asks Makewright for a cart payload. That payload contains Shopify variant ids, quantities and line-item properties, never a price. Shopify prices the merchandise itself and the customer’s choices travel with the order as line item properties. On Northline, the 180 × 90 cm oak table is that path.
The quote path
Custom size, Custom stain match or any formula-priced result submits a quote request instead. The request keeps the configuration, the price trace, the published rule version, uploaded files, the customer’s name and email and every message together, and it arrives in the quote inbox as New.
- Statuses a quote can hold
- New, In review, Awaiting customer, Approved, Invoice sent, Deposit paid, Paid, Declined, Expired.
- What approval does
- Creates the Shopify draft order, or updates the existing one when terms change. It never duplicates the order.
- What approval does not do
- Take payment. The quote only moves to Paid when Shopify reports the draft order paid.
From the quote detail your team can ask for clarification, which moves the request to Awaiting customer; record an agreed total, quantity, shipping note and internal note; decline it; or approve it and send the Shopify invoice. An approved quote without an explicit expiry date is given 30 days, after which an unanswered quote moves to Expired. The draft order Makewright creates is an ordinary Shopify draft order, so it appears in your Shopify admin like any other.
If you would rather agree every price before a customer sees one, turn on request-pricing mode for the product. It hides amounts on the storefront and sends every configuration to the quote desk, including ones that would otherwise have checked out. It is available on every plan. See the quote-request page or read the quote documentation.
Carried forward → either a Shopify cart line with the specification attached as properties, or a quote holding the specification, price trace, files and an agreed total that is ready to invoice.
- Stage
- 4 of 6
- Who acts
- You approve; the customer pays
- Where
- The quote detail, then a Shopify draft-order invoice
- Plan
- Growth or Pro, including an eligible Growth trial.
Collect a deposit
Before approving, set a deposit between 5% and 90% as a whole number. Approval then creates a deposit draft order instead of a full-price one, titled with the percentage, the product and the quote reference. Send its Shopify invoice from the quote detail.
- Agreed total
- $5,935.60, the custom Ridgeline estimate accepted as quoted
- Deposit
- 50% × $5,935.60 = $2,967.80
- Deposit invoice line
- Deposit (50%) — product title — quote reference
- Still to collect
- $2,967.80
When Shopify reports the deposit paid, Makewright records the amount and date, moves the quote to Deposit paid and locks the percentage. Until then, re-approving updated terms updates the same draft order.
Illustrative split. This is a two-invoice arrangement, not financing, escrow or a charge to a saved card. Review tax and shipping on each Shopify invoice before sending.
See the deposits and balances page or read the deposit instructions.
Carried forward → Deposit paid: $2,967.80 recorded against the quote, the percentage locked and $2,967.80 still to collect.
- Stage
- 5 of 6
- Who acts
- You create; the customer pays
- Where
- The quote detail, then a second Shopify draft-order invoice
- Plan
- Growth or Pro.
Collect the balance
When you are ready, often when the piece is finished or about to ship, choose Create balance order. Makewright checks four things: the deposit is recorded as paid, the quote is in Deposit paid, your plan still allows deposits and a positive amount remains. The balance is the agreed total minus the deposit Shopify reported: $5,935.60 − $2,967.80 = $2,967.80.
A balance is always a fresh Shopify draft order, separate from the deposit’s, so the two payments appear as two orders in Shopify against one quote reference. Send its invoice; when Shopify reports it paid, the quote moves to Paid. Makewright never charges a stored payment method and a finished piece does not collect a balance on its own.
Carried forward → Paid: two Shopify orders referencing one quote, and a specification that has not changed since approval.
- Stage
- 6 of 6
- Who acts
- Your workshop
- Where
- The production spec sheet, opened from the quote detail
- Plan
- Any plan.
Hand the specification to production
Open the production spec sheet from the quote detail and print it or save it as a PDF. It is written for the bench, not the buyer.
- The specification in fulfillment labels: “Top 1800×900” rather than the marketing label, or “Custom top — see dimensions” with length, width and thickness beside it.
- Customer file names, customer notes, shipping or delivery details and your internal workshop notes. Open reference photos or drawings from the authenticated quote detail.
- Money state: the price lines, the total, the deposit paid with its percentage and date, and the balance still to collect.
- Order references: the draft order name, stage and status, and any Shopify orders created from it.
The link is signed and expires seven days after it is generated; open the quote again for a fresh one. A customer-facing quote document exists alongside it for sign-off and shows the agreed price and deposit terms once approved.
A production sheet is a handoff, not permission. Your team decides when work starts, confirms the approved specification against its own prerequisites and reads payment state from Shopify, not from the sheet. Read the document instructions or see the furniture workflow.
Carried forward → the same specification the customer built, now in workshop language, with the payment state printed beside it.
Plan fit
Pay for the stages you use.
Starter — $19/month or $190/year
5 active configured products, fixed-price options, both buyer paths and 25 quote requests per month. Covers the specification, checkout or a full-price quote invoice and the production sheet.
Growth — $49/month or $490/year
50 active configured products, conditional logic, formula pricing, file uploads, analytics, CSV/JSON export and 250 quote requests per month. Adds formula pricing, deposits and balances.
Pro — $99/month or $990/year
Unlimited configured products and quotes, advanced formulas with saved tests, branded quote emails and priority support.
Every plan begins with a 14-day trial with Growth capabilities. Compare all plan limits.
What this workflow does not do.
Knowing the edges makes the rest easier to trust.
- It does not charge a calculated estimate at checkout. Checkout uses Shopify merchandise pricing; estimates go through a reviewed quote.
- It does not approve custom quotes automatically. A person reads the request and sets the terms.
- It does not provide financing, escrow or an automatic charge to a saved card. Each payment is a Shopify invoice the customer chooses to pay.
- It does not render 3D previews, send instructions to workshop machinery or replace your ERP or manufacturing system.
- It does not claim results. Northline is a demonstration store and no merchant outcomes, conversion figures or testimonials appear on this page.
Made-to-order questions
Can I sell made-to-order products on Shopify without a quote step?
Yes, when every choice is a Shopify variant or a fixed add-on backed by merchandise. Those configurations check out directly. The quote step exists for formula-priced or review-required work. If every option is already a fixed-price variant, native Shopify variants may be all you need.
Does the customer pay when I approve a quote?
No. Approval creates or updates the Shopify draft order. You send its invoice and the customer pays through Shopify. The quote moves to Paid, or to Deposit paid, only when Shopify reports payment.
Can I take a deposit on Starter?
No. Starter supports a full-price quote invoice and printable documents. Deposit and balance draft orders need Growth or Pro, including an eligible Growth trial.
What happens to a quote nobody answers?
An approved quote without an explicit expiry is given 30 days. When your team next opens the quote inbox, quotes past their expiry move to Expired, so an old estimate is never mistaken for a live offer.
Is Northline a real customer?
No. Northline is the demonstration store Makewright maintains to show the workflow. Try the Ridgeline table yourself; nothing on this page reports a merchant’s results.
See it on a made-to-order product.
Northline is our demonstration store. Try the workflow with demo configurations before setting up your own product.