Built, not planned
The profitability platform, feature by feature.
Everything below exists in the product today — no roadmap items, no "coming soon" tiles. Service costing first, colour costing as one powerful part of it.
Service costing
The ticket
- One ticket per visit covering haircuts, colour services, treatments, styling and retail.
- Named bowls per ticket (Root, Toner, Gloss — your own preset list).
- Pick shades from your backbar, enter grams; cost per gram comes from container size, density and wholesale cost.
- Bowl price = cost × your markup. Per-brand markup overrides the salon default when a bowl is single-brand.
- Salon-wide waste factor (0–10%) pads every bowl for tube residue.
- Add-ons and tagged services with base prices roll into the ticket total.
- Per-bowl processing timers with 20/30/45-minute presets and an overrun indicator.
- Before/after photos attach to the session, stored privately per salon.
- Completing a session locks the ticket, saves the formula and deducts inventory.
75g
Root bowl
Clients & formulas
Know every gram. Know every dollar.
- Every completed session lands on the client's timeline with products used, price and photos.
- "Repeat last formula" clones the previous ticket's bowls into a new session.
- Quote tool prices a service preset before you commit.
- CSV import with duplicate detection, plus a merge flow for the duplicates you already have.
- Free-text notes for allergies, target level and home care.
Product usage & inventory
A backbar that counts itself
- 1,148 professional shades in the shared catalogue, importable into your own backbar in bulk.
- Products carry role (colour, lightener, developer, additive), container size, unit, density and mix ratio.
- Live cost per gram on every shade; unpriced shades show "?/g" and flag any bowl that uses them.
- Stock levels with per-shade low-stock thresholds and brand-level rollup badges.
- Receive stock by container count; completing sessions deducts the grams you mixed.
1 priced ?
Unpriced shade flagged
Overhead & expenses
Invoices, expenses and the ledger
- Invoices generate straight from a completed session, with colour charges, add-ons and services as separate lines.
- Draft → issued → partially paid → paid → overdue → void, with your own numbering prefix.
- Salon and client details snapshot onto the invoice at issue time, so history stays accurate.
- Printable invoice page plus PDF download.
- Effective-dated tax codes and rates keep historical invoices at the rate that applied then.
- Expenses with receipt upload, category splits, vendors and recurring templates.
- Daily close with expected vs counted cash, lock and audited reopen.
- Accountant export: a ZIP of CSVs across invoices, payments, expenses, inventory and journals.
- Per-staff finance permissions with presets for front desk, bookkeeper, manager and read-only accountant.
mixmargin · expenses
Receipt upload capture pending
Profitability visibility
Where the money went
- Product cost, revenue, profit and grams mixed for the selected range.
- Grams by brand, sessions over time, top products by grams.
- Revenue by service, average waste per stylist, and a low-stock list.
Small-team visibility
Your business, walled off
- Owner and stylist roles; owners control pricing, team and finance admin.
- Invite codes bring stylists into your salon workspace.
- Every table is scoped to your salon by row-level security in the database, not just hidden in the UI.
- Photos, receipts and invoice PDFs live in private per-salon storage.
- Works on the salon floor: desktop sidebar, mobile bottom tabs, camera capture for photos.
$10 → $15
50% markup, live example

