Pricing Coach — Per-Product Margin Health
How margin health is computed, how to apply suggested prices safely, and how Pricing Coach differs from the Scale-tier Pricing Optimizer.
What It Is
Pricing Coach shows every product with its margin health color-coded (green / yellow / red) and a one-click Apply button to update prices. Available to Growth+ bakeries at /dashboard/growth/pricing.
How Margin Is Computed
margin % = (basePrice − cost) / basePrice × 100
basePrice is your product price. cost is computed automatically by the ingredient → recipe → product cascade. When you edit an ingredient cost, Product.cost updates within seconds.
Health Classification
| Status | Definition | Color |
|---|---|---|
| Healthy | Margin ≥ target (default 60%) | Green |
| Warning | Margin between critical and target | Amber |
| Critical | Margin below critical (default 40%) | Red |
Both thresholds are editable per bakery in Growth Coach settings:
- Target margin — range 30-80, default 60. Industry norm for bakeries is 60-70%; premium/custom often 70-80%+.
- Critical below — must be lower than target. Default 40.
Suggested Prices
For any non-healthy product, Pricing Coach computes:
suggestedPrice = cost ÷ (1 − target/100) rounded up to 2 decimals.
Example: cost $2.50, target 60% → suggested $6.25 (marked "Increase by $X.XX to reach 60% target margin").
Safety Caps
Two layers of protection prevent runaway price changes:
- 3× cap on suggested prices — if the raw target price would be more than 3× the current price, it's clamped and flagged with a "capped" badge. This usually means the cost basis needs review, not a 5× price hike.
- Tenant-scoped update — Apply uses a multi-condition update that re-checks the product belongs to your bakery at the moment of write. Prevents any race condition between display and click.
Applying a Suggestion
Click Apply on any row:
- Default behavior: a confirmation dialog "Update Product from $X to $Y?" — click OK to commit.
- The suggested price is editable in the row — change it before clicking Apply if you want a different number.
- On success, the row updates and the margin recomputes. No page refresh needed.
Turn off the confirmation dialog in settings ("Ask before applying") if you trust the suggestions and want 1-click apply.
Bulk Apply?
Intentionally not supported. Every price change is a deliberate, one-at-a-time action. Bulk apply is error-prone and customer-visible; the friction is by design.
Pricing Coach vs Pricing Optimizer (Scale tier)
Bakeries on the Scale tier see both — not two tiers of the same feature:
| Pricing Coach (Growth+) | Pricing Optimizer (Scale only) | |
|---|---|---|
| Scope | Per-product margin check + suggested price | Scenario sim, elasticity modelling, competitor analysis |
| Workflow | Daily check, one-click apply | Deep analysis, what-if scenarios |
| Engine | Deterministic math + Haiku phrasing | Sonnet reasoning over rich context |
Growth Coach's Pricing Coach is the daily health dashboard. Pricing Optimizer is the workbench you open when you want to deliberately re-price a line.
What Happens With 0 Products or Missing Costs
Products with basePrice = 0 or cost = 0 are excluded — we can't compute a meaningful margin. If none of your products have valid cost + price data, the page shows an empty state with a link to the product editor.
Relation to Margin Alerts (Spec 039)
The Spec 039 dashboard margin-alert banner ("N products below target") and weekly digest margin section use the same computation. Clicking the banner lands you here on Pricing Coach to actually fix the flagged products.