Salon chair utilisation calculator — chair-minutes worked against chair-minutes open, every night

dinantadinānta, “day’s end” — is for the owner of a family salon, barbershop or beauty parlour with two to six chairs. You already know what money came in tonight. What you have never once seen is how much of the time your working chairs were actually in use.

“Chairs open” means the chairs you had someone working — not the chairs in the room. dinanta keeps no staff of any kind, so it cannot know how many pairs of hands were in today; you apply that when you type the number. A three-chair shop with two people working enters 2. Counting a chair nobody stood behind would make idle chair time read as demand you missed, when it was only an empty chair.

Entry is a shutter-down job: at close, tap the count of each service line you did today. No customer names, no per-visit entry, no appointment book. The worked example below — 42 services across five lines — is 18 taps and a Save, because holding + adds five at a time. A ten-service night is about eight. Once a month you print one A4 sheet.

How chair utilisation is calculated

Chair-minutes open = chairs you had someone working × minutes open. Chair-minutes worked = Σ (your menu duration × your count). Utilisation = chair-minutes worked ÷ chair-minutes open, truncated down so it is never overstated by rounding.

A worked example

Three chairs with someone working each of them, open 09:3020:30 — that is 660 minutes, so 1,980 chair-minutes open. Tonight: 22 haircuts (25 min), 9 beard trims (15 min), 4 head massages (20 min), 6 threadings (10 min), 1 hair colour (60 min).

885 of 1,980 chair-minutes worked · 44.69% · 1,095 chair-minutes idle. Recorded revenue ₹6,020.00 from 42 services.

Service lineCountChair-minutesMinute share
÷ worked chair-minutes
RevenueRevenue share
÷ recorded revenue
Per chair-min
revenue ÷ chair-minutes
Haircut (men)2255062.15%₹3,300.0054.82%₹6.00
Beard trim913515.25%₹720.0011.96%₹5.33
Head massage4809.04%₹800.0013.29%₹10.00
Threading6606.78%₹300.004.98%₹5.00
Hair colour1606.78%₹900.0014.95%₹15.00

Every price and duration above is made up. dinanta ships no menu, no price table and no “standard” service duration — it carries no facts about the world at all, so it cites nothing.

Per chair-min is that line’s revenue ÷ that line’s chair-minutes. It is the gap between the two share columns, as one number: hair colour is 6.78% of chair-minutes but 14.95% of revenue, which is ₹15.00 a chair-minute against threading’s ₹5.00. It is a rate, not a ranking and not advice — dinanta has no view on which line you should do more of, and the rate says nothing about what a minute costs you.

The two share columns each add to exactly 100.00%, and they are different numbers, which is why each is printed with its own denominator. The haircut is 62.15% of chair-minutes but 54.82% of revenue. Reading one as if it were the other is the mistake the labels exist to prevent.

The monthly sheet, and what it refuses to do

Pick a month, get one A4 page: coverage, chair-minutes worked against chair-minutes open, and the service-mix table. The sheet is built only from the days you recorded and it says how many — built from 19 of 26 expected open days — not scaled to a full month. Nothing is averaged in, projected or estimated to fill a day you missed. A month with few closes recorded gives a small, honest picture, not a small, wrong one.

dinanta cannot tell whether tonight’s counts are right. Nothing was watching during the day; it takes the numbers you type at close on trust. Reconstructing forty-odd services across three chairs from memory, or from a till that records amounts rather than service names, is its own layer of estimate underneath the duration estimate. Two estimates in, two decimals out — the decimals are arithmetic, not precision.

The sheet carries the harder caveat too, in print, beside the coverage figure: these are the days you recorded, which may not be an average week. Recording only the busy evenings makes utilisation read higher than it was, and no arithmetic here can detect that from the inside.

Coverage is a set of dates ÷ a set of dates. Expected open days = the days of the month, less every date on your weekly off, less every date you marked shut — and a date that is both is removed once, not twice. Count-subtraction would quietly shrink the denominator and inflate coverage every single time.

The top of the ratio is a set too. It counts only the closes you recorded on those same expected open days. If you opened on your weekly off, that close is named on the sheet — also recorded: 2 closes on days that were your weekly off or marked shut — and every count, minute and rupee from it is in the totals. It is left out of both sides of coverage, because adding it to the top of a fraction whose bottom excludes it makes coverage read higher than it was earned.

What it will not do

No appointments, bookings, slots or reservations — dinanta looks backwards at counts you already did, never forwards at slots you might fill. No customer names, phone numbers or repeat-visit tracking. No staff attendance, salary, commission or per-stylist figures: chair-minutes belong to the shop, not to a person, and there is no staff column and never will be. No stock or product-consumption tracking. No invoices, receipts or GST. No credit, udhaar or dues ledger of any kind. No verdicts, targets, benchmarks, grades or forecasts. No accounts, no sync, no AI.

What it does over the network: nothing third-party. The full app runs on localhost and uploads nothing. This page loads its own code, its own fonts and its own CanvasKit from this origin — no CDN, no gstatic.com, no analytics, no trackers. The one URL the Flutter engine would otherwise reach for is its fallback-font host, used when a glyph is missing from the bundled fonts; that is pinned to a path on this origin, so a missing glyph renders as a blank box instead of fetching from Google. Nothing you type here leaves the page.

Try it below

The app below is loaded with a made-up month for a salon that does not exist. Edit it, tap your own counts, print the sheet — nothing you type leaves this page.