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.
75g
Root bowl
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.
1 priced ?
Unpriced shade flagged
Finance
Invoices, tax 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
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.
$10 → $15
50% markup, live example