Two systems for one salon — and the client came back for the second
The situation
Groove Beauty Co runs a single-location nail and beauty salon in South Africa. The owner is not technical. The people using any system all day are nail technicians and reception staff, and most of their customers walk in rather than book ahead.
That made two things painful. Payslips were produced by hand and submissions were chased manually every month. And the salon had no way to turn a website visit into a booking, or to reach a client again once they had left the chair.
What we built
A. Payroll automation — the first engagement
Payroll came first, and it runs in production today. The dashboard above is the live admin view, with contractor names redacted.
Contractors log in once a month, enter their commission earnings and deductions, review an A4 payslip preview, and submit. The payslip is generated in the browser and emailed to them as an attachment the moment they do.
Admins see who has and has not submitted, generate payslips manually when needed, send reminders, and export the month to CSV. Reminders go out on a schedule to anyone still outstanding, and every send is logged per contractor and per cycle as sent, failed or skipped. Every admin action lands in a full audit trail.
Authentication is split deliberately: single sign-on for administrators, and a local password for contractors. Each release is built and deployed through an automated pipeline.
B. Booking, website and WhatsApp — the second engagement
The booking system followed. Four of its eight milestones are delivered — the foundation, the brochure site, the booking flow and the WhatsApp engine. Staff capture, payments, roster and commission, and handover remain. It is in development and not yet live.
What exists so far: a brochure site with a service menu showing price and duration, a gallery, Google reviews, SEO basics and Google Business sync. Booking takes three taps or fewer, honours staff availability, and takes a 50% deposit for online and new customers.
The WhatsApp engine sends reminders, handles confirm and reschedule replies, asks for a review after the visit, and re-engages clients who have gone quiet. The walk-in capture screen is the one that matters most — designed to log a customer at the front desk in under 10 seconds, and still to be built.
Every booking and payment is tied to a staff member, so each technician can see their own earnings. South African salons typically pay staff 40–60% (industry range, not a client result). Client records keep visit history, technician notes and preferences.
How it was delivered
Pay-as-you-go. The booking engagement carried a dev fee of about R20,000 for roughly 57 hours — indicative and scope-dependent, not a fixed quote.
Milestones were locked up front. Anything outside them went into a written roadmap file instead of being absorbed quietly. Retail e-commerce, loyalty points, a native app, multi-branch and a waitlist are all still sitting there, deliberately out of budget. When the owner asked for a service rating module on 17 September 2026, it took that same route rather than becoming an unplanned addition.
What sits behind it
Both systems run on infrastructure I designed and operate myself: single-tenant hosting, a single sign-on and role layer, a self-hosted email gateway, and an operations console for managing the servers.
Groove did not buy any of that. They inherit it — no shared multi-tenant database, no per-seat pricing, no vendor lock-in.
The same bench carries four other services I run internally:
- a client and project manager holding contacts, documents, services, invoices and payments
- an identity and role hub that issues and revokes access across every service
- an email gateway that routes and delivers mail without leaning on a third-party sender account
- a server management console with a mobile companion for day-to-day operations
Stack
Stack: Next.js · TypeScript · Tailwind · PostgreSQL · Prisma · Docker · WhatsApp Cloud API · Yoco · Express · React · Vite · Drizzle · Redis · Puppeteer
Need something built — or rebuilt properly?
Two systems, one client, locked milestones, no surprises at the end. If you have something similar — or something considerably bigger — get in touch on WhatsApp 068 622 6508 or at dev@spectres.co.za