Custom booking system for a massage practice

A marketplace took up to 30% of every booking and no tool on the market fit his price list. So I built him his own.

Custom booking system for a massage practice on desktop
Custom booking system for a massage practice on mobile
Client Massage studio, Ede
Services
Custom Web AppBooking & PaymentsEmail & CRM Automation
Tech Next.js, Cal.com, Mollie, Supabase, Vercel

The client

The same massage and sound-healing therapist as the website rebuild. Ten years in practice, thousands of treatments, five stars everywhere. This project came first. Before I touched the website, I fixed how people book.

The problem

Bookings arrived three ways, and each had a catch.

  • WhatsApp. Personal and friendly, and impossible to steer. Some chats turned into appointments. Others trailed off, with no way to tell why.
  • A booking marketplace. It brought in clients and charged up to 30% commission on every booking it touched. On a long evening session, that cut gets painful.
  • An old WordPress plugin. Built for businesses with one service and one price. His practice is neither.

And his price list is genuinely complicated. Two rates, daytime and evening or weekend. Treatments on a table or on a mat, each with its own valid lengths. A menu of optional enhancements with bundle pricing. A signature session of three hours or more that should only be offered when the diary actually has the space for it.

We went through every booking tool on the market together. The closest match cost around €100 a month, and it still couldn’t do all of this.

The tool

Pick a treatment. If you can’t choose, a four-question quiz picks for you. Then a length, a date, a time. The price updates as you go, and evening and weekend slots show their higher rate right in the slot list, so nobody reaches checkout surprised. Add enhancements if you like, the bundle discount applies itself. Pay upfront through Mollie, and the appointment lands in his Google Calendar, synced both ways, so double bookings can’t happen.

Behind the scenes: a confirmation email in the right language, a PDF invoice, and a customer record in his CRM. The whole thing runs in Dutch and English.

The upsell that reads the calendar

His signature session runs three to four hours. Offering it to someone whose chosen slot has a two-hour gap behind it would only create scheduling pain. So the tool checks the calendar first. When the time genuinely exists, an upgrade card appears. When it doesn’t, the offer stays hidden.

A back office of his own

I also built him an admin panel. He sees every booking in one place, creates one himself in seconds when someone books via WhatsApp or in person, edits treatments, prices, enhancements and discount codes, and checks how business is going. No developer required.

What changed

He has been taking bookings through the tool since February.

BeforeNow
Bookings happen onWhatsApp, a marketplace, an old pluginHis own site
Commission per bookingUp to 30%€0
Monthly software costPlugin and marketplace fees€0, he owns it
PaymentArranged around the sessionPrepaid online
Peak rates, setups, bundlesHandled by handHandled by the tool

WhatsApp didn’t go anywhere. People still message him, and he wants it that way. The difference is that a chat now ends with a booking link, a booked slot is a paid slot, and the bookings that used to route through the marketplace land directly, with nothing skimmed off the top.

Built to be his

He owns the code, the data, the calendar and the customer list. Nothing renews monthly, and nobody takes a cut of a massage he gave in his own studio. If he ever outgrows the tool, everything comes with him. That was the brief, and it’s how I build by default.

Like what you see?

Let's build yours