Beauty salon IT department#

I’m helping my wife to open a beauty salon. Since I know nothing about beauty, I’m doing the technical part. One essential part of the beauty salon is a public website. Its purpose is to rank highly in Google for relevant queries and to let people book appointments.

High-level software features#

(Inspired by https://glossgenius.com/)

Client Management:

  • Keep client notes

  • View previous appointment history

  • Send customized messages

Content Management:

  • Description for services with photos and videos

  • Landing pages

  • Marketing pages

Booking:

  • Set appointment slots and working hours

  • Schedule, reschedule, and cancel online (without client app or login)

  • Double booking

  • Gap time

  • Recurring appointments

  • Reminders (SMS and Email)

  • Fill last-minute cancellations by keeping a client waitlist

  • Calendar apps integration

Legal and Payments:

  • Square integration for payment processing

  • Deposit collection upon booking

  • Sign waiver forms in person and online

  • Put a credit card on file for faster checkout

Marketing:

  • SMS & Email Marketing features integrated with books

  • Run custom campaigns

Analytics:

  • Get insights into how new clients discover your business

Frontend components#

Static pages:

  • About (short preface, location, working hours, contact information, and contact form)

  • Services list

  • Per-service pages

Booking wizard:

  • Present a menu of services

  • Fetch booking slots for the chosen service from the booking API

  • Present available days

  • When the user picks a day, show available times

  • If the user picks another day, update the times

  • Let the user pick a time slot

  • Ask the user for a name, phone, and email

  • Depending on the service configuration, get a credit card

  • Submit the booking information to the booking API

Backend components#

Static site generator:

  • Highly customizable (no built-in templates)

  • Fast to build

  • Blazingly fast to serve (asset minification, compression, server proximity)

Booking API:

  • Read service durations from the procedures catalog.

  • Two-way integration with external calendars (fetch availability, push new events).

  • Exposes available slots for a service as a JSON API.

  • Records appointment submissions.

Customer Relations Manager:

  • Name, phone, email

  • Headshot

  • Records of the past procedures

  • Notes

Email & SMS:

  • Booking confirmations and reminders

  • Cancellation

  • Marketing

Admin dashboard#

Appointment view

  • Linked from Calendar event sent to the employee.

  • Shows client’s name, phone, and email.

  • Shows the name of the service, duration, and price.

  • Shows dates of other appointments made with the same phone or email.

  • Has a button to pay for the service.

  • The button opens a payment page with suggested tips and connects with the Square terminal to accept card payments.

Technical stack#

  • All content (services, about us, email templates) is stored in Google Docs.

  • The static frontend is built with Vite, React, Tailwind, and Jinja templates for granular components and flexibility.

  • The frontend builder synchronizes Google Docs with git-tracked reStructuredText (RST) files using gdocsync.

  • Select content (hours of operation, email templates) is exported to the API as binary assets.

  • FastAPI backend with PostgreSQL database.

  • A single-CPU Ubuntu VM serves precompressed static content through nginx, API as a systemd unit, and PostgreSQL database.

  • Public monorepo on GitHub (because software is not the moat for a beauty salon business).

  • The admin page is built with the same stack as the public front end, but is served only behind the VPN on a separate subdomain.

Integrations:

  • Tailscale for VPN.

  • Square for payments.

  • Twilio for SMS.

  • Google Workspace for emails.

  • Google Calendar for employees.