Skip to main content
Outcome: each menu selection has an explainable ingredient cost. Before starting, save your menu. Use Products & Pricing → Materials for pack prices and Recipes for quantities per serving. The Materials guide and Recipes guide cover those forms.

Open product costing

Edit your saved product in Products & Pricing → Products. Open its Costing tab and click Set up or review product costing. The costing page has Base cost, a tab for each option group such as Options: Temperature, and Preview. Base cost fields stay visible. Configured options show a summary with Edit to expand their fields inline. Switching tabs keeps your draft and Preview selections. Only Save product costing persists the configuration. Cancel returns to the product editor and asks before discarding unsaved changes. A failed save keeps your edits; a version conflict means another save changed the configuration while you were editing. Menu selling prices stay unchanged. Use the Help link beside each section heading for its explanation. Help opens separately so your draft stays available. To change what a cost is built from, follow the links on the page: Open recipe under a recipe picker, the recipe name in a “Uses recipe” option, an option group’s heading, or a material name in Preview. If you have unsaved changes, the page asks before leaving. The recipe and material pages list what uses them under Used by, with links back to each product’s costing.

Set the base cost

  1. Enter each material’s pack price, pack size, and usable yield in Materials.
  2. Create a recipe with the amount consumed per serving, including packaging.
  3. Open Base cost and use Costed from to pick the recipe, or choose Unit cost for a bought-in product.
  4. For Unit cost, enter the cost of one product in Unit cost (RM).
  5. Click Save product costing to persist the draft.
Creating a recipe alone does not link it to a product. A zero unit cost needs I confirm this unit cost is zero.; confirm it only when the cost really is zero. A base with no recipe or unit cost produces an incomplete Preview.

Copy costing from another product

If another drink has the same option groups, open Manage → Copy costing from…, pick that product and click Copy. Options with the same group and option name copy exactly what that product has, including No cost change. Options it doesn’t have keep what they have. Review the rows, then click Save product costing; nothing is saved until you do.

Copy one option group

To copy only one group’s rules, click Copy from… next to that group’s name. It matches by option name only, so it works even when the other product’s group has a different name. Only options that have a rule on the other product are copied; options it leaves as No cost change keep what they have here. The base cost and other groups stay as they are. For example, Cafe Latte already swaps beans for each bean option, and Dirty Latte uses a copy of the same group:
  1. Open Dirty Latte’s Costing page.
  2. Next to Beans Options, click Copy from….
  3. Pick Cafe Latte and click Copy.
  4. Check the bean rows marked Unsaved changes. The toast says how many rules were copied, for example “Copied 5 Beans Options rules from Cafe Latte.”
  5. Click Save product costing.
Options with no same-named option on Cafe Latte keep what they have. A rule set to Uses a different recipe or unit cost isn’t copied this way; set it on the row, or use Manage → Copy costing from….

Configure option costs

Open each Options: [group name] tab and review its summaries. For example, Hot can show No cost change, while Cold shows Adds Ice · 150 g · Shared. Click Edit to expand an option’s fields inline. Choose the action under Cost rule, then fill in the fields it reveals. Hide editor collapses the fields and keeps your edits. The summary reflects your current draft; Unsaved changes marks options you have changed. Only Save product costing persists them. Options needing setup or correction keep their fields visible, including references that become missing after Refresh. Review and complete those fields before relying on Preview.

Cost rules

An option with no rule chosen counts as No cost change. Swaps a material changes one material. Uses a different recipe or unit cost changes the whole base. Neither changes the selling price.

Which rule?

Pick the first one that fits:
  1. No cost change: costs the same as the base.
  2. Costs extra materials: adds on top, such as an extra shot or syrup.
  3. Swaps a material: same drink, one material changes in the same unit, such as a bean or milk choice.
  4. Uses a different recipe or unit cost: several things change (cup, ice, milk amount), or it is a different item altogether.

Swap House Blend for Single Origin

For a base recipe containing 18 g of House Blend beans:
  1. Open the bean option group’s tab.
  2. Keep House Blend as No cost change.
  3. Set Single Origin to Swaps a material.
  4. Choose House Blend beans as the source material and Single Origin beans as the replacement material.
  5. Check Preview, then save product costing.
The swap keeps the original 18 g. It also swaps the material in extras, so an extra shot uses Single Origin beans too. You do not need a separate recipe for this swap.

Swap one material across many options

When most options in a group swap the same material, set them up in one step:
  1. Next to the group’s name, click Swap material….
  2. Under Replace material, choose the material to replace, for example House Blend beans.
  3. Tick the options to change. Options with no rule are ticked already; options that already have a rule are only changed if you tick them.
  4. Click Apply. Each row now asks you to choose a replacement.
  5. Pick each row’s replacement under With material, then click Save product costing.
Save waits until every swap has a replacement. To skip the rows you haven’t filled, click Reset them in the message. If several selected choices swap the same source material, the selection remains incomplete. A source missing from the recipe, a different material unit, or a base costed from Unit cost also remains incomplete. A swap cannot be repeated more than once per drink.

Use a different complete recipe

Choose Uses a different recipe or unit cost when the complete base changes. Select its full recipe or unit cost directly under that option. Include packaging in the recipe; leave extra add-ons out so they are added once afterward.

Example: latte sizes and beans

A Latte has two option groups:
  • Temperature & Size: Hot 10oz is No cost change on the base recipe “Latte, Hot”. Cold 14oz and Cold 16oz each use Uses a different recipe or unit cost with their own recipe, because cup, ice and milk all change.
  • Beans: House Blend is No cost change. Every other bean is Swaps a material from House Blend beans.
A swap applies to whichever recipe the size picked, so one swap per bean covers every size. This works when all three size recipes use the same House Blend material. Without swaps, 4 beans × 3 sizes would need 12 recipes.

Example: bought-in pastries

For a pastry you buy in and resell, set Costed from to Unit cost, for example RM 8.40. No material or recipe is needed. If one product groups two different bought pastries as options, such as Cinnamon Roll Original and Nutella (Nutella sells for +RM 2.00), set Nutella to Uses a different recipe or unit cost with a unit cost of RM 9.80. That number is the full cost of a Nutella roll, not RM 8.40 + RM 9.80. Use a material and recipe instead only when you cost packaging too or the same item feeds several products.
Cost rules are saved per product, not on a shared option group. Another product using the same shared group needs its own costing.

Combined recipe exceptions

Use this advanced section when whole-base replacement choices can be selected together, or when a repeated replacement quantity needs its own complete recipe. It appears when relevant or when an existing exception needs review. Mutually exclusive alternatives do not need a combined exception merely because there are several of them. For example, Large and Oat milk can together select one Large Oat Latte recipe. Choose the exact options and quantities, then assign that complete recipe to the combination. The calculator uses that base once; it does not add a Large recipe to an Oat recipe. Material swaps and extras are handled separately. Existing incomplete or removed-option exceptions remain visible for review or explicit removal. If the product has no active option groups, review them under Base cost.

Add-ons

For an extra, enter the materials directly. Once the shop has add-ons, Which materials? appears and lets you choose either Enter materials here to list ingredients for this product only, or Shared: [add-on name] to reuse an add-on. Customize for [product] only copies the shared lines into the product draft; later changes to that add-on do not update the copied lines. Use Manage → Add-ons to open shared definitions separately. Before saving a shared change, review and confirm the listed affected products. Saving an add-on is separate from saving the product draft and can make an already-open costing draft’s version stale. Sharing a menu option group alone does not establish ingredient quantities.

Refresh materials, recipes and add-ons

  1. Use the section’s Manage menu to open the relevant Materials, Recipes or Add-ons page in another tab.
  2. Create or update the reference there and save it.
  3. Return to product costing and click Refresh beside Manage.
  4. Select the new entry or review the changed ingredients, then check Preview.
  5. Save product costing when your draft is ready.
Refresh updates picker data and add-on summaries. It preserves your unsaved costing rules, selected tab, Preview choices and quantities; it never saves the draft. Missing selected records stay visibly missing so you can repair the reference. A material priced RM 0.00 must be confirmed once on its own material page; the Confirm zero-cost materials card links to each one that’s still waiting (it opens in a new tab, so your draft stays put). If its pack size, yield or unit changes later, confirm it again there. A failed refresh keeps your previous reference lists and edits. Retry Refresh to load the latest entries. Refresh does not bypass a save conflict after another screen changes an affected product; review that conflict rather than discarding the draft silently.

Preview selections

  1. Open Preview and choose a combination: one-choice groups use radios, multiple-choice groups use checkboxes.
  2. Choose None for an optional single-choice group when you want no extra.
  3. Adjust repeated extras and product quantity with the quantity controls.
  4. Inspect Cost per drink and the ingredient breakdown; multiple products also show a total.
  5. Repeat for other combinations, then save costing.
Owner Preview can cost active choices marked Unavailable for ordering. This lets you prepare costs before offering a choice to customers. Preview does not change availability or place an order; customers still cannot order unavailable choices. Costs refresh as selections or costing rules change. Refreshing reference data clears old results and recalculates against current inputs. Ingredient quantities and component costs describe one drink. The calculator sums precise component costs, rounds once per drink, then multiplies by product quantity. Displayed component values are individually rounded and may not add up exactly to the per-drink total. An incomplete Preview has no total. Resolve its named missing inputs; known components are only a partial breakdown. A successful Preview proves that selection, not the entire menu.

Historical costs

Performance uses the cost at preparation time. If preparation was not recorded, it uses a labelled sale-time estimate. Later price edits do not rewrite recorded past costs. A product’s first costing also covers its earlier sales this month. Save it in the first 7 days of a month and it covers last month’s sales too, using today’s material prices. Cost first, then review last month: a review done before the cost lands goes out of date. Changes to an existing cost only apply from now. Adding a mapping today may not fix older orders with missing selection identities or historical inputs. Use missing-information guidance. Ready when: intended combinations preview with complete costs and the configuration is saved. Next: Record expenses.