Skip to main content
← Back to projects
Shayan Barber Studio brand mark used by the booking project 08 / POOYA LABS
PROJECT / 08Appointment booking

Salon Booking

In development · frontend 0.7.0 / Apps Script 1.4.0 target

An appointment-booking platform for a barber studio, with a customer journey, owner workspace, Jalali scheduling, and an ongoing Google Apps Script / Sheets backend migration. Real customer data must not be entered in the public demo.

ReactTypeScriptViteGoogle Apps Script
01 /The challenge

Appointment booking needs time-aware scheduling, conflict prevention, a simple customer journey, and a separate manager workspace. The Persian experience must preserve Jalali dates and Iran's timezone.

02 /Approach

The React, TypeScript, and Vite frontend is hosted on GitHub Pages. The backend is migrating to Google Apps Script and Google Sheets; a relay bridge and manager notifications are part of the target architecture.

03 /Role & attribution

The README identifies Pooya as engineer/creator and the salon owner as product owner.

04 /Technical architecture

GitHub Pages serves React/TypeScript/Vite. Same-origin requests pass through a hidden iframe to the Apps Script bridge and google.script.run; Apps Script runs API logic and private Google Sheets stores records. Firebase Cloud Messaging supports manager push; optional email is off. The old Worker/D1 is not active and remains only as recovery material.

Booking and manager-notification flow
The active path is awaiting final acceptance; Sheets is private and push depends on FCM configuration
05 /Implementation details
  • 01Service catalog and availability from duration, weekly hours, exceptions, timezone, buffer, and active bookings.
  • 02Jalali calendar in salon timezone Asia/Tehran with UTC persistence.
  • 03Booking with Idempotency-Key, LockService-protected recheck/write, reference code, and one-time customer-management token.
  • 04Customer lookup/cancel using reference and proof-of-possession; public API does not return contact details.
  • 05Owner panel: sign-in, bookings, confirm/cancel/complete/no-show, services/prices, multi-interval hours, date exceptions, and TimeBlocks.
  • 06AuditLog, IP-HMAC rate limits, hashed token/session, rolling 30-day sessions, and logout revocation.
  • 07Manager push through FCM after configuration/device registration; email is off by default.
06 /Engineering decisions
  • 01Cloudflare/D1 is no longer active; legacy data is not deleted/migrated without owner approval.
  • 02Until relay, Apps Script version, and real salon configuration are accepted, the demo is not for real bookings.
  • 03Timezone, hours, services, and prices must be approved by the salon owner.
  • 04Customer data must not appear in screenshots or the portfolio.
07 /Verification & evidence
  • 01The current release line is 0.7.0; backend target 1.4.0 includes rolling 30-day owner sessions.
  • 02CI and Pages for commit 3d9a7ff were queued when reviewed and are not assumed to have passed.
  • 03Earlier visual/browser QA passed in CI 42013839983, but the new Apps Script version needs a separate smoke test.
  • 04The owner reported Web App deployment and SALON_RELAY_URL setup; v1.4.0, TimeBlocks, bootstrap/login, and end-to-end booking need current evidence.
  • 05Firebase/FCM, VAPID, and real push delivery still need verification on the manager's device.
09 /Capabilities & highlights
  • 01Service catalog and duration-aware availability slots
  • 02Jalali calendar with Asia/Tehran timezone handling
  • 03Booking with idempotent retries and reference codes
  • 04Customer lookup and cancellation using a one-time token
  • 05Manager workspace for bookings, services, and scheduling
10 /Scope & boundaries

Version 0.7.0 is in the Apps Script migration path and deployment acceptance is still required. Until the backend and deployment settings are verified, do not use the public demo for real customer data.