Staff scheduling, shift swaps and a time clock that records minutes rather than guessing at hours — with a payroll export that applies overtime the way the law actually works. It will tell you what it doesn't know rather than invent a number that ends up in somebody's pay.
Three questions get answered before you've scrolled: when do I next work, how much have I done, and roughly what am I getting paid. The name on the button is deliberate — when you're about to press the thing that writes to someone's pay, that's where your eye already is.
Build a week, check it for conflicts, then publish it — publishing is the only thing that notifies anybody, so nobody gets a text about a draft.
dry run firstThe problem was never that people couldn't see the schedule. It's that nobody confirmed and now you don't know who's coming. One tap, with a reason if they can't.
A 22-minute call is 22m, not 0.4h. Totals are summed as integers so rounding can never drift, and the decimal is derived from the minutes rather than the other way round.
Offer a shift, let a colleague claim it, manager approves. Claiming is race-safe — two people tapping at once, one gets it and the other is told plainly.
A shift needing a forklift licence is only claimable by someone holding one that hasn't expired on the day of the shift — not on the day they tap.
expiry-awareClocking in is a daily action, and a confirm dialog on a daily action gets dismissed unread within a week. Undo costs nothing until the moment you need it.
2-minute windowClock in outside the site radius and it's flagged for review, not blocked. Denying someone the ability to start work over a GPS reading is worse than the problem it solves.
Names uncovered trading hours before the week starts. Finding out on Monday is a scheduling task; finding out on Tuesday is an incident.
CSV with hours, overtime split out, and a rounding policy you choose — plus every caveat it's aware of, printed rather than buried.
7-minute ruleThe commonest way to get payroll wrong is to total a two-week pay period, see 78 hours, and call 38 of them overtime. Under FLSA the workweek is the unit — two weeks of 39 hours is 78 hours and zero overtime.
A shift running past midnight on a Saturday is split across both weeks rather than filed under the one it started in, because hours count in the week they were worked. Filing all eight under Saturday is how somebody gets shorted an hour of overtime.
Decimal, never floats. And the estimate is
always labelled an estimate — it's gross, it's mid-period, and it isn't what lands in
anyone's account.Confirm dialogs are for actions that are rare, irreversible, and affect other people. Publishing a week gets one — it sends notifications that can't be recalled, so it shows you exactly what would happen and commits only on a second, explicit yes. Clocking in gets an undo instead. Put a prompt on a daily action and within a week it's being dismissed unread, at which point it costs everyone two taps a day and protects nobody.
Authentication is deliberately not built yet. Every endpoint takes an actor id and trusts it, which is fine for a local beta and catastrophic on a network. It's marked loudly in the code rather than quietly assumed, and real auth goes in before this is exposed anywhere.
The overtime rule implemented is the federal FLSA baseline. It does not implement California-style daily overtime, double time past twelve hours, or seventh-consecutive-day rules. Those are absent rather than half-right, because a plausible wrong overtime number is far more dangerous than an obviously missing one. Have somebody who does payroll compliance in your state check the policy before paying anyone from this.
The name is a joke. The overtime maths is not — every number this produces is either correct, labelled an estimate, or absent. There is no fourth option.