Torhair

Live pilot · Israel

Clients book themselves. The day runs from one phone.

Torhair is a booking site, calendar and client book for an independent specialist. Clients pick a service and a free time from their phone, with no account. The specialist manages schedule, visits, payments and the public page from hers.

The problem

A specialist who works alone is also her own receptionist.

Bookings arrive in WhatsApp and Telegram at any hour. Free time lives in her head and in a notebook. Torhair replaces that with one mobile tool.

Before

  • “Do you have anything on Thursday?” in chats, late at night
  • Free slots worked out by hand, with breaks and travel time
  • Clients, visits and payments spread over chats and spreadsheets
  • Two people can be promised the same hour

With Torhair

  • Clients see real free time and book it themselves
  • Breaks, buffers and days off are applied automatically
  • Every client has one card with history and payments
  • The system refuses a second booking for a taken slot

How booking works

Four taps for the client. A notification for the specialist.

  1. Choose a service

    One or several services. Duration and price are summed for the visit.

  2. Pick a free time

    Slots are calculated from working hours, breaks, buffers, other visits and busy time in Google Calendar.

  3. The time is held

    The slot is held for 10 minutes while the client enters a name and phone. Nobody else can take it.

  4. Confirmed

    The booking is confirmed at once. The specialist gets a Telegram message, with a backup email if Telegram fails.

Mobile admin

Everything the business needs, sized for a thumb.

The admin is designed for a phone first. The screens below use demo data.

Notifications screen with visit reminders and Telegram delivery status
NotificationsNew bookings and reminders, with the delivery status of each message.
Admin menu: services, schedule, availability, public page, personal links, notifications, Google Calendar, backups
Settings without a manualEach setting is one screen with a plain description.
Calendar screen with month, week and day views
CalendarMonth, week and day views. Manual visits and time blocks in a few taps.

Inside

Small product, complete loop.

Editable public page

About, services, gallery, contacts, map and FAQ. Blocks are edited and reordered from the phone.

Personal booking links

A one-time link with individual terms for a specific client. It expires after use or on a set date.

Schedule and exceptions

A weekly template, days off and special hours for any date range. Changes never cancel existing visits silently.

Works with Google Calendar

Bookings go to a personal calendar. Busy events from chosen calendars close the same time for clients.

Client book

Client cards with visit history, matching of repeat clients, merge, archive and anonymisation.

Payments and revenue

Close a visit with a payment method. Revenue and statistics by period, with a reconciliation report.

Engineering

Built like it holds someone’s income. Because it does.

A missed or doubled booking costs a real client and a real day. So the calendar logic is tested hard, data survives any deploy, and every release leaves evidence.

900+

automated tests: unit, integration, property-based and browser

12 → 1

parallel processes racing for one slot produce exactly one booking

25

versioned SQLite migrations, each with a backup taken before it runs

4

Playwright browser profiles, mobile first

One write path for the calendar

Every action that changes busy time goes through one SQLite transaction with BEGIN IMMEDIATE. Overlaps and buffers are hard rules, not warnings.

Calendar algebra with property tests

Free slots are calculated, never stored. fast-check generates schedules to find edge cases. Temporal handles Israeli daylight saving time.

Backups that are restored, not just made

A backup holds the database, media, a manifest and SHA-256 checksums. Each one is verified with a restore smoke test.

Release with evidence

A gate runs lint, types, schema checks, tests, build, browser tests, smoke, dependency and secret scans. The deploy journal records the exact commit and image.

Durable notifications

Telegram messages and reminders go through an outbox in SQLite with unique keys, so a restart neither loses nor duplicates them.

Small surface, safe defaults

A non-root Docker container, secrets outside the image, Cloudflare Turnstile against spam, server-side checks in every loader and action.

TypeScriptReact RouterReactNode.jsExpressSQLite · better-sqlite3Vitestfast-checkPlaywrightTemporalDockerTelegram Bot APIGoogle Calendar API

Status

In daily use by one hairstylist. Built to fit more.

Torhair runs in production for an independent hairstylist in Israel since August 2026. The first version is deliberately one installation per specialist: no marketplace, no salon with staff.

This page shows no client data. Screens use demo content; the live booking page and its address are not published here.

Not in the first version, on purpose

  • Client accounts and self-service rescheduling
  • Online card payments
  • Bulk messages and marketing
  • Several specialists in one calendar