Changelog

What we’ve shipped.

Every feature and fix that’s gone live, newest first. MassageHub is built and maintained week by week — this is the receipt.

  1. New: a public changelog, an About page, and an anonymous UK map of MassageHub therapists

    A therapist deciding whether to trust a new tool wants to know it's real and that it's here to stay. We've added three things to the public site that say so plainly — and one of them involves you, so here's exactly what it is.

    A live map on the homepage. There's now a UK map on massagehub.app showing one dot for every therapist using MassageHub — so a visitor can see at a glance that they wouldn't be the first or the only one. It is completely anonymous: no names, no business names, no photos, nothing clickable. And every dot is deliberately nudged a few kilometres off your real location before it's ever drawn, so it reads as "a therapist works around here", never a pin on your home or clinic. This is exactly what the Therapist Promise means when it says you're never listed in a directory without your consent — it's a headcount made visual, nothing more.

    A public changelog at massagehub.app/changelog — every feature and fix we've shipped, newest first. It's built straight from these announcements, so it's always current. Handy proof, for you as much as for prospects, that the app is actively looked after.

    An About page at massagehub.app/about — the honest version of why MassageHub exists, written by Paul, who still works as a massage therapist himself.

    Nothing here changes how the app works. If you'd ever prefer your dot not to appear on the map at all, just reply and we'll remove it — no questions asked.

    See it →
  2. Gentle nudges where they're useful — regular-client suggestions and ready-made promo codes

    Some of the most useful things MassageHub can do — memberships, recurring bookings, discount codes — are easy to forget about, because nothing ever points them out at the moment they'd actually help. We've added a few quiet nudges to fix that.

    On a client's page — if someone's been in three or more times, you'll see a small suggestion at the top: a membership could be worth offering them, or — if they keep booking the same service at the same time — you could set it up as a recurring booking so they don't have to rebook each time. You'll only ever see one suggestion at a time, and there's a Dismiss link if it's not for you.

    On the Promotions page — instead of a blank form, there are now three ready-made starting points: First-visit 20% off, Bring a friend, and Quiet-week filler. Tap one and the discount-code form opens already filled in — change the code, the amount, the dates, anything you like, before you save.

    Around Christmas — from October you'll see a seasonal reminder on your dashboard to set up gift cards, since vouchers tend to sell well as presents.

    None of this changes how anything works — they're just prompts, and you can dismiss any of them. The features they point to have all been here for a while; they've just been quiet.

    See it →
  3. Calendar sync is clearer — it does two separate jobs, and most therapists want both

    The Integrations page offers a few different Google Calendar options, and it hasn't always been obvious which one you needed — or that you might want more than one. We've rewritten that page (and the help article) to make it plain.

    Calendar sync does two separate jobs:

    • Push bookings to your calendar — your confirmed MassageHub bookings show up in your phone's Google Calendar. This is the one-click "Connect Google Calendar" button. It does not read your existing events.
    • Block busy times — your existing calendar events (meetings, personal appointments, days off) stop clients booking over them. This is the "paste a private iCal link" option, and it also works with Apple Calendar, Outlook, and Fresha. It does not push your MassageHub bookings anywhere.

    They're set up separately, and connecting one doesn't do the other — so for a calendar that's fully in sync both ways, you want both. The Integrations page now spells this out at the top, and each section says clearly what it does and doesn't do.

    There's also a gentle reminder on the Availability page now: if you haven't connected anything to block your busy times, you'll see a note — because without it, a client could book you over something already in your diary.

    Nothing you've already connected has changed — this is purely clearer wording.

    See it →
  4. Fix: Availability page is properly tappable on mobile

    Tapping a time on the Availability screen on a phone used to need surgical precision — the small HH:MM boxes were only about 34px tall and the per-day on/off checkbox was a 16px square. Same story for the time off & custom hours form: the date pickers, the Single day / Date range toggle, the Time off / Set custom hours radios, the Add time off submit button — all sat below the comfortable thumb-size we now hold ourselves to.

    Everything on this page now meets the 44px tap-target floor on mobile: time pickers, the day-name + on/off row (the whole left half of each row is one tap target now), location selectors, the slot-interval dropdown, the Save hours / Save slots buttons, and the full "Add time off" form. The same time-picker control is also used on Locations, Calendar, and Events, so the fix extends to all of them in one go.

    Desktop is unchanged — the larger controls only appear at phone widths. If you mostly use the dashboard on a laptop you won't notice anything different; if you do quick edits on your phone between clients, the dead-clicks should be gone.

    See it →
  5. Fix: "Charge pending" tag no longer lingers when the deposit already covers the total

    A completed appointment was still showing the red 💳 Charge pending tag on the calendar even after the client had paid a deposit that covered the whole price. The appointment modal correctly recognised it (you'd see Deposit paid £x in amber and a button offering to mark it fully paid) — but the calendar tile kept nagging.

    This came up most after a Stripe Express → Standard migration, where the client's card on file was lost: you'd send a payment request, the client would pay it, and that payment landed against the appointment as a deposit. The deposit covered the full price, the session went ahead, you marked it completed — and the calendar still acted as if a card-on-file charge was waiting to be tapped.

    The calendar tile now treats deposit ≥ total as already paid: no red tile, no Charge pending subtitle, no card emoji — the appointment shows in the normal completed-grey style like any other paid session.

    While fixing this I also re-worded the modal button itself. It used to read ✓ Mark fully paid (deposit covers total) — the leading green tick made it look like the action had already been done, when actually it was still a call-to-action. It now reads Tap to mark fully paid (deposit covers total) so the prompt is unambiguous. Tapping it records the official "deposit_only" status against the row for your income reporting; the calendar tile no longer pretends money is outstanding while you decide.

  6. Settings now opens on a tile grid showing what's set up and what's still cold

    Until now, clicking Settings in the top bar (or on the mobile icon strip) dropped you straight into the Profile screen — fine if that's where you were heading, less helpful if you weren't sure which screen you needed.

    The Settings button now opens a landing page with every settings area laid out as a tile — Profile, Locations, Services, Availability, Travel area, Booking, Reminders, Intake, Aftercare, Wellbeing, Emails, Message clients, Events, Payments, Promotions, Bundles, Loyalty, Referrals, Waitlist, Reviews, Integrations, Analytics, Credentials, Trusted Therapists, Account.

    Tiles that are set up show a soft green pill underneath telling you the state (e.g. "5 active", "Stripe connected", "Calendar connected"). Tiles you haven't touched yet stay plain — no red "missing!" badges, no homework vibe — just neutral, click in when you're ready.

    The groupings (Setup, Schedule, Clients, Commerce, Marketing, Account) mirror the left rail, so once you click into a tile the rail you already know is still there. Inside each group, free features come first, then Pro, then Plus — same order as the rail.

    If you had `/dashboard/settings/profile` bookmarked it still works — only the Settings button in the top bar (and the mobile cog icon) has changed where it points by default.

    See it →
  7. Service descriptions now keep your paragraphs and bullet points

    Thanks to Emily for the nudge. The description field on each service used to flatten everything into one solid block of text — even if you'd typed it as separate paragraphs, hit enter for line breaks, or laid it out as a bulleted list, clients saw it all squashed together on your booking page.

    Now the description preserves whatever line breaks you typed. Hit enter for a new line, leave a blank line between paragraphs, type your own bullets (• or -) at the start of a line — it'll all render exactly as you wrote it on your profile, booking page, and "buy a package" page.

    Nothing changes for existing descriptions that are one continuous paragraph — they look the same as before. The dashboard inline editor now uses Cmd/Ctrl + Enter to save (so plain Enter inserts a newline like you'd expect in any other text box).

    See it →
  8. Half-hour time labels on the availability grid

    Thanks to Marcin for the nudge. The weekly slot editor on Calendar → Edit availability used to only label the hour rows (09:00, 10:00, 11:00…), which made it slightly fiddly to land on the right cell when you wanted, say, the 10:30 slot.

    The left column now shows every 30-minute mark — 09:00, 09:30, 10:00, 10:30, and so on — with the half-hour labels rendered a touch smaller and lighter so the hour boundaries still read first at a glance. To match, a dim dashed line now runs across the grid at each 30-minute mark, so you can see exactly where the half-hour falls inside every day column too.

    Nothing functional has changed — the grid still paints in 30-minute slots, you still tap-or-drag the same way. It's just easier on the eye.

    See it →
  9. Loyalty milestones: set a minimum session length per milestone

    Thanks to Marcin for the suggestion. If a chunk of your bookings are short add-ons or quick top-ups, you probably don't want those to chip away at a big reward the same way a full hour does — but you might still be happy for short sessions to count toward smaller milestones.

    Each milestone now has its own Minimum session length field on the add/edit form. Set it to e.g. 60 on your "10th session" milestone and only completed sessions of 60+ minutes will count toward it — shorter sessions still happen, still get paid for and SOAP-noted as normal; they just don't move the needle on that milestone. Your "5th session" milestone can keep its minimum at 0 (every length counts) at the same time, so the two thresholds live happily side-by-side.

    For back-to-back bookings, the combined length is what we check — so a 30-minute add-on tacked onto a 60-minute treatment still counts toward a milestone with a 90-minute minimum.

    Milestones with a minimum show an amber "60+ min" pill in the list, and the matching client portal card explains the rule too. Leave the field at 0 (the default for both existing and new milestones) to keep the current behaviour.

    See it →
  10. Tightened the client sign-in screen so it can't be used to look up clients

    The sign-in screen on your booking page used to do something convenient but a bit too revealing: if a returning client typed an email we didn't recognise, we'd ask for their mobile number and — if it matched — show them a half-hidden email like *pg\\\@gmail.com** so they'd remember which address they'd used.

    The trouble is that anyone could type any email or mobile number on your booking page and get a yes/no on whether that person is a client of yours. With enough patience, a stalker, employer, or jealous partner could check a list of phone numbers against your client list. Not theoretical — the same shape of leak has bitten other practice apps.

    What changed:

    • The screen no longer tells the caller whether the email or number matches. It always says "check your inbox".
    • If a client genuinely forgets which email they used, there's a "Forgot which email? Use my mobile number →" link that triggers a sign-in email to the address on file — but never shows them the address on screen.
    • All three back-end endpoints that used to confirm "yes, this email/number is a client" have been deactivated.

    What you might notice: very occasionally a client will message saying "I can't find which email I used with you." Look them up in Clients, tell them the address, and they'll get the sign-in link the next time they try.

    Not something most therapists will see day-to-day, but worth flagging because the behaviour of the recovery screen did change.

  11. "Paid tiers launching soon" signpost now sits above the settings menu

    A new yellow card has appeared at the top of your Settings menu — at the top of the left rail on desktop, and just above the tab bar on mobile. It reads Paid tiers · Launching soon · See plans →, and tapping it opens the Plans page where Pro and Plus are laid out side-by-side with the full feature comparison underneath.

    It's purely informational right now. Billing hasn't launched, so nothing on the Plans page is asking you for money today — you can read through, see what each tier covers, and that's it.

    If you do want to lock in Pro or Plus ahead of launch, the Reserve buttons on that page let you save a card. Clicking one now opens a short confirmation panel first that spells out exactly what happens — no charge today, first payment only when billing launches, cancel from this same page any time — so the Stripe screen that follows doesn't catch you off-guard.

    This is the start of the run-up to paid tiers going live. You'll see a few more gentle signposts over the coming weeks; nothing changes in how MassageHub works for you today.

    See it →
  12. Fix: every payment flow now copes with a Stripe disconnect/reconnect

    If you ever disconnected and reconnected your Stripe account (for example switching from Express to Standard), some of your existing clients had a "card on file" reference that secretly pointed at the old account. The card itself was gone, but MassageHub still thought it had one — and the way the app behaved depended on which screen you happened to land on.

    The full sweep:

    • Send payment request on an appointment for one of those clients now quietly creates a fresh Stripe customer instead of erroring on the stale one. The Checkout link comes through, the client pays, and the card is saved off-session for the next charge.
    • Client portal → Save a card opens a fresh card form instead of refusing.
    • Charge client now (and every cron-driven charge — auto-charges, cancellation fees, no-show fees, package charges, membership top-ups) now treats a 404'd Stripe customer as "no card on file" rather than a generic error, so the right "Send payment request" fallback is offered.
    • F-CardDecline recovery emails no longer get fired for a stale customer where the email link couldn't work anyway — these now skip recovery and the therapist is told straight away.
    • Membership card-update screens (therapist and client portal) and the /update-card email link now show a clear "this is no longer linked to a valid Stripe customer — please set it up again" message instead of a Stripe API error page.
    • Therapist packages → Charge card correctly says "no saved card" instead of failing the dialog with a 500.

    In short: every code path that used to read a saved-customer reference now verifies it on the current Stripe account before relying on it.

  13. Restore archived membership plans and treatment packages

    Archiving a plan or package used to be a one-way door — once it was off the public list, the only way back was to recreate it from scratch (and lose the purchase history that was tied to it). Now it works the same as your services list: on Settings → Payments, archived items collapse into a tidy ▸ Archived plans (n) and ▸ Archived packages (n) roll-up at the bottom of each card, and every one has a small Restore link that brings it straight back to active. The Stripe price / product is reactivated for you at the same time, so existing purchase links start working again the moment you click. Thanks to Marcin for asking for this!

  14. Fix: the first monthly membership charge actually gets attempted

    A nasty silent failure on membership sign-ups. When a client subscribed to one of your monthly plans, the subscription was created in Stripe, the invoice was raised, the payment method was set as the default — and then the bank was never asked to charge it. Their portal showed Payment overdue, their card was untouched, and the only way to recover was for you to spot it.

    The cause was an API change at Stripe's end that we missed when we upgraded the integration earlier this year. The field we relied on to drive the first charge (`invoice.payment_intent`) was renamed (to `confirmation_secret`) and the old name now silently returns nothing. Every membership sign-up since the upgrade looked like it worked but never actually attempted the first charge. The webhook never fired because the bank was never asked.

    Now we drive confirmation server-side using the new field, the bank gets asked on the first try, 3D Secure runs through inline if the bank wants it, the charge lands, and the membership flips to Active before the page even finishes loading.

    Surfaced by a client who tried to start a 4×/month plan and ended up stuck three times in a row before we tracked it down.

  15. Fix: approving one back-to-back booking now turns the whole group green

    When a client requested back-to-back sessions in application mode and you tapped Approve booking on one of them, the system was approving all of them in the database — but only the row you tapped turned green on the calendar. The siblings stayed orange and kept showing the Approve booking button, so it looked like you still had two or three more to approve. You didn't, but you couldn't tell from looking.

    Now approving (or declining) a single session in a back-to-back group instantly updates every sibling in the calendar view too — they all flip to confirmed (green) or cancelled together, and the Approve/Decline buttons disappear from the rest. No more "did that actually work?" moment.

  16. Fix: post-session charges work for clients who pay with Stripe Link

    Stripe now heavily promotes Link — its 1-click saved-card wallet — to returning customers at checkout. So a growing number of your clients are paying their booking deposits via Link rather than a plain card. That hit a snag in our charge code: when you tapped Charge remainder (or Charge on a completed session), MassageHub looked up the saved card on the Stripe customer record but ignored Link payment methods. The charge would fail with "No saved card found on the customer record" — even though Stripe was perfectly happy to charge that Link wallet off-session.

    The lookup now accepts any payment method the client saved at booking — card, Link, anything reusable — so the post-session charge goes through on the first tap. As an extra belt-and-braces, when the booking has a deposit on file we now go directly to that deposit's payment method, so even if the customer-record lookup somehow comes up empty we use the same method that already worked once.

    Surfaced by a back-to-back booking on Sunday: three sessions, £85 deposit paid with Link, then the £131.75 remainder wouldn't collect at the end of the day. Fixed for everyone now.

  17. Import reviews from Facebook, Bark, Trustpilot — anywhere

    Most of you have collected glowing reviews on platforms that don't talk to MassageHub — Facebook recommendations, Bark testimonials, Trustpilot ratings, lovely emails from clients. They've been sitting there gathering dust while only your Google and Fresha reviews show up on your profile.

    Not any more. Reviews → Imported is a new tab where you paste reviews from any source and they appear on your public profile alongside Google and Fresha.

    How it works. On a desktop browser, open your Facebook reviews page (or Bark, Trustpilot, Yell — anywhere), scroll to the bottom so all reviews load, then ⌘A → ⌘C → paste into MassageHub. Tag where it came from ("Facebook", "Bark", etc.), click Parse, and our AI extracts each review — name, text, star rating where visible. You confirm the list, edit anything that looks off, and save. The reviews show on your profile with a small badge so visitors see exactly where each one came from.

    Re-pasting is safe. When more reviews land on Facebook next month, just re-paste the page — identical reviews are recognised and skipped, only new ones are added. So one workflow keeps you in sync forever.

    Email testimonials and word of mouth work too — there's an "Or add one manually" button for typing in single reviews from sources that don't have a public page.

    Thanks to Rose for asking for this — she wanted to bring her Facebook reviews onto her profile, and the same flow now works for every other source too.

    See it →
  18. See a client's loyalty stars at a glance — and a tighter "full price" rule

    Two small changes to Loyalty milestones that go together.

    1. The "X stars" pill is now on every client's profile. Open any client in Clients → [name] and you'll see a small amber pill at the top, right next to their session count. It's the same number the client sees on their loyalty card on their dashboard — so you can answer "where is this client in my loyalty programme?" without leaving their profile. The pill only shows once you've set up at least one active milestone, so it stays out of the way if you're not running loyalty.

    2. "Full price" now means actually full price. A star should be a thank-you for a client who paid your full advertised price with no discount stacked on top — that's always been the principle, but the count was a bit too generous. From today, a session doesn't* count toward stars if any of these applied: membership credit, treatment package, back-to-back discount, green / eco discount, promo code, gift card, manual price adjustment, or a label discount on the client's record (Friend / VIP / Staff with a percentage off). Membership and package sessions were already excluded; the others are new.

    If you preferred the old behaviour, the existing Count membership and package sessions toggle at the top of Settings → Loyalty now means "count every completed session regardless of discount" — flip it on and you're back to the looser rule.

    Nothing changes for rewards already issued — we never claw back a code a client has earned.

    See it →
  19. New-booking alerts now name the clinic

    If you have more than one clinic location, the New appointment email, SMS and push alert had a small but real gap: they told you the client, service, time and price — but not which of your clinics the booking was for. Easy to miss, and easy to walk into the wrong building.

    The alert now includes a 📍 location line in the email and tacks at [clinic name] onto the SMS and push. Mobile / home-visit alerts are unchanged — they already showed the client's address. Application-mode requests and back-to-back bookings get the same treatment so multi-clinic therapists are covered everywhere.

  20. Fix: one reminder per back-to-back booking, not three

    A client with three back-to-back appointments on the same day was getting three separate reminder emails (and SMS, and pushes) — one per session — landing in their inbox a few minutes apart. Same for the therapist. The reminder cron treated each appointment in the group as if it were a standalone booking.

    Back-to-back groups now collapse into one consolidated reminder per booking, per channel. The email lists every session in the group with the start time of each — first session named at the top with the address and any access notes, the rest as a bullet list underneath. SMS reads "your 3 back-to-back sessions with [therapist] start on [date] at [time]" instead of one message per session. Push notifications likewise show "3 back-to-back sessions" with the start of the first. Solo bookings are unchanged — same email, same wording.

    No action needed; the dedup is keyed on the earliest session in the group, so even if your hourly cron picks up a different sibling first, only one reminder goes out.

  21. A small "who am I?" card for clients arriving from Google

    Emily noticed her Mellow Light Therapies profile is now showing up in Google search results — great — but the link drops clients straight onto Step 1 of the booking flow ("Where are we visiting?"), with no context about whose page they've just landed on.

    The top of your booking page now shows a small intro card on the first step only — your photo, your name and business, your location (with Mobile therapist appended if you have a mobile location set up), plus plain-text links to View full profile and (if you've added a website to your profile) Visit website. Both links open in a new tab so they don't interrupt the booking. The card is hidden as soon as the client moves past step 1 so it doesn't clutter the rest of the flow, and it's hidden entirely for returning clients who already have an account with you. Nothing to set up — it pulls automatically from your profile.

    To check it yourself, open your booking link in an incognito / private window (or any browser you're not signed into). If you visit your own booking page in your normal browser and you've ever made a test booking with yourself, the system treats you as a returning client and hides the card — that's the same logic that hides it from your real clients.

    Thanks to Emily for spotting this!

    See it →
  22. Tap a client in Today's schedule to open their appointment

    The rows inside the Today's schedule widget at the top of the dashboard looked tappable on a phone — name, time, price all sitting there like a button — but tapping them did nothing, which on mobile is a particularly easy place to get caught out. Now they're properly wired up. Tap any row and the calendar opens at that appointment's date with its detail panel already open: charge, edit, mark complete, or jump to the client without an extra hop.

  23. Fix: renaming a service on mobile

    On the Services page, renaming a service used to mean hovering over the title to reveal a Rename link — fine on a laptop, invisible on a phone. The whole title is now tappable: tap the service name and it goes straight into edit mode, on any device.

    See it →
  24. Marking sessions complete — what it unlocks, and a tidy-up if you've let some pile up

    A quiet check of the appointments table this week turned up something worth flagging: a few of you have a backlog of past sessions still showing as confirmed rather than completed. One tap to mark complete, but easy to forget — especially if a client paid in cash and there's nothing on screen demanding action afterwards.

    Here's why that one tap matters more than it looks:

    • Your income figures — the revenue dashboard only counts completed sessions. Anything left on confirmed is invisible to your monthly numbers.
    • Review requests — the moment you mark complete, a friendly review email goes to the client (your in-app review link, plus your Google review link if you've added one). No completion, no review request — even from happy clients who'd have written one.
    • Loyalty rewards — your loyalty programme counts completed sessions only. A regular client who's due their 10-session reward won't get it until the qualifying session is marked complete.
    • Referral credits — a referred client's referrer is only credited when their first session is marked complete.
    • Aftercare emails — these can only be sent for completed sessions.
    • Package and membership credits — credits decrement at completion. Leave sessions confirmed and the client's remaining balance looks artificially high.

    None of this depends on Stripe. If you take cash or bank transfer, the completion signal is what fires reviews, loyalty, reporting and aftercare — not the payment method. Did this session actually happen? is the question one tap answers.

    Three things changed to make this easier:

    1. A "Your appointments" card on your dashboard home with three rows — upcoming, wrapped up in the last 30 days, and any awaiting wrap-up. So you don't need to open the calendar to spot a backlog. 2. Past confirmed sessions in the calendar now render amber with a "To complete" tag. The detail panel leads with "Did this session happen?" and offers Mark complete / No show / Cancel as the primary actions. 3. A Tidy up button if you've already got a pile-up. It marks them all complete in one go, and crucially dedupes review emails per client — a client whose last six sessions were never marked complete will receive one review request (for their most recent session), not six in a minute.

    The daily habit that keeps it tidy: mark sessions complete the same way you tidy your room at the end of the day. One tap per client; reviews fresh while the visit is still in their head; numbers honest in your dashboard.

    See it →
  25. Travel area settings — clearer labels and a small safety net

    A therapist had set their Normal area to 1 mile and didn't realise that meant nearly every prospective home-visit client was being bumped to a "send a request" form instead of booking through. The label didn't make the consequence visible.

    The Settings → Locations → Home-visit booking limits section (it used to be called "Travel area") now spells out what each value does:

    • Auto-book up to — inside this distance/time, clients book straight through.
    • Won't travel beyond — outside this, home visits are rejected (we suggest a clinic if you have one).
    • Anything in between sends a request you approve manually.

    There's now a small zone diagram showing all three bands at a glance, and a soft warning that appears if you set the auto-book area to something tiny (≤ 2 miles or ≤ 5 minutes). If a small area is what you want, you can ignore it — nothing blocks you from saving. No action needed unless you're a mobile therapist — pop in to check yours look right.

    See it →
  26. Behind-the-scenes: charge-flow audit and fixes

    A wider audit of the booking, approval and post-session charge paths turned up a small handful of corner cases where settings could quietly conflict with each other (the same shape of issue Nicola spotted with deposits + Booking application mode). Specifically: back-to-back bookings that mixed a membership-funded slot with a paid slot were charging for the membership slot AND consuming a credit at completion — that's now fixed so only the paid slot is charged. Late-cancel and no-show fees no longer fire on bookings paid by a membership or package — the lost credit is the consequence. Deposits at approval time now reflect any Adjust changes you made before approving. And a few smaller tightenings around discount-code reservation and reporting accuracy. No action needed on your end; nothing visible has changed unless you were affected by one of these.

  27. Deposits now work in Booking application mode

    If you had Booking application mode turned on (so you review and approve each booking) AND Deposits turned on, the deposit was silently being skipped — application mode only saved the client's card and waited for your approval, with no charge ever happening at booking. The deposit setting did nothing in that combination.

    Now it just works the way you'd expect: when you approve a pending booking, the deposit is taken at that moment from the card the client saved, the booking is confirmed, and the rest is charged after the session. The approval email tells the client exactly what was charged and what's still owed. If the saved card declines on the deposit, the booking is still approved (just like before for after-session charges) and a recovery email goes to the client with a link to update their card. Thanks to Nicola for finding this — your feedback fixed something real.

    See it →
  28. Remove a price adjustment from a booking

    If you added an extra charge or a discount to a booking using Adjust and changed your mind, there was no way to take it off again — the editor only had Save and Cancel, so the adjustment stuck. There's now a Remove adjustment button that clears it cleanly and puts the booking back on its standard service price. Find it on the appointment detail panel, under the Adjust editor. Thanks to Nicola for spotting this!

  29. Deposits panel now explains how it interacts with Smart charging

    When the When to charge setting is set to Smart charging, deposits only apply to returning clients — new clients still pay the full fee at booking. That's by design (it stops first-time no-shows), but the deposits panel didn't make it obvious, so a £10 deposit setup could look like it wasn't working when a test booking was charged in full. The deposits panel now spells this out in plain English and tells you which setting to switch to if you want every client to pay only a deposit. Thanks to Nicola for flagging the confusion.

    See it →
  30. Fix: top-up sessions could fail when the bank wanted to verify the charge

    When a client used up their monthly membership credits and tried to buy a top-up session at booking, the charge sometimes failed if their bank wanted to verify the payment first — the same kind of bank check that kicks in for the very first subscription charge. The booking screen would just show "Payment failed" with no obvious next step.

    The top-up flow now puts the bank verification on screen the moment it's needed: a quick confirm-with-bank step appears, the client confirms, the credit lands, and the booking carries on. If they cancel or it fails, no charge is taken and no credit is added — and the same payment can't be double-credited if the network hiccups mid-confirm.

  31. Fix: membership subscriptions could fail with no path to recover

    A client trying to subscribe to a monthly plan would sometimes hit an error saying their bank required additional verification — and from there, nothing they did got the subscription through. The card was already on file, but the bank wanted to verify the very first charge specifically, and we had no way to walk them through that extra step.

    The Subscribe flow now handles this case end-to-end. If the client's bank prompts for verification on the first monthly charge, the verification screen appears (in-app on most devices, or via the bank's app on mobile), the client confirms, and the subscription completes — credits land, the membership turns active, and they're back on the page with no stuck state. If the verification is cancelled or fails, no payment is taken and no phantom credits are created. Thanks to Brendan (via Paul) for surfacing this.

  32. Fix: package sessions could go past zero, showing "-1 sessions remaining"

    When a client's package was used up, completing the next appointment didn't stop the counter — it kept ticking down past zero, so the appointment card showed nonsense like "-1 sessions remaining". A few related causes have been fixed.

    Completing now refuses to use a package that has no sessions left. You'll see a clear error: "This package has no sessions remaining. Unlink it from this appointment or grant the client a new package before completing." — exactly the prompt you need to take the right action.

    Granting a new package now picks up the slack on existing recurring bookings. Previously, when you granted a fresh package to a client whose recurring slots were already pinned to an exhausted package, the new pack only attached to brand-new appointments. Their next session still drew on the empty pack and silently overshot. Now, granting a new pack also re-links any future recurring appointments that were stuck on an exhausted one, so the new pack starts working from the very next session.

    Package and membership credits now count down once, when you complete the appointment — never at booking. Previously, if a client booked themselves into a session using their package via your booking page, one credit came off at the moment of booking and another came off when you marked it complete — so they were charged two of their five sessions for one massage. Same problem for memberships. Going forward there is one rule: a credit is consumed when an appointment is completed. To stop a client from over-booking before any complete, the booking page now also looks at how many of that client's confirmed-but-not-yet-completed bookings already point to the package or membership and treats those slots as "reserved" — they can't book a 6th session on a 5-session pack just because none have been completed yet.

  33. Tap any day in This week to jump straight to that day in your calendar

    The day cards (MON / TUE / WED…) inside the This week widget at the top of the dashboard looked tappable, but weren't — tap them and nothing happened. Now they are properly wired up. Tap any day — including empty days — and the calendar opens focused on that date: on a phone you land directly on that day's view; on desktop you land on the week containing it. One less reason to scroll-and-swipe to the appointment you were trying to reach.

  34. Fix: add-ons and home-visit surcharges were left off the booking charge

    When a client booked a treatment and added an optional add-on (e.g. an aromatherapy oil), the booking page and confirmation email correctly showed the full price — but Stripe was only charged the base treatment price, not the add-on. The same gap also affected mobile bookings where a per-area travel surcharge applied. Both amounts were being dropped on the way to the payment. Fixed: the charge now includes any selected add-ons and any home-visit surcharge, matching what the client sees and agrees to at checkout. Thanks to Adam for spotting this on a recent booking.

  35. Send the intake form by email — or copy the link for WhatsApp

    Tapping Send intake form on an appointment now opens up two options instead of one. Email it sends the intake form to the client by email exactly as before. Copy link copies the secure intake form URL to your clipboard so you can paste it into WhatsApp, Messenger, an iMessage thread, or any other place you already chat with that client. The link works the same whether you email it or share it yourself, and we still create a single intake submission per appointment behind the scenes — so however the client opens the form, their answers come back to the right place. Thanks to Emily for suggesting this!

  36. Booking page scrolls the basket into view when a client adds a treatment

    On the client-facing booking page, a running basket and Continue button sit at the top of the treatments step the moment the first treatment is tapped. On a phone, clients were usually scrolled partway down the treatment list when they tapped one — so they never saw the basket appear or noticed the Continue button waiting for them. Now, every time a client adds a treatment, the basket scrolls smoothly into view at the top of the screen, making it obvious their selection has been added and that they can carry on to pick a date. Thanks to Marcin for spotting this!

  37. Loyalty card on the client dashboard, plus a "stars earned" list for you

    Three things, one update.

    Clients now see a loyalty card on their dashboard with gold rubber-stamped stars marking each completed full-price session. Empty circles show how many more sessions until their next reward, with the reward (e.g. "10% off") on the final circle. The moment they hit a milestone, the card flips over to show their discount code right there — they'll see it every time they open their dashboard until they use it, no digging through old emails. Only one outstanding reward shows at a time so codes don't pile up, but counting carries on in the background — they never miss a reward they've earned. The next one appears the moment they redeem the current one.

    Membership and package sessions are no longer counted toward milestones by default. They're already getting a discount through their plan, so it doesn't feel right to also have them earning loyalty rewards on top — that was the design intent of milestones from the start, and it's now reflected in the count. If you'd rather include them, there's a new toggle at the top of Settings → Loyalty: Count membership and package sessions.

    A new "Clients earning stars" list at the bottom of Settings → Loyalty shows every client and how many stars they've collected, sorted by most-loyal first. Rows where a reward is outstanding are flagged so you can spot a client who might appreciate a personal nudge to come back and use it.

    See it →
  38. No more alarming "Charge £0 remainder" on fully paid bookings

    When a deposit covers the full price of a booking, the appointment modal used to show a big red Charge £0 remainder button after you marked the session complete — alarming, and it looked like you were about to charge the client again. The button is now a calm teal ✓ Mark fully paid (deposit covers total) instead, and the confirmation copy is rewritten to say Mark booking as fully paid? with a clear note that no further card charge is happening. Same one-tap action — just no longer scary.

  39. Help your profile show up on Google — and see when it works

    A small but useful change driven by what we're seeing in Google Search Console for the directory.

    A new "Help clients find you on Google" section in the help blurb at the bottom of Settings → Profile. It walks you through the things that genuinely move the needle: pick a short, distinctive booking slug (single name or word — generic phrases like "massage" compete with millions of other pages), fill in your bio properly so there's real text for Google to rank, mention your treatments and the area you cover (the words clients actually type), connect your Google Business Profile in Settings → Reviews (the single biggest ranking signal Google uses), upload a profile photo and gallery so the page looks like a real business, and be patient — Google typically takes 2–6 weeks to start sending traffic to a new profile.

    Why this advice in particular. Of all the directory profiles, Marcin's is doing the most on Google — already getting clicks within five weeks of going live. What's different about his profile is exactly the list above: a one-word slug (`/marcin`), a complete bio, a linked Google Business Profile with 41 five-star reviews flowing in, photos, and a specific niche (sports therapy in London) rather than generic massage.

    Bookings now record where the client came from. Behind the scenes, every new booking now captures the referrer (e.g. google.com, instagram.com) and any UTM tags from the link the client clicked. Manual and admin-created bookings stay blank. Over time this gives us a real view of which marketing channels are bringing in paying clients vs which are just impressions — useful for both the directory and for therapists who want to see whether their own Instagram links and Google Business listing are converting.

    See it →
  40. Sign in with a magic link — no password needed

    You can now sign in to MassageHub by typing your email and tapping Email me a magic link. Click the link in the email and you're straight into your dashboard. The login page also handles wrong passwords much more kindly now: instead of a flat error, you get an inline panel offering to try again, send you a magic link, or reset your password — and the email field is carried over so you don't have to retype it. If you're using MassageHub as an installed home-screen app on your phone, the email also includes a 6-digit code you can paste straight into the app, so you never get bounced into a separate browser. Thanks to Liam for flagging this — his report uncovered a small group of therapists who'd hit the same dead-end and we've been able to reach out to them too.

  41. Clearer payment status on every appointment

    You can now see at a glance whether an appointment has been paid, is owed, has a card on file, or has nothing arranged yet. The appointment modal has a new Payment row showing one clear coloured pill: Paid £X (charged via card or marked received), Card on file (we'll charge after the session), Pay on the day (cash, BACS or other — mark when received), Deposit paid £X with the remainder due, Covered by membership / package, Refunded £X, or Not paid with a nudge to send a payment request. The pill replaces the small grey "Charged" line that used to only appear for Stripe charges and never told you anything about cash bookings or cards on file.

  42. Tidier booking flow + a properly useful Manage booking page

    A round of polish on the client booking experience. The Manage booking page (where clients land from their confirmation email) now shows the address with directions, an honest payment status, an intake form reminder if needed, and Add to calendar as the primary action. Cancellation copy is now correct for cash bookings, and the email cancel/reschedule links work without logging in.

  43. A fresh look for the therapist side — dashboard, navigation, and a smarter wellbeing card

    The therapist side of MassageHub now matches the look the marketing site and your client-facing pages got earlier this month — a calmer, warmer palette (paper, evergreen, amber) with a softer serif for headlines. The whole product finally feels like one thing rather than two.

    A reworked dashboard. The home page has been rebuilt around what you actually do first thing in the morning. A clearer greeting line tells you the date, how many sessions you have today, and how much income they'll bring in. Today's schedule sits front and centre with each appointment showing the time, client, service, location and price in one tidy row. A new weekly strip below shows the next seven days at a glance — today is highlighted in evergreen, busier days have a fuller progress bar.

    The Wellbeing card got proper progress bars back. It now shows live bars for hands-on minutes today, hands-on minutes this week, appointments today, and your working streak — colour-coded mint when you're comfortable, amber as you approach a cap, warm orange if you've gone over. Avg energy from your post-session ratings sits beside the kicker as a small chip.

    Mobile nav now lives in the top bar. Four icon buttons — Calendar / Clients / Income / Settings — between the logo and your "to set up" pill. One tap to anywhere. No hamburger menu to fish around in. The Income icon is a £ (because we're UK-focused — that may change one day if we expand).

    The Settings area feels like one place. The mobile sub-menu now slides smoothly between sections rather than resetting to the start, and the active tab is always centred so you can see what you're on. Tapping a tab also shows an instant skeleton while the next page loads, instead of a blank delay. Services, Availability, Intake, Events, Reviews and Message clients all keep the Settings icon highlighted now too — they're part of the same area.

    Smaller upgrades worth knowing about. Your Calendar pinch-zoom level is now remembered so you don't have to re-zoom every time you come back. The "X to set up" pill in the top bar is amber when you have required steps and teal when only recommended ones remain — less alarming when you're actually almost done.

    This is just phase one — the calendar itself and the rest of the settings pages get the same treatment in the next couple of rounds.

  44. A reminder — install MassageHub on your phone (and your clients can install your booking page too)

    This one isn't new, but it's worth surfacing again because most therapists who haven't set it up don't realise quite how much it gives them.

    What a PWA is. A "Progressive Web App" is a website that behaves like a native app once you save it to your home screen. No App Store, no Play Store, no review process, no download — you just open MassageHub in your phone's browser and tap "Add to Home Screen". From then on it has its own icon, opens full-screen with no browser bars, and runs like Instagram or WhatsApp would.

    Why it's better than an app store app. Updates land instantly — there's no "update available" prompt, no waiting for App Store approval, no version fragmentation. Whenever something ships on MassageHub, the version on your home screen has it the next time you open it. It also costs you nothing in storage compared to a downloaded app, and we can fix bugs and ship features the same day rather than waiting days for Apple to review them.

    Push notifications work too — even on iPhone. Once you've added MassageHub to your home screen and opened it from the icon (not from Safari), you can enable push notifications. From then on, every new booking, cancellation, reschedule request and waitlist sign-up pings your phone instantly — exactly like a text message would. No more refreshing the dashboard to see if anyone has booked. Most therapists use this as their main signal that the day is filling up.

    Your clients can install your booking page too — and the icon is named after you. This is the bit most therapists miss. When a client adds your `/book` page to their home screen, the icon on their phone is your first name, not "MassageHub". So a client who books with Sarah ends up with an app called "Sarah" on their phone that opens straight into your booking flow. The cancellation and waitlist emails already nudge clients to install — for regulars this becomes their go-to way to rebook.

    Full instructions for both you and your clients are in the help article below.

    See it →
  45. Waitlist — fully-booked days are now tappable, plus instant push for you and your clients

    Three improvements to the booking waitlist.

    Fully-booked days are now tappable. Until now, clients couldn't actually reach the "Join the waitlist" button on a day that was full — the calendar disabled it. Fixed. Sold-out days still show with a strike-through (so the visual signal stays), but tapping one now lands the client on the time-slots screen with the join-waitlist prompt right there.

    You get a push notification the moment someone joins. Same channel as your booking pushes — straight to your phone. There's also a new teal banner on your Calendar page showing how many people are currently on the waitlist, linking through to manage it.

    Clients can opt-in to instant push too. After a client joins your waitlist they see a "🔔 Get an instant alert when a slot opens" button. If they enable it, they get a push the second a cancellation triggers an opening — faster than the email, and ahead of anyone else still relying on inbox checks. The cancellation email also now teaches them how to install the booking page to their home screen so push works on iPhone.

    See it →
  46. Smarter Fresha import + bulk delete + tidier UK phone numbers

    A bundle of improvements to the Clients page.

    Fresha imports are now instant and capture more. Drop a Fresha customer-list CSV into Clients → Import and it processes in well under a second (the AI step has been replaced with a parser that knows Fresha's exact format). It now also pulls in marketing consent (so opted-in clients show up immediately on the Message clients page) and a new "Do not book" flag for any client you blocked in Fresha — shown as a red badge on the client record with the original block reason. Re-running the import refreshes those two flags on existing clients, so a Fresha unsubscribe carries across the next time you export.

    Bulk delete from the client list. Tick the boxes next to any clients on the list and a new red "Delete selected" button appears next to the existing "Invite to book" — two-click confirm to avoid accidents.

    UK phone numbers cleaned up on import. Fresha exports UK mobiles in international form (`447776...`) which is harder to read at a glance. They now come in as the friendlier `0777...` form. A one-off cleanup has been run across existing clients too, so your whole list is consistent.

    See it →
  47. Clearer "Restrict availability" panel on services

    The per-service restriction panel (Services → edit a service → "Restrict availability") has been reworked to remove a few sources of confusion. The section is now called "Restrict availability" instead of "Restrict booking hours". The "Latest start" time field has been renamed "Latest end" — that was always how it actually worked under the hood (the appointment must finish by that time, travel afterwards isn't counted), the label was just misleading. And the day picker is now a row of on/off pill toggles — tap a day to switch it off, greyed-out days are blocked. Thanks to Emily for the nudge to make this clearer!

    See it →
  48. Intake forms — completion email + optional 24h reminder

    Two improvements to intake forms. First, when a client finishes filling in their form you now get an email with a link straight through to their responses — no more checking the dashboard to see if they've done it. Second, each form has a new "Send a reminder 24 hours before the appointment" toggle on the edit screen — turn it on and any client who hasn't completed the form yet gets a one-off nudge the day before their session. Off by default; flip it on per form. Thanks to Nicola for suggesting both!

    See it →
  49. Last-minute reschedules — now a request you approve

    Until now, if a client wanted to move a booking inside your notice window the change went straight through. That left a loophole — they could reschedule a 5pm-today appointment out to next week, then cancel it for free, side-stepping the cancellation fee entirely. Closed.

    From today, a reschedule requested inside your Late-reschedule window doesn't apply automatically — it comes to you as a request. The client sees an amber warning explaining you need to approve or decline, and that the late-cancellation fee still applies if they end up cancelling instead. You get an email with one-click Approve / Decline buttons, a push notification, and an amber banner on your Appointments dashboard with the same actions. Approve and the booking moves; decline and the original time stays in place — the client either shows up, or they cancel (in which case your cancellation policy kicks in as normal).

    While we were in there: the Settings → Payments panel has been retitled and rewritten so the two windows are clearly distinct. Late-cancellation window governs cancellations only; the new Late-reschedule window (in the renamed "Client reschedules" panel) governs reschedules only. They default to the same number but you can set them independently — e.g. 24h cancel, 6h reschedule — if you want to be stricter on one than the other.

  50. The client portal has the refreshed look too

    Your clients' /[your-slug]/my portal — the page they see after signing in to manage bookings — is now in the same Living Diary palette as the refreshed profile and booking flow. The next appointment is the hero of the page: a forest-gradient "ticket" card with the time in Fraunces serif, the service, your name, the location and reschedule/manage actions built in. Memberships and packages now read as real assets — a meter showing treatments-this-month left on memberships, a dot progress bar showing sessions remaining on packs, both with the big numbers in serif. Past bookings become a timeline with rebook links. Every existing behaviour stays verbatim: reschedule flow, subscribe, cancel, buy a pack, referral link, trusted-therapist directory, profile edit, PWA install hint, test-mode banner.

  51. The booking page now matches your refreshed profile

    Your /[your-slug]/book page has been reskinned to match the Living Diary look we rolled out on your public profile yesterday — evergreen and amber, Fraunces serif for headings and prices, paper-toned background, a shared sticky top bar with the MassageHub logo and a Sign in button for returning clients. The booking wizard itself is unchanged: every step, validation, payment branch, back-to-back summary, discount code, gift card, travel-area check and membership/package credit flow works exactly as before. Clients now feel one continuous brand from the moment they land on your profile to the moment they pay.

  52. A refreshed look for your public profile page

    Your /[your-slug] page — the page clients see when they click your MassageHub link — has had a proper design refresh. A magazine-style hero with your photo at the top and a readable caption over it; trust chips (Qualified / Insured / Member / Trusted) sit right under the photo; services now render as cards with the price in a serif typeface; reviews are card-per-review with clearer source badges; a sticky "Book Now" bar follows the client as they scroll on mobile; and returning clients sign in through a small modal instead of a form bolted to the top. The palette now matches the landing page (evergreen + yellow + paper) so the whole journey feels like one product. Every setting you already have — section order, show/hide toggles, CTA position, pronouns, gallery — works exactly as before.

  53. Back-to-back bookings — faster, all on one screen

    When a client books multiple treatments in one visit, they now build up the whole booking on the service step itself: each pick drops into a running list at the top, with an × to remove any treatment added by accident and a Continue button as soon as one is chosen. The old "Add another treatment?" in-between prompt is gone. If a therapist has a combined-session cap, longer services that would push the booking over the limit are hidden with a clear note explaining why. Thanks to Marcin for pushing for this!

  54. Zoom buttons on the weekly availability editor

    The weekly slot editor (Calendar → Availability) now has − / + buttons in the week navigation row so you can zoom the slot grid in and out on any device — matching the controls on the main calendar. Pinch-to-zoom still works as before. Thanks to Marcin for suggesting this!

  55. Fix: decline emails no longer include your personal note

    Your personal note (the one set in Account settings) was appearing at the bottom of booking decline emails, which read oddly when you'd just turned down a request — a cheerful "looking forward to seeing you" doesn't belong under an apology. Decline emails now omit the footer. Confirmations and reminders still include it as before. Thanks to Nicola for spotting this!

  56. Fix: clinic booking requests no longer show a mobile address

    When a client started to book a mobile appointment (entering their address) and then switched to a clinic instead, the home address was leaking into your approval request email — making it look like a mobile booking. That address is now cleared when clinic is selected, so your approval emails always reflect the actual appointment type. Thanks to Nicola for reporting this!

  57. Charge or waive a cancellation fee straight from your inbox

    When a client cancels late and a fee is queued for your approval, the email now has two buttons — <strong>Charge £X</strong> and <strong>Waive fee</strong> — right alongside the usual dashboard link. Tap one, confirm on the next page, done. No logging in, no hunting through the approval queue. The links expire at the auto-charge deadline, so they can't be reused later by accident. Works for both late cancellations and no-shows. The "Open the dashboard to edit the amount" link is still there if you want to adjust the fee first.

    See it →
  58. Draft a personal follow-up after a late cancel in one tap (Pro & Plus)

    When a client cancels late or no-shows, the approval queue now has a <strong>Draft message</strong> button alongside Charge and Waive. One tap and Claude drafts a short, warm email from you to the client — personalised to their name, their stated reason, and whether you charged, waived, or took a partial fee. Copy it, paste it into your own email, tweak it, send. Nothing is sent automatically. Requires AI cancellation assist to be turned on in <strong>Settings → Payments</strong>.

    See it →
  59. Clients see your cancellation policy right on their bookings

    The policy now follows the client all the way through — not just at booking, but on their upcoming bookings list and on the appointment page they land on from reminder emails. Outside your cancel window it reads as a gentle reminder; <em>inside</em> the window it switches to a concrete sentence like <em>"Cancelling now will charge £30.00 to the card on file."</em> Hidden for clients you've marked exempt. Same numbers you already set in Settings → Payments, no extra setup.

    See it →
  60. Clients now see your cancellation policy before they book

    Your cancellation window and fee are now shown right on the booking page and in the confirmation email — as a concrete sentence like <em>"If you cancel within 24 hours, 50% (£40) will be charged to the card on file."</em> Your existing free-text policy still appears alongside it. No configuration needed: if you have a fee set up in Settings → Payments, clients see it automatically. Transparent upfront = fewer awkward conversations later.

    See it →
  61. New: mark a client as no-show with one tap

    When someone doesn't turn up, open the appointment on your Calendar and tap <strong>No show</strong>. A quick confirm tells you what's about to happen based on your policy mode, then one tap commits it. Your no-show fee runs the same way as late cancels — alert, approve-each, or auto-charge — using the card on file. Off or client exempt? Nothing is charged; the appointment is just marked.

    See it →
  62. New: AI cancellation assist (Pro & Plus)

    When a client cancels late or no-shows, Claude now quietly reviews the incident and suggests Charge, Partial, or Waive — with a one-line reason grounded in the client's history (tenure, lifetime value, prior cancellations, their stated reason). It shows up right on the amber review banner next to the proposed fee. You still decide — nothing fires automatically. Turn it on in Settings → Payments → Late cancellations &amp; no-shows.

    See it →
  63. Late-cancel policy: clients and therapists now get emails

    Following the late-cancel / no-show launch: clients now get a clear email when a fee is charged, and a warmer "good news — no charge" email when you waive. If you're on Approve-each mode, you'll get an email the moment a pending fee lands in your review queue — with a link straight to the dashboard and a reminder of the deadline before it auto-charges.

    See it →
  64. New: enforce your late-cancel & no-show policy automatically

    Tired of losing income to last-minute cancellations? Settings → Payments now has four modes: Off (the default — nothing changes for you), Alert me (just notify), Approve each (I draft the charge, you confirm from the dashboard), and Automatic (charges on the saved card the moment the cancel comes in). Set a flat fee or percentage separately for late cancels vs no-shows, with a configurable review window before auto-charges fire. Per-client exempt toggle for VIPs. One-click Charge / Waive / Edit on a new amber dashboard banner, with a live countdown. Clients see the policy at booking and on their own appointment page.

    See it →
  65. New: customisable Book Now button on your profile

    You can now add a prominent "Book Now" button to your public profile page that takes clients straight to your booking page — no sign-in required. Set the label to anything you like (e.g. "Book Emily"), choose where it appears on your profile, and toggle it on or off from Profile Settings. Thanks to Emily for suggesting this!

  66. Clients can now add your booking page to their home screen

    A small banner now appears on your booking page and client portal (on mobile) guiding clients to install the app on their home screen — so they can book again with one tap, no browser needed. We've added a short video showing them exactly how to do it. The banner disappears automatically once they've installed it.

  67. New: top-up sessions for membership plans

    You can now allow members to buy an extra session when they run out of monthly credits — perfect for months with five weeks. Enable it per plan in Settings → Payments → Membership plans. Discount-mode plans apply the same percentage discount automatically; fixed-price plans let you set a custom top-up price. Thanks to Paul for suggesting this!

    See it →
  68. New: monthly calendar view for appointments

    The Appointments page now has a monthly view — tap the calendar icon to switch. You'll see the whole month at a glance, with teal dots for confirmed bookings and orange dots for pending requests. On desktop, each day shows the time and client name directly. Tap any day to jump straight to it in the calendar. Thanks to Marcin for suggesting this!

    See it →
  69. Fix: calendar no longer shows double bookings

    If you had a time block (like a lunch break) scheduled at the same time as an appointment, the calendar could make it look like two bookings were happening at once — even though no double booking had occurred. The time block now hides itself whenever a real appointment is in that slot. Thanks to Kim for flagging this!

  70. Paid plans are launching soon

    Paid plans are almost here. If you're on the Free plan and currently using features that will require Plus or Pro, now's the time to check what's changing — and decide whether to upgrade or turn them off before launch day.

    See it →
  71. Fix: jump straight to pending booking requests

    When you have a booking request waiting for approval in a different week, the orange banner on your calendar now includes a "View →" button that takes you straight to that week. Previously the banner said to click the orange appointment, but it wasn't visible because it was on a future week. Also fixed: email is no longer required when adding a new client manually — name and phone are enough. Thanks to Nicola for catching both of these!

  72. Fix: pinch to zoom on the availability screen

    Pinch-to-zoom now works on the availability slots grid on mobile, just like it does on the calendar. Spread two fingers to zoom in and see the time slots more clearly, or pinch to compress the view. Thanks to Marcin for reporting this!

  73. Fix: undo a booking marked complete by mistake

    If you accidentally mark a booking as complete, you can now undo it. Open the appointment and scroll to the bottom — there's a small "Undo complete" option that puts it back to confirmed. Thanks to Kim for flagging this one!

  74. Restrict a service to specific hours or days

    You can now limit when individual services are bookable — for example, offer a relaxing massage only during daytime hours, or restrict a service to weekdays only. Set it in the service edit form under "Restrict booking hours". The restrictions work alongside your existing availability, so they can only narrow slots down, never add new ones. Thanks to Kim for suggesting this!

    See it →
  75. Delete button is now visibly red

    The Delete button on the client detail page was styled in grey, making it look inactive or disabled. It's now clearly red so it's obvious it's a live action. Thanks to Marcin for flagging this!

  76. Fix: client list now fully tappable on mobile

    On Android and iOS, the "View" link on the client list was hidden off the right edge of the screen. The entire row is now tappable to open a client record, and a "View →" link appears directly under the client's name on mobile. Thanks to Marcin for reporting this!

    See it →
  77. Referral rewards are live

    When a therapist you refer activates a paid plan, you get one free month of Plus — automatically, with no cap. Share your referral link from your dashboard.

    See it →
  78. Message your clients directly from MassageHub

    You can now send a message to your opted-in clients from the Clients section — great for sharing availability changes, seasonal offers, or clinic news. Clients control their own preferences and can opt out at any time.

    See it →
  79. Pick any month on the income page + CSV export

    The income page now has a month picker alongside the existing This month / 3 months / 12 months toggle — browse back through any of the last 12 months. There's also a new Export CSV button that downloads the filtered appointment list for any period.

    See it →
  80. Unserved postcode days now greyed out on the booking calendar

    If you've set up service areas by day of the week, the booking calendar now greys out the days you don't cover a client's postcode — instead of letting them pick a date and get bounced with an error at the final step. Thanks to Marcin for reporting.

    See it →
  81. Settings reorganised — Promotions and Bundles now have their own pages

    The Payments settings page used to hold seven unrelated things in one long scroll. It's now three focused pages: Payments (Stripe, deposits, charge timing, cancellation policy), Promotions (discount codes, gift cards, back-to-back deals), and Bundles (memberships and packages side by side, with a plain-English guide on when to use which). There's also a search box at the top of the settings sidebar so you can jump straight to what you need.

    See it →
  82. Mobile: availability grid, SOAP notes, and client contacts all improved

    Three mobile fixes shipped together. The availability slot grid now supports touch — you can drag to mark hours available or unavailable on your phone just as you can on desktop (it was mouse-only before). SOAP notes now show "Saving… / Saved ✓" at the top of the form so you know your dictation persisted without scrolling to the bottom. And on the clients list, phone numbers and email addresses are now tappable links so you can call or email a client in one tap.

    See it →
  83. New therapists get a personalised setup guide

    Anyone signing up now answers four quick questions before they see Getting Started — where they work (clinic, mobile, or both), how they'll take payment, how many services they offer, and how much of the app they want to explore. Getting Started then highlights the steps most relevant to their setup. Nothing is hidden; it just surfaces the right things first so new therapists aren't staring at a blank dashboard wondering where to begin.

    See it →
  84. Click to book, drag to block time off

    On the calendar, a single click now opens the new appointment form straight away. Dragging down a column opens the time off form instead — with the time range pre-filled from your drag. The same works on mobile with a long-press drag. A dashed preview shows the time-off block as you drag so you know exactly what you're adding before the form opens.

    See it →
  85. Clearer "Cancel appointment" button

    The button that cancels a scheduled appointment now reads "Cancel appointment" rather than just "Cancel" — so it's harder to confuse with dismissing the panel. A small change, but one that removes a genuine moment of doubt.

  86. Automatic mileage-based travel surcharges for home visits

    New Settings → Locations → Travel surcharge. Flip the toggle, define bands by distance (miles) or travel time (minutes) — e.g. ≤ 5 miles free, ≤ 10 miles £5, ≤ 15 miles £10 — and every mobile booking is priced automatically from the same Google Maps data we already use for your travel area. Clients see the surcharge inline before confirming, and any manual per-client surcharge you've already set still wins. Thanks to Ali for the suggestion.

    See it →
  87. Clearer payment wording throughout the app

    "Payment link" used to mean four different things in different places — a Revolut/Monzo URL in Settings, Stripe's own product, the email you send asking a client to pay, and the client portal link for buying packages. Each of those now has its own distinct name (External payment URL, Payment request, Purchase link, and so on) across the dashboard, help articles, and emails. Thanks to Kim, Nicola, and Marcin for flagging the confusion.

  88. Settings toggles now surface errors instead of pretending to save

    A handful of toggles across Payments, Loyalty, Integrations, Gift cards, and Membership plans used to update the UI without waiting to hear back from the server — so if something went wrong (network hiccup, hidden precondition like Stripe not connected), the change looked saved but wasn't. They now show a spinner while saving, confirm only on success, and surface a clear error if the save fails. Thanks to Kim, Nicola, and Marcin for the reports that led us to hunt these down.

  89. See exactly what your clients receive

    New Settings → Clients → Emails tab. Preview all 7 client-facing emails — booking confirmation, reminder, payment request, cancellation, reschedule, aftercare guide, and invoice — with your own business name, phone, and email footer. The invoice preview even includes a downloadable sample PDF so you can see the exact attachment clients get. Thanks to Kim, Nicola, and Marcin for asking "what does the client actually see?" — this one's for you.

    See it →
  90. Warning when mobile clients enter only a postcode

    If a client books a home visit and types just a postcode (or something clearly incomplete) in the address field, we now show a friendly prompt asking for a house number and street before they can continue. Helps avoid last-minute "where exactly am I going?" messages. Thanks to Marcin for suggesting this!

  91. Try a test booking (no payments, no emails)

    New "Preview booking page" link from Getting Started and the dashboard. Bookings made in preview mode are clearly marked TEST on your calendar — no card charges, no emails to real clients, no effect on income reports or membership credits. One click clears them all when you're done.

    See it →
  92. Customise your calendar colours

    Every item in the calendar legend — outside hours, buffers, Google Calendar, Fresha, blocked time, and more — can now be given any colour you like. Just click a legend item to open a colour picker, and your choice is saved automatically. The same goes for the availability grid: click Available, Unavailable, or Booked in the legend to change those colours too.

    See it →
  93. Loyalty milestones — now editable, recurring, and with fixed £ rewards

    Loyalty milestones got a significant upgrade. You can now edit existing milestones (not just delete and recreate them), set a fixed pound amount reward in addition to percentage discounts, and mark milestones as recurring so clients keep earning the reward every time they hit the threshold — not just the first time. Client label discounts (VIP, Staff, Friend) also now apply correctly at booking checkout.

  94. Hold and drag to create appointments in the calendar

    You can now hold for 500ms on any empty slot in your calendar to start creating an appointment — then drag down to set the duration before releasing. No need to tap a specific button first. Swipe-to-scroll still works as normal; the hold distinguishes intent.

  95. New: 15-minute booking slot intervals

    Your booking slots can now be generated every 15 minutes instead of the default 30 or 60. Go to Settings → Availability to set your preferred interval. Useful if you offer short treatments or want finer control over when clients can book.

  96. Fixed-price discount packages locked to a specific service

    You can now create treatment packages with a fixed pound discount tied to a specific service and duration — for example, "5 × 60-minute Swedish massage for £250 instead of £275". The package is only usable for that exact treatment, making it clear to clients exactly what they're buying.

  97. Fix: fixed-price packages were showing £0 on all screens

    Treatment packages using a fixed pound discount were showing a £0 price on the public profile, booking page, and client portal purchase screens. The correct discounted price now shows everywhere.

  98. Booking application mode — approve clients before confirming

    Enable application mode in Settings → Booking to turn new bookings into requests rather than instant confirmations. Clients go through the same booking flow and their card is saved, but no charge is taken until you approve. You'll receive an alert with their details and can approve or decline from your calendar — with an optional reason or alternative time if you decline. Trusted regulars can be set to skip the queue and book automatically as before.

    See it →
  99. Edit this week's availability right from the calendar

    Tap the new "Availability" button on the Calendar page to open a week-by-week slot editor. Tap or drag to open and close time slots for any specific week — without changing your standard recurring hours. Use the ← Prev / Next › buttons to move between weeks. Great for adjusting one week without touching your usual schedule. Thanks to Marcin for the idea!

  100. Service areas — define exactly where you travel

    Draw your travel coverage by selecting UK postcode districts on a map. Create multiple named areas, assign each one to specific days of the week, and add date overrides for match days, strikes, or anything else. When a client tries to book a mobile appointment outside your active area, they're blocked automatically — no more manual checking. Set up yours in Settings → Service Areas. Thanks to Marcin for the idea!

    See it →
  101. Help panels on every dashboard page

    Every page in your dashboard now has a collapsible "How it works" panel at the bottom. Tap it to see what the page does, what the key actions are, and tips for getting the most out of it — without leaving the page. Great if you're exploring a feature for the first time or want a quick reminder of how something works.

  102. Custom tags for clients

    Add your own free-text tags to any client — "Corporate", "CNHC member", "Referred by Kim", whatever works for you. Tags appear on the client list and detail view, and you can filter your client list by tag to find exactly who you're looking for.

  103. Fix: rescheduling an appointment now updates your Google Calendar

    When you rescheduled an appointment — either by dragging it in the calendar or editing the time — the change was saved in MassageHub but your Google Calendar event stayed at the old time. It now updates automatically to match.

  104. Fix: multiple availability windows now work correctly

    When you added more than one extra availability window for the same day — for example 10:00–12:00 and 13:30–19:30 — only the first window was being used for bookings. All other windows were stored but silently ignored. Both windows now show on your calendar and produce bookable slots for clients. Thanks to Kim for reporting this!

    See it →
  105. Fix: voice dictation in SOAP notes is more reliable

    Dictating SOAP notes would sometimes duplicate or wipe text when you paused, edited manually, or spoke quickly. The dictation engine has been rebuilt so finalised speech is only ever appended to what's already there — pausing, editing mid-session, and typing punctuation all work cleanly. A live preview now appears below the text box while the recognition is still processing a phrase.

  106. Fix: service descriptions now show on your public profile

    Service descriptions were only showing on the booking page — they were missing from your public profile page and package/membership purchase pages. That's now fixed, so clients can read what each treatment involves wherever they browse your profile. Thanks to Leanne for spotting this!

  107. Add directions and access instructions to booking confirmations

    You can now add location-specific instructions to each of your locations — things like how to find the entrance, buzzer codes, parking tips, or what clients need to bring for a mobile visit. These appear automatically in the client's booking confirmation email. Edit any location in Settings → Locations to add yours. Thanks to Leanne for suggesting this!

    See it →
  108. Share a direct link for clients to buy a package or membership

    You can now copy a direct purchase link for any package or membership plan and send it straight to a client — via WhatsApp, email, or wherever suits you. The client lands on a clean checkout page, enters their name and email, and pays by card without needing to log in. Find the "Copy link" button next to each package and plan in Settings → Payments. Thanks to Kim for suggesting this!

    See it →
  109. Referral rewards — reward clients who bring in new business

    You can now set up automatic rewards for clients who successfully refer someone — and optionally give the same reward to the new client too. Go to Settings → Referrals to enable: choose a fixed amount or percentage off, set when the referrer's credit triggers, and toggle "Also reward the referred client" so they get a discount code on their very first booking. Clients see their rewards in the portal and can apply them at checkout.

    See it →
  110. Important: add hello@massagehub.app to your contacts

    Apple iCloud and @me.com email addresses are currently rejecting our emails, which means some of your clients may not be receiving their booking confirmations and reminders. Until Apple resolves this, we recommend asking clients with iCloud or @me.com addresses to add hello@massagehub.app to their contacts — this helps ensure delivery.

  111. Returning clients are recognised at booking

    Your booking page now asks clients for their email first. If we recognise them, a sign-in link is sent to their inbox — when they click it, their name, phone, and address are pre-filled automatically. New clients are guided through a quick phone-number check before proceeding. No extra setup needed on your end.

  112. Video tutorials on every page

    Every page in your dashboard now has a short how-to video — look for the "Watch how-to" button near the top of each page. The videos cover the basics of how each feature works so you can get up to speed quickly without leaving the app.

  113. Membership credits: rollover, cancel button, and booking prompt

    Membership credits now roll over properly — unused sessions carry forward into the next billing period in the order they were earned, so older credits are always used first. Discount-mode plans now set the price automatically so clients can't enter the wrong amount. There's also a cancel membership button in the client portal, and when a client with unused credits books an appointment, they're prompted to use them.

    See it →
  114. Fix: membership charges and initial credits now correct

    Two membership billing issues have been fixed: the monthly charge for some plans was being calculated incorrectly, and clients who signed up weren't always receiving their first month's credits straight away. Both are now resolved.

    See it →
  115. Packages and memberships visible immediately after purchase

    When a new client buys a treatment package or membership online — before they've ever logged into the portal — their account is now created automatically. They can log in straight away and see their credits, without needing to be invited separately.

    See it →
  116. Fix: intake form now sent for all bookings

    When you book an appointment on behalf of a client and choose to notify them, the confirmation email now includes the intake form link — the same as when a client books themselves. You can also resend the intake form at any time from the appointment detail panel on the calendar. Thanks to Emily for reporting this!

    See it →
  117. Charge a client's saved card for a package in person

    When a client is with you and has a saved card on file, you can now charge them for a treatment package instantly — no need to send them to the portal. Go to the client's detail page, scroll to Treatment packages, and click Charge card.

    See it →
  118. Fix: extra availability now overrides time blocks

    When you add extra availability for a day that has a manual time block, the availability now takes priority — slots will be bookable and the calendar shows the window as open (white with the orange bar), not covered by the block. Thanks to Kim for reporting this one!

    See it →
  119. Service categories and improved sign-in page

    You can now tag services with a category (e.g. "Individual" or "Corporate") so they appear in separate sections on your profile and booking pages — making it easier for different types of clients to find what's relevant to them. The sign-in page has also been tidied up so first-time clients are more clearly guided to book.

    See it →
  120. Discount codes: edit and organised sections

    You can now edit any discount code directly from the list. Codes are also grouped into Event, 1-off, and Multi-use sections so it's easier to see what you have at a glance.

    See it →
  121. Clients can now reschedule their own appointments

    Clients can reschedule upcoming appointments directly from their portal — no need to message you. When you reschedule via the dashboard, you can now send a confirmation email that shows both the old and new time.

    See it →
  122. Fix: extra availability now works inside blocked ranges

    If you use date-range blocks to mark days as unavailable and then add extra availability on individual dates within that range, those dates now correctly open up for bookings — both on the client booking page and on your calendar. Previously, the range block was winning and your extra availability was being ignored. Thanks to Kim for reporting this!

    See it →
  123. Book back-to-back treatments from your calendar

    When creating a new appointment from the dashboard calendar, you can now chain multiple treatments together — just like your clients can at checkout. The rest break is inserted automatically and your back-to-back discount is calculated and distributed across the bookings.

    See it →
  124. Discount performance reporting

    The income dashboard now includes a Discount performance section showing how your discounts are performing. See green booking counts and discount given, back-to-back group stats, treatment package redemption rates, membership activity, and gift card balances — all for your selected period.

    See it →
  125. Video guides for every feature

    Step-by-step video walkthroughs are now available for every part of MassageHub — from getting started and managing your calendar to setting up intake forms and using the client portal. Find them all under the new Guides tab in your dashboard.

    See it →
  126. Fix: specific slots now match calendar availability

    When using Specific Slots to set non-standard hours — like adding evening slots on top of your usual working hours — those extra slots now show correctly in your calendar and are offered to clients at booking. Previously, only the first time block per day was being used, so any additional windows were silently ignored. Thanks to Kim for reporting this!

    See it →
  127. Push notifications for new bookings and cancellations

    Get an instant notification the moment a client books or cancels — even when MassageHub isn't open. On desktop, notifications appear in your system tray. On Android, they appear like any app notification. On iPhone, add MassageHub to your home screen (Safari → Share → Add to Home Screen) then tap Enable when prompted.

    See it →
  128. Pop-up events & taster sessions

    Run chair massage taster sessions, open days, and corporate wellness events with a public QR-code registration page. Clients pre-book a slot or join a walk-in queue — you manage everything live from your phone: intake screening, queue progression, and post-event discount vouchers for opted-in attendees. No competitor offers this.

    See it →
  129. Fix: booking confirmation links now work correctly

    When a client clicked the link in their confirmation email to view or manage their booking, they were sometimes seeing a 404 error. This has now been fixed — the link will take them straight to their booking details. Thanks to Kim for reporting this!

  130. Fresha reviews on your profile + smarter Google routing

    You can now sync your Fresha reviews to display on your booking page and profile — star rating, review count, and individual review cards, just like Google. Review requests are also smarter now: once a client has already left a Google review, future requests send them to the in-app form instead, so you can build reviews after every appointment. Find everything in Settings → Reviews.

    See it →
  131. Archive services instead of deleting them

    You can now archive a service instead of deleting it. Archived services are hidden from your booking page and service list, but you can restore them at any time. Useful if you stop offering a treatment for a while but want to keep all the details. Head to Services, click Archive next to any service, then scroll to the bottom to see and restore archived ones. Thanks to Kim for suggesting this!

    See it →
  132. Fix: custom prices now show correctly in confirmation emails

    When you manually book an appointment and change the price, the confirmation email sent to the client now shows the adjusted price — not the original service price. Thanks to Kim for spotting this one!

  133. Download invoices for client health insurance claims

    Open any appointment and tap "Download invoice" to get a clean, printable invoice — showing your business details, treatment, date, price, and payment method. Clients can save it as a PDF and submit it to their health insurer for reimbursement. You can also email it straight to the client when marking an appointment complete. Thanks to Yeny for suggesting this one!

    See it →
  134. Add a booking button or form to your own website

    You can now embed your MassageHub booking page directly on your website — either as a "Book Now" button, or as a full inline booking form. Find the ready-to-paste HTML snippets in Settings → Integrations → Add to your website. Works with Squarespace, Wix, WordPress, and any site that supports HTML. Thanks to Yeny for the idea!

    See it →
  135. On-the-hour booking slots

    You can now choose how often booking slots are offered for each location — every 30 minutes (the default) or on the hour only (9:00, 10:00, 11:00…). Find it on the Availability page, above your weekly hours. Thanks to Kim for suggesting this one!

    See it →
  136. Health & wellbeing limits

    Set daily and weekly hands-on hour limits, cap the number of appointments per day, limit consecutive working days, add a rest break between sessions, and set a minimum booking notice period. MassageHub automatically hides slots that would take you over your limits — clients just see the day as fully booked. Your dashboard now includes a wellbeing card showing your workload at a glance.

    See it →
  137. Incomplete profiles no longer receive policy emails

    Therapists who haven't completed their profile will no longer receive emails saying their account has failed our policy review or doesn't meet platform terms. Incomplete profiles are simply shown to the public as "awaiting details" until setup is finished.

  138. Delete completed, cancelled, or no-show bookings

    You can now delete old or test bookings from your appointment panel — useful for cleaning up any test appointments you made while getting started. Open any completed, cancelled, or no-show appointment and scroll to the bottom — you'll find a "Delete booking" option with a confirmation step.

  139. Bug fix: booking times and calendar display now correct after clocks went forward

    Two issues affecting UK therapists after the clocks changed to BST have been fixed: slots were occasionally showing or booking at the wrong time, and adding extra availability outside regular hours caused the whole day to appear highlighted on the calendar. Thanks to Kim for reporting both of these.

  140. Add Google Analytics, Google Ads & Meta Pixel tracking to your booking page

    You can now connect your own Google Analytics, Google Ads conversion tracking, and Meta Pixel to your booking page and profile. Go to Settings → Analytics to add your IDs — bookings automatically fire conversion events so you can measure ad performance.

    See it →
  141. Add your business or brand name to your profile

    You can now add a business or brand name (e.g. "Serene Touch Massage") in Settings → Profile. It appears as a subtitle under your name on your public profile — useful if you trade under a name different from your own.

    See it →
  142. Add MassageHub to your home screen

    Your dashboard now works like an app — tap your browser's share or menu button and choose "Add to Home Screen" to access MassageHub instantly from your phone without opening a browser.

  143. Gift cards

    Sell gift cards directly from your booking page. Anyone can buy a treatment as a gift — they pay online, receive a unique code by email, and redeem it at checkout. You can also issue gift cards manually for cash sales. Manage everything from Settings → Payments.

    See it →
  144. Trusted Therapists is here

    You can now apply to join Trusted Therapists — a network of recommended therapists your clients can turn to when you're unavailable. Apply from Settings → Trusted Therapists. Your listing is reviewed before going live, and you stay in full control of what your clients can see.

    See it →
  145. Send payment requests for appointments you book

    When you book an appointment from your calendar, you can now send the client a secure Stripe Checkout link to pay a deposit or the full amount upfront — even if they don't have a saved card. Payment is confirmed automatically and their card is saved for future charges.

    See it →
  146. Direct booking links per service

    Each service now has a dedicated booking link you can share with clients. Click "Copy link" in the Services dashboard and the URL opens your booking page with that service pre-selected — ideal for sending in messages or adding to your website.

  147. AI-powered help centre search

    The help centre now has a search bar — type a question in plain English and Claude answers from the full knowledge base, linking to the most relevant articles. If the answer misses the mark, one tap submits your question as a feature request.

    See it →
  148. Discount codes

    Create promo codes for new clients, seasonal offers, or loyalty rewards. Set percentage or fixed-amount discounts, usage limits, and expiry dates. Clients enter the code at checkout and the saving is applied instantly.

    See it →
  149. Tap-to-call and WhatsApp in emails and dashboard

    Client phone numbers in your booking alert emails are now tappable — one tap to call or open a WhatsApp chat, no copy-pasting needed. Your number also appears as a tappable link in client confirmation and reminder emails.

  150. Membership minimum commitment period

    Set a minimum number of months before clients can cancel a membership plan — useful for promotional prices or discounted rates. The earliest cancellation date is shown clearly in the client portal before they subscribe.

  151. Discount-based pricing for memberships and packages

    Memberships and treatment packages now support a discount mode — set a percentage off and clients choose their service when subscribing or purchasing. The price is locked at that point and the saving is shown clearly throughout the booking flow.

  152. Buffer times visible on your calendar

    Travel and preparation buffers around imported calendar events (Google, iCal, Fresha) now appear as hatched strips on your therapist calendar, so you can see at a glance exactly why a slot is blocked. Toggle them with the Show buffers switch.

  153. Custom service durations

    Service duration is now a free-entry field — type any length from 5 to 480 minutes, or use the quick-pick buttons for common durations. Times over an hour display as hours and minutes for clarity.

  154. Create and edit appointments from your calendar

    Tap any empty slot on your calendar to open a new appointment form — set the client, service, and notes without leaving the calendar view. Existing appointments can be edited in place, and you can add time blocks to mark yourself as unavailable.

  155. Contact details on your public profile

    Add a phone number, email address, and website to your public profile — they appear as clickable links so clients can reach you directly from your booking page.

  156. Control what clients see on your profile

    Choose whether to show your services, prices, or both on your public profile, and drag sections into your preferred order. Useful if you prefer to discuss pricing in person or want to lead with certain information.

  157. Mobile-first redesign

    The app has been fully redesigned for mobile — your calendar and client list are always one tap away, forms stack cleanly on small screens, and the calendar now fills the full viewport so you can see your week at a glance.

  158. Client replies come straight to you

    Turn on "Reply to my email" in Settings → Account and any client who replies to a booking confirmation or reminder will reach you directly — no more replies disappearing into the void.

  159. Reviews — in-app and Google

    MassageHub automatically asks clients for a review after each appointment. Reviews show on your public profile, and if you have a Google Business page, clients are directed there instead — boosting your online presence.

    See it →
  160. Apple Pay and Google Pay at booking

    Clients can now pay deposits and full session fees with a single Face ID or fingerprint tap — no card details needed. This significantly reduces drop-off at the payment step.

  161. Price adjustments before charging

    Before charging an appointment you can add a surcharge or apply a discount — with an optional note explaining why. The charge confirmation shows a clean Service / Adjustment / Total breakdown.

  162. Issue refunds from your dashboard

    You can now issue a full or partial refund from the appointment panel without needing to log in to Stripe. The appointment shows an amber "Refunded £X" badge so your records stay accurate.

  163. Booking deposits

    Collect a deposit at the time of booking — as a fixed amount or a percentage of the service price. The remainder is charged after the session, and you can choose to keep the deposit only if the client cancels.

    See it →
  164. Recurring appointments

    Mark any appointment as recurring (weekly or fortnightly) and 16 weeks of sessions are created automatically — so your regular clients are always in your diary without manual work each time.

  165. Grant treatment packages offline

    You can now grant a treatment package to a client without Stripe — useful for cash or bank transfer sales. A single button on the client page sets it up and credits are tracked the same way as online purchases.

    See it →
  166. Add-on services at booking

    Create add-on extras (hot stones, aromatherapy, theragun) that clients can select during booking. Add-ons with a duration automatically extend the slot; zero-duration add-ons (like a specific oil) just update the price.

  167. Notification preferences

    Choose exactly which alerts you receive by email and SMS — new bookings, cancellations, package purchases, and membership sign-ups. Set a private mobile number that is never shown on your public profile.

  168. Personal note in client emails

    Add a short personal message that appears at the bottom of every booking confirmation and reminder email — a great place to share parking details, what to wear, or anything else clients need to know.

  169. Social media links on your profile

    Add your Instagram, Facebook, TikTok, and LinkedIn profiles to your public page. Clients see your social links with recognisable brand icons so they can follow your work.

  170. Weekly calendar view for mobile clients

    On mobile, the booking date picker now shows a compact weekly chip view so clients can swipe through days quickly. The monthly grid is still available on desktop and can be set as the default in your profile settings.

  171. Back-to-back (multi-service) bookings

    Clients can combine two or more treatments into a single session — for example, a deep tissue massage followed by a reflexology session. You can set an optional multi-treatment discount and a rest break between services.

    See it →
  172. Travel area management

    Set a maximum travel distance for mobile bookings, a borderline zone where clients submit an inquiry first, and a hard cutoff for out-of-range requests. Per-client agreements let you approve travel with a surcharge, minimum duration, or package requirement.

    See it →
  173. Client referral tracking

    Each client gets a unique referral link they can share. When a referred friend books a confirmed appointment, the referral is tracked through invited → booked → completed status so you always know who brought who.

  174. Holiday and date range blocks

    Block a full holiday week with a single entry instead of overriding each day individually. The date override tab now supports ranges (e.g. Mon 14 Apr – Fri 18 Apr), and they show as a block on your calendar.

  175. Google Calendar: bookings written automatically

    Connect your Google Calendar and every new booking — whether you create it or a client books online — is added as an event automatically. Cancellations remove it. Your calendar stays up to date without any copy-paste.

    See it →
  176. Green booking incentives

    Offer a discount to clients who book on a day you are already travelling to their area, reducing your travel time and fuel costs. Eligible slots are highlighted in green on the booking calendar with your custom label.

    See it →
  177. Automatic travel time between appointments

    MassageHub calculates real driving time between your appointments using Google Maps and automatically blocks the right amount of travel time — so you are never double-booked because you underestimated a journey.

    See it →
  178. Client address captured at mobile booking

    For mobile appointments, clients enter their full address during booking — so it appears on your calendar event, in the confirmation email, and in the appointment panel without you having to ask for it separately.

  179. Link an existing Stripe account

    If you already have a Stripe account (for example from another business), you can now link it to MassageHub via OAuth instead of creating a new one — keeping your payout history and Faster Payouts status intact.

    See it →
  180. Invite clients to the booking portal

    Send existing clients a personalised invite link so they can log in, view their appointment history, manage memberships, and book again — all from their own portal without needing to call or message you.

    See it →
  181. Auto-save on SOAP notes and profile

    Your SOAP notes and profile settings now save automatically as you type — no more losing work because you forgot to hit Save. A subtle "Saved" indicator confirms everything is written.

    See it →
  182. Monthly membership plans

    Create subscription plans with a set number of treatments per month, billed automatically via Stripe. Clients subscribe through their portal or you can enrol them manually — great for building a reliable monthly income.

    See it →
  183. Treatment packages

    Sell bundles of sessions upfront — at a fixed price or with a percentage discount. Clients buy through the portal and credits are tracked automatically, redeemed at booking with one click.

    See it →
  184. Calendar sync (Google, iCloud, Fresha)

    Connect your Google Calendar, iCloud, or Fresha calendar so existing commitments automatically block out your availability — clients can only see and book genuinely free slots.

    See it →
  185. Getting Started guide

    A step-by-step onboarding checklist walks you through setting up your profile, adding a location, creating services, and going live — so you can accept your first booking as quickly as possible.

  186. Cancellation emails to clients

    When you cancel an appointment you can choose to notify the client by email with a single checkbox — keeping your communication professional without leaving MassageHub.

  187. Income dashboard

    See your total revenue, month-by-month breakdown, and per-service earnings at a glance. The income dashboard helps you understand which services drive your business.

    See it →
  188. Client portal

    Clients get their own private area at massagehub.app/[your-slug]/my where they can view upcoming appointments, download receipts, manage memberships, and book their next session.

    See it →
  189. Intake forms

    Build a custom health consultation form and it is automatically sent to new clients when they book. Responses are stored against the client record — no chasing for paperwork before appointments.

    See it →
  190. SOAP notes with AI assist

    Write structured clinical notes for every appointment using a customisable template. Hit the AI button and Claude drafts the note from your template — you review and save. Notes are stored securely against each appointment.

    See it →
  191. Payments and no-show protection

    Charge clients at the time of booking or after the session — you choose. Stripe handles the payment securely and funds land in your bank account. Save card details upfront so late cancellations never go unpaid.

    See it →
  192. Clinic, mobile, and multi-location

    Add as many practice locations as you need — a clinic, mobile visits, a gym — each with their own availability and services. Travel time between locations is handled automatically.

    See it →
  193. Client records

    A full client database with contact details, appointment history, intake responses, SOAP notes, and payment records — everything about each client in one place.

    See it →
  194. Online booking page

    Your own booking page at massagehub.app/[your-slug] lets clients choose a service, pick a time, and confirm — 24/7, without any back-and-forth. Share the link anywhere.

    See it →
  195. Declined card? We send your client a secure link to fix it — automatically

    When an off-session charge declines (late-cancel fee, no-show fee, appointment balance, package purchase, membership renewal), the client now gets an email straight away with a hosted link to update their card. Stripe handles the card details; we handle the retry schedule — <strong>T+0</strong> the moment they update, then <strong>+24h</strong> and <strong>+72h</strong> before we stop trying. Gentle reminders fire at 24h and 72h if they haven't acted, and a final "we've stopped" email goes out after a week. Everything lands in <a href="/dashboard/settings/payments/outstanding-charges">Settings → Payments → Outstanding charges</a>, where you can resend the link, mark a charge as paid in cash, or close it off manually. An amber card on your dashboard surfaces the count whenever there's something to review.

    See it →