← Work
12·Client system

Rejuvenair Spa

One owner-run booking system to replace two rented tools, ready for opening day.

BUILD verified 20 Jun 2026
GymCatch + Timely
replaces
1,464
clients migrated
4,937
appointments migrated
Stripe
payments

The problem

Rejuvenair Sanctuary, a holistic spa in Doncaster, ran on two rented systems at once: GymCatch for its Reformer and Mat Pilates classes, memberships and passes, and Timely for its 1:1 aesthetic and recovery treatments. That meant two monthly subscriptions, two diaries, and two halves of the same business that never spoke to each other - and still neither tool could handle the way the sanctuary actually runs, with two treatment rooms and a four-room recovery suite working alongside a Pilates class, all at the same time.

Before and after

BeforeAfter
Two rented booking systems - GymCatch for classes, Timely for treatmentsOne booking platform she owns, covering both
Classes and 1:1 treatments managed in separate diariesA single calendar showing every class and appointment together
Neither tool could run concurrent roomsUp to six treatments plus a class booked at the same time, never double-booking a person or a room
Customers signed in separately on the website and the booking widgetOne login, with seamless single sign-on from her WordPress site
Changing a class, price or staff member meant asking a developerShe configures her own catalogue, prices, staff and timetable in plain English

The build

I built Rejuvenair a single booking platform that replaces both rented tools. The class side carries timetabled sessions, memberships, class-credit bundles, passes, drop-ins, waitlists with automatic promotion and full customer self-service. The treatment side books 1:1 appointments against staff and rooms, with per-practitioner availability and resource-gated machines - the oxygen chambers, red-light and infrared cabins - so several treatments run at once without ever double-booking a person or a room. Stripe runs the money end to end: drop-ins, membership subscriptions, bundles that convert to class credits, deposits, discount codes and a self-service billing portal, with Apple Pay, Klarna and Clearpay appearing automatically at checkout. Everything is owner-controlled - she sets her catalogue, prices, instructors, treatments and policies from an admin she edits herself - and the booking site embeds in her WordPress site and shares a single login with it, so customers move between the two already signed in.

The result

Live at book.rejuvenairsanctuary.co.uk on its own host, with the full Stripe payment path verified end to end on the live system. Her real history came across in the migration - 1,464 client records and 4,937 past and upcoming appointments, along with her consent forms - so nothing was lost in the switch off two platforms. What launched as the class-booking half now also runs the treatment side that used to live in Timely, and it is developed week to week as the sanctuary grows into it.

The human bit

Delivered through SOYO Studios for the spa's owner, and built owner-controlled by design. She runs a sanctuary, not a software team, so the test for every feature is whether she can do it herself: shorten a single appointment when a treatment runs quicker than its slot, block out a busy afternoon, set a new class teacher up to receive their own booking alerts, change a price. The work is shaped around how she actually runs her day, in language that makes sense from behind the front desk.

Under the hood

Node.js with Express 5, server-rendered EJS (no build step), Sequelize over MySQL with database-backed sessions, running under PM2 behind a LiteSpeed reverse proxy. Stripe handles payments and subscriptions through a signed-webhook fulfilment path; Resend sends email and Twilio sends SMS confirmations and reminders. Treatment availability is a combined staff-and-resource engine that offers a time only when a qualified practitioner and the right room or machine are both free. The same proven architecture as my other Node client systems.

a look inside

Rejuvenair booking site - Reformer Pilates class list showing each upcoming time, teacher and spaces left
Type-first class booking - pick Reformer or Mat and every upcoming time is in one list
Rejuvenair booking site - treatments page with a search box and treatments grouped by category
The 1:1 treatment side that replaced Timely - searchable, with her full menu by category
Rejuvenair booking site - memberships and passes with monthly prices
Memberships, passes and class bundles - all billed through Stripe

Need something like this?