
Technaut Parking — Offline-First Parking MS
Offline-First · Operations
Books, serves and bills a salon client with the internet completely down, then reconciles the moment it returns.
Offline-first salon and beauty-parlour management: advance booking with a slot engine that understands staff shifts, resources and colour-processing gaps, a walk-in queue, per-staff service attribution, GST billing with offline-safe invoice numbering, backbar inventory, commissions and payroll.
Technaut Salon is built for reception desks that cannot stop when the connection does. The Flutter app — Android, iOS and Windows, plus web for the public booking page — keeps a local SQLite database via Drift as its own source of truth, and reconciles with a NestJS API on MariaDB as soon as a connection returns.
The scheduling is the hard part. A salon slot is not a fixed block: a colour service has a processing gap in the middle during which the chair is occupied but the stylist is free, an assistant may cover part of a service, and some services need a resource — a basin, a steamer — that is shared across staff. The slot engine models shifts, resources and processing gaps together, so the calendar offers times that can actually be honoured.
Two constraints follow from working offline. Invoice numbering has to be safe when several terminals are issuing bills with no server to arbitrate, and inventory has to deduct backbar product automatically as services are performed rather than at a stocktake. Both are handled locally and reconciled on sync.
The platform is multi-tenant across many salons, each with many branches, and covers commissions and payroll, packages, memberships and loyalty, campaign messaging, and staff, sales, client and financial reporting.
Salon software assumes a fixed appointment block and a live connection. Neither holds: a colour service frees the stylist mid-treatment while the chair stays busy, assistants cover parts of services that commission has to account for, and a reception desk that cannot bill during an outage sends clients away.
Modelled a real day at the chair rather than a calendar grid — shifts, shared basins and steamers, processing gaps, assistant hand-offs — and found the scheduling constraint, not the billing, was what generic tools got wrong.
Made the device authoritative: a Flutter app over a local Drift/SQLite database that books, serves and bills with no network, reconciling with a NestJS API on MariaDB when a connection returns. The slot engine reasons about shifts, resources and processing gaps together so offered times can actually be honoured.
Flutter app (Android, iOS, Windows; web for public booking) with Drift/SQLite as the local source of truth
NestJS + Prisma API over MariaDB 11.8, with Redis alongside
Multi-tenant model: many salons, each with many branches
Slot engine combining staff shifts, shared resources and per-service processing gaps
Offline-safe invoice numbering reconciled on sync across concurrent terminals
Backbar inventory deducted automatically as services are performed
Treating a service as one contiguous block either blocked the stylist through a colour processing gap or double-booked the chair, so the calendar offered slots the salon could not honour.
Modelled a service as segments with an explicit processing gap, and made the slot engine reason about staff, chair and shared resources separately — freeing the stylist during processing while the chair stays occupied.
Several terminals issuing GST invoices offline cannot ask a server for the next number, and duplicate or gapped invoice numbers are a compliance problem, not a cosmetic one.
Gave each terminal an offline-safe numbering scheme reconciled on sync, so bills can be raised during an outage without colliding when the branch comes back online.
Commission was computed per service, which quietly underpaid assistants who covered part of a treatment and overpaid the lead stylist.
Made attribution per-staff with explicit assistant splits at the service level, so commissions and payroll fall out of what was actually performed.
Reception books, serves and bills through an outage and reconciles automatically afterwards. The calendar stops offering impossible slots, backbar stock reflects services performed rather than a monthly count, and commissions match the work each person actually did.