Back to selected work
Demo · Selected work · 02

How a dental lab actually makes (or doesn't make) money.

A live unit-economics model for an oral & maxillofacial lab. Move the sliders — pricing, volume, payroll, materials — and watch the P&L, capacity and operator's notes update.

Realistic demo data — not actual Dentrilab P&L100% client-side · no API callsBuilt by Gerardo Espinosa
Per-product inputs

Monolithic zirconia crown

$80
$7

Zirconia disc, ceramic powder, ingot, titanium base, etc.

1.4 h

CAD design (Exocad) + ceramics + finishing + makeup.

70 units
Fixed costs · monthly
$1,100
$3,600
4 FTE

Drives total skilled hours available per month.

$1,950
$110k

Mill, sinter oven, firing oven, 4 resin printers, 3 CAD workstations.

5 years
Monthly revenue
$32k
350 units · $91 avg
Material cost
$4.7k
15% of revenue
Monthly EBITDA
$19k
After $8.5k fixed
EBITDA margin
59%
Breakeven: 110 units/mo
Capacity check
Skilled labor123%
868h demanded / 704h available · 4 techs × 8h × 22 days
Sintering oven8%
37h demanded / 440h available · 2 cycles/day, 45 units/cycle
Margin by SKU

Where each peso actually comes from

Monolithic zirconia crown

70 u/mo · $5.6k rev
After material only91% · $5.1k
Fully loaded82% · $4.6k

Stratified zirconia (Cerax Ceram)

70 u/mo · $6.4k rev
After material only87% · $5.6k
Fully loaded69% · $4.5k

Lithium disilicate crown

70 u/mo · $6.0k rev
After material only85% · $5.1k
Fully loaded74% · $4.5k

Lithium disilicate on implant

70 u/mo · $6.6k rev
After material only78% · $5.1k
Fully loaded65% · $4.3k

High-aesthetic veneer

70 u/mo · $7.2k rev
After material only86% · $6.2k
Fully loaded69% · $4.9k
Operator's notes

What the numbers are actually telling you

Critical

Production demand exceeds technician capacity

You need 868 skilled hours/month but only have 704. Either you're paying overtime (not modeled), missing the 24h SLA, or one of these numbers is optimistic.

Healthy

Strong EBITDA margin for a regulated service business

59% EBITDA margin. This is what funds the second location, the equipment upgrade, or the founder's first vacation.

Operator's note

Monolithic zirconia crown is your margin leader

82% fully-loaded margin vs 65% on Lithium disilicate on implant. If they're sold at the same volume, you're subsidizing one with the other — and your sales pitch should reflect that.

Operator's note

Operator's note — stratified zirconia is a margin trap

Looks premium at $92 per unit, but per skilled hour it returns $20 vs $47 for monolithic. The ceramic application step is the hidden cost — your most skilled technician's hour is your scarcest resource, not the slot in the calendar.

Operator's note

Material is eating your implant crown

Materials are 22% of the implant-disilicate price — vs <15% on the others. Either renegotiate with your titanium-base supplier (volume discount above 30 units/mo is standard) or price this SKU separately for clinics that demand it.

What this model assumes (and what it doesn't)expand

Variable vs fixed. Only direct material is treated as truly variable cost. Technician payroll is fixed in reality (salaried staff) — but it's allocated per-product so you can see fully-loaded margin per SKU. EBITDA never double-counts: it's revenue − material − actual fixed opex (rent + tech + admin + depreciation).

Capacity. Skilled labor is 4 techs × 8h × 22 working days/month. Sintering oven is 2 10h cycles/day, 45 units per cycle.

Depreciation. Straight-line over the years you set. Real lab equipment (mills, ovens) often runs longer with maintenance — that's upside, not downside.

What's missing on purpose. Taxes, financing cost, replacement capex reserve, working capital, bad debt, scrap rate. Real P&L is 10–15% noisier than this. The model is a thinking tool, not an accounting record.

How it works

What this demo does, how, and what's missing

What it does
  • →Models 5 real dental lab SKUs with full per-unit economics: selling price, material, skilled labor hours, oven cycles, and monthly volume.
  • →Computes EBITDA, per-SKU fully-loaded margin, and labor + sintering-oven utilization in real time as you move the sliders.
  • →Surfaces operator insights: margin traps, capacity bottlenecks, pricing levers — including which SKU underperforms per skilled-labor-hour, not just per unit.
  • →Shows the blended breakeven and how it shifts when you change mix, pricing, or headcount.
How it does it
  • →Pure TypeScript math — no API, no backend. Sliders update a product snapshot; useMemo re-runs compute() on every change.
  • →Tech payroll is fixed (salaried staff) but allocated per-SKU to reveal fully-loaded margin. EBITDA never double-counts it.
  • →Sintering oven modeled as batch cycles (45 units/cycle × 2 cycles/day) — the real constraint, not labor time.
  • →7 heuristic rules generate operator commentary. No LLM — deterministic, replayable, instant.
What a real impl would need
  • →Live data from the lab's ERP or production system — current labor hours are field estimates, not time-tracked actuals.
  • →Scrap rate and rework costs (typically 2–5% of material) — excluded here but very real in practice.
  • →Per-dentist-client profitability — some clients have higher rework rates that make them negative-margin at the quoted price.
  • →Taxes, financing cost, working capital, and replacement capex reserve — excluded on purpose to keep the model as a thinking tool, not an accounting record.
  • →Competitive pricing benchmarks by region — most labs underprice because they never see what peers charge per SKU.

The model structure transfers to any service business with SKU-level cost complexity — commercial kitchens, custom fabrication, sterile compounding pharmacies.