// case study · built by Nterlace

A ten-year-old timesheet, rebuilt in a week.

Gotta Dance Studios ran payroll on a 2016 PHP app that stored a day as three bare numbers. Ntertime replaced it: shifts logged from a phone, a dashboard that flags problems before payroll, and every hour of the old history carried across and reconciled.

Live since Sept 2026 at time.gottadance-studios.com
time.gottadance-studios.com/admin/dashboard
Ntertime admin dashboard
39,142hours

moved from the 2016 app, a decade of shifts

0.00unaccounted

every imported hour reconciled to the ledger

91people

matched across two old user tables

207checks

automated tests on the pay and import rules

// the problem

The old app worked, until you asked it a question

It kept one row per person per day with three decimal buckets: taught, assisted, administrative. No class, no rate, no record of who covered for whom. Its summary grouped staff by first name, so any two teachers who shared one became a single person. It rounded each clock time before subtracting, which quietly turned a 46-minute class into an hour.

The hard part of replacing it was not the new screens. It was the decade of history: two user tables, people who had registered twice, and dates typed every way a person can type a date. The import fans each old row out into proper shifts, asks a human about the cases it cannot decide, and refuses to finish until the ledger reads unaccounted 0.00.

// for staff

Log a shift from the dressing room

Staff sign in on their phone, pick the class, type start and end, done. One entry per shift, with the class, the private-lesson student, or the teacher they covered for, instead of three unlabelled number boxes.

Time rounds on the length of the shift, not each clock time, so a 46-minute class bills 45 minutes rather than the old app’s 60.

  • Works one-handed on a phone
  • Class, student and cover captured as data
  • Sign in with a password or Google
Ntertime on a phone: a staff member’s shifts for the month, listed by date
Ntertime on a phone: the add-time form
// for the owner

A dashboard that says what needs a look

The studio owner lands on this week and this month against the same point last period, a 12-week chart by kind of work, and who and which classes carried the hours.

Above all of it sits a short list of what to check before payroll: shifts over eight hours (usually PM typed for AM), time logged long after the fact, hours with no pay rate yet, staff who went quiet, and invites nobody accepted.

  • Pre-payroll sanity checks
  • Recent changes, with who made them
  • Cover shifts counted, not buried in notes
Ntertime dashboard: a needs-attention list above a 12-week hours chart and a ranking of who worked most
// for payroll

Reports that go straight to the accountant

Filter by dates, person, role, kind of work or class, sort two ways, then download a payroll summary or every line as CSV.

Pay stays hidden until someone trusted with payroll unlocks it for fifteen minutes. Each entry keeps the rate in force when it was saved, so a raise never quietly rewrites a pay period that already ran.

  • Payroll and full-detail CSV exports
  • Pay figures locked behind a re-confirm
  • Rates snapshot per entry
Ntertime reports page with filters, a total of hours, CSV download buttons and a by-person table
// under the hood

Boring on purpose

Plain PHP 8 + MySQL

No framework, one dependency. Runs on the shared hosting the studio already paid for.

Every change logged

Nothing locks a pay period, so an audit trail explains any number that moved.

Google sign-in, invite only

Matches accounts an admin created. It never lets a stranger in.

One-command deploys

Tests, upload, migrate and live checks in one script, no prompts.

Screenshots use a demo database with made-up staff. No real employee's hours or pay appear on this page.

// your turn

Running your business on an app nobody wants to touch?

Nterlace rebuilds the tools small businesses depend on, with the history carried across and checked, not left behind. Tell us what yours does today.