Good fit when
- Staff answer booking calls during service or appointments.
- Customers ask to reschedule in WhatsApp, email, and phone calls.
- No-shows are common enough that reminders would pay for themselves.
- Nobody trusts the calendar because offline changes are not recorded.
How we build it
- 1Map the real booking rules and exceptions.
- 2Define the first automated path: request, confirm, remind, cancel or reschedule.
- 3Build the customer-facing flow and staff view.
- 4Run a short pilot, then add deposits, waitlists, or reports only if the data proves they matter.
Expected outcome
A booking flow that saves staff time without making customers feel pushed through a generic system.
Live demo
Try a small booking flow
This is the kind of focused interaction a service business can test before expanding into payments, waitlists, or staff rules.
Generated booking
Consultation booked for Tomorrow 10:00.
No deposit required
WhatsApp reminder will be sent 2 hours before.
Staff view
Status: confirmed. Exception: none. Next action: send reminder.
What the system has to get right before it sends anything
The first job is to write a booking down in one place, in a shape the rest of the system can act on: who, which service, which slot, which staff member or location, and how to reach them. The confirmation, the reminder, the reschedule link and the staff day view all read from that one record. If the record is incomplete, or lives in two places, no amount of messaging automation fixes it.
That is also why the phone does not have to go away. A booking taken at the counter or on a call gets entered into the same record as an online one, which is what makes the calendar worth trusting. A system that only knows about its own online bookings is the one staff quietly route around, and then you are paying for software and still keeping a notebook.
The decisions that actually shape the build
Most of the build time goes into rules that are obvious to your staff and invisible to a developer until somebody writes them down. On the Domino Ra'anana ordering site, which took about two months and has been in daily use for more than five years, the rules that mattered were not visual at all.
Where the real work sits
Who is allowed to hold a slot
Is every request accepted automatically, or do new customers, large groups, or particular services need a person to approve them first?
Eligibility, not just display
Domino's delivery zones each carry a delivery cost and a minimum order amount. Those are checkout rules: they decide whether an order can be placed at all, not just what the page shows.
The order of operations around money
A card order there creates a pending order and a Cardcom payment URL first. Only after payment succeeds does the order update, the emails go out, and the order reach the Aviv POS. Getting that sequence wrong is how you end up with paid orders nobody sees, or unpaid orders in the kitchen.
Changes and cancellations
How late can a customer move a booking, who can override that, and what happens to a deposit when they do? These are business decisions, and they have to be made before they can be coded.
Reminders are a scheduling problem, not a messaging problem
Sending one message is easy. Sending the right message to the right person at the right minute, every day, without a queue somebody has to babysit, is the part worth designing. Mincha Time does this in production: a Firebase Cloud Function runs once a minute and looks for a Firestore document at the bucket for the current time, keyed hour_minute, so 13:47 is the document 13_47. If that document is not there, the run does nothing and costs almost nothing.
Two more choices keep it cheap. Users are grouped by rounded latitude and longitude, so the Hebcal zmanim API is called once per location per day instead of once per user. And each run writes tomorrow's bucket for that group after it finishes today's send, so the schedule advances itself one day at a time rather than precomputing a calendar that might need invalidating.
Booking reminders need the same discipline plus the opt-outs. Mincha Time checks two independent flags before every send, a permanent disable and a same-day snooze. A booking reminder needs the equivalent: somebody who has already confirmed, already cancelled, or asked to be left alone should not get the day-before nudge.
Which language the message goes out in
This matters more than it sounds and it is cheap to get right at the start. Mincha Time sends notification copy in six languages — Hebrew, English, Russian, Spanish, French and Yiddish — chosen from a per-user language field and stored as plain lookup objects rather than through an i18n library. The mechanism is not clever: know the language when the person signs up, then send every outbound message through the same lookup.
For a booking flow aimed at customers in Israel that usually means Hebrew and English, which also means right-to-left layout in the customer-facing screens and in anything you send them. Retrofitting that later touches every template and every screen at once, so it belongs in the first version even if only one language is switched on at launch.
What version one deliberately leaves out
The fastest way to never launch is to try to cover every service, location and exception at once. A first version usually covers one location, one group of services, one reminder pattern and one payment path. Deposits, waitlists, recurring appointments, multi-staff calendars and no-show reporting are all easier to add once you can see which of them your bookings actually need.
Leaving something out is not the same as ignoring it. Domino's checkout calculates pricing and delivery rules in one place, which is why adding a zone or a new deal is a small change instead of a rewrite. The parts still worth improving are written down in that case study, including moving more checkout validation into shared functions that can be tested without rendering the whole checkout page.
How long a build like this takes
The honest anchor is the Domino build: about two months for a public menu with search and category filtering, deals that carry their own selectable options, a cart, delivery and pickup checkout, card payment through Cardcom, a separate cash path, customer and admin emails with full order details, the POS handoff, and the admin screens behind all of it.
A booking flow that stops before payments and before an external system handoff is a smaller job than that. Adding either one moves it back toward that shape. For contrast, Mincha Time's first version, including the minute-resolution reminder engine described above, was about a month, because it had one calculation, one reminder and no payment step. Scope is what moves the date.
Worked example: an ordering flow end to end
From outside, the Domino Ra'anana site is a menu. The build is the checkout. Here is the path an order takes, and where a person is still involved.
- 1Browse and build the cartActive products and active deals share one cart, with deals shown first. Both write structured cart items so totals are calculated the same way. Cart, delivery method, chosen zone, payment method and checkout form fields persist in localStorage so a customer does not lose the order by reloading.
- 2Apply the zone rulesThe selected delivery zone sets the delivery cost and the minimum order amount, and those decide whether checkout can continue at all.
- 3Take the paymentA card order creates a pending order plus a Cardcom payment URL. Cash orders take a separate path that skips this step entirely.
- 4Confirm, then hand offOn payment success the order status updates, customer and admin emails go out with the full order, the cart clears, and the order is delivered to the Aviv POS.
The branch owns an ordering channel instead of renting one from a marketplace app, and orders reach the register without anyone retyping them. Owner Eran Atra has been running it for more than five years.
Questions we get asked about this
Can we keep taking bookings by phone?
Yes, and most businesses should for a while. The change is where a phone booking ends up: staff enter it into the same record as the online ones, so reminders, cancellations and the day view are complete. A system that only knows about its own online bookings is the one people work around.
Do we have to replace the software we already use?
Not usually. The Domino site keeps its own order records and hands each paid order to the Aviv POS, so the branch kept the register it already had. Owning the customer-facing flow and handing off to the existing system of record is normally cheaper and far less disruptive than replacing something your team already trusts.
How do we keep reminders from annoying people?
Give people more than one way out and check it before every send. Mincha Time uses two independent flags, a permanent disable and a same-day snooze, so somebody can quiet one day without unsubscribing forever. Booking reminders also need a one-tap cancel, because a cancelled slot you can refill is more useful than a silent no-show.
What happens if a confirmation message fails to send?
The booking is written first and messaging is a separate step, so a failed send never loses the appointment. The staff view is where it surfaces: if a customer has no confirmation, somebody can see that and call. Payment-linked flows need the same care in the other direction, which is why Domino only sends an order onward after the payment result comes back.
Typical deliverables
- Booking request intake
- Confirmation and reminder messages
- Cancellation and rescheduling logic
- Staff notifications and status tracking
Best for
Restaurants, clinics, beauty studios, consultants, and service businesses that lose time around scheduling.
Discuss this service