Built, not planned

Everything below exists in the product today.

No roadmap items, no "coming soon" tiles. If it's on this page you can use it on your first day, and the screenshots are from a working salon account.

Sessions

The ticket

  • 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.
mixmargin · ticketBowls, grams, cost and price on one screen.
75g
Root bowl
mixmargin · clientsSearchable client list with CSV import and duplicate merge.

Clients

Colour history that survives

  • Every completed session lands on the client's timeline with shades, grams, 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.

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.
mixmargin · inventoryBrand rollups with low-stock counts and unpriced flags.
1 priced ?
Unpriced shade flagged

Finance

Invoices, tax and the ledger

mixmargin · financeInvoices generated from sessions, with issued totals and open balance.
  • 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 · invoiceColour charges arrive as separate invoice lines.
mixmargin · expenses

Receipt upload capture pending

Expenses and receipt upload — capture pending.
mixmargin · reportsThis week / month / quarter, computed from real sessions.

Reports

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.

Team & data

Your salon, 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.
mixmargin · settingsMarkup and waste factor set once, applied everywhere.
$10 → $15
50% markup, live example

Want to see it against your own numbers?