Skip to main content
Whitesoft

Case study · Blackwood Barbers

A booking and operations platform for a two-site barbershop

Customer self-service booking, a real-time barber calendar, rostering, Square payments and automated SMS, built as one system and running in production across two Brisbane locations.

The challenge

Blackwood Barbers runs two busy Brisbane shops. Bookings, rosters, payments and customer follow-up lived across a third-party appointment tool, a point-of-sale system and people's memories. The business needed a fast, mobile-first booking experience that matched its brand, a single operational view for barbers and managers, and follow-up that happened without anyone remembering to do it.

How we approached it

  1. Started with the operating model: two locations, shift-based rosters, walk-ins and bookings, and Square as the system of payment

  2. Designed the architecture, data model and API contracts before any screen was built

  3. Built the availability engine and booking logic first, then the customer flow, then the admin portal

  4. Kept the customer bundle deliberately small and the backend cheap to run, with Brisbane time zone handled consistently at every layer

What we built

  • Customer booking flow

    Public, mobile-first booking with no login required: choose a location, services, barber and time, then manage or cancel from a link. Only dates a barber actually works are shown.

  • Barber and manager portal

    A day calendar on a 15-minute grid with a column per rostered barber, drag-and-drop rescheduling, breaks, no-shows, rosters with copy-from-last-week, inventory, expenses and reports, with role-based access.

  • Real-time updates

    Calendar changes propagate to every open screen through lightweight signals, with an automatic polling fallback so the shop floor never works from stale data.

  • Square integration

    Terminal checkout initiated from the calendar, catalogue and payment reconciliation, so the booking record and the payment record agree.

  • Automated customer messaging

    Confirmation and reminder SMS, plus a daily rebooking reminder to lapsed customers. The dormancy window for that reminder was tuned using four months of production data rather than a guess, which cut wasted messages and protected the customer list.

  • Marketing data plumbing

    A read-only Google Ads reporting client so campaign and search-term performance can be analysed alongside bookings.

Technology

  • TypeScript
  • Fastify on Cloud Run
  • PostgreSQL (Cloud SQL)
  • Preact and React with Vite
  • Firebase Auth and Hosting
  • Firestore signals
  • Square API
  • Twilio SMS
  • Google Ads API
  • GitHub Actions CI/CD
  • Playwright and Vitest

What changed

  • One system of record for bookings, rosters and payments across both shops

  • Customers book in seconds on a phone without creating an account

  • Follow-up and reminders run automatically, with cadence set by evidence rather than habit

  • A documented, tested codebase with an architectural decision log the business owns

Measured figures from this engagement are held by the business and are published only with its written approval.

Have an operation that should run better?

We build systems that businesses actually run on, and we tell you honestly where AI belongs in them.