Protected case study

BeeHealthy booking: one flow, many brands

Designing patient booking for a white label health platform: one flow on iOS and Android that adapts to each healthcare provider’s brand, systems and rules.

Role
Senior product designer, booking lead
Timeline
Ongoing
Status
Live on iOS and Android, in continuous development

The full case covers confidential client work. Enter the password you received to view it.

← Back to all work

Mobile app • iOS & Android • Product design • White label

BeeHealthy booking: one flow, many brands

Role

Senior product designer, booking lead

Team

Booking PM, iOS and Android developers

Timeline

Ongoing

Status

Live on iOS and Android, in continuous development

Designing patient booking for a white label health platform: one flow on iOS and Android that adapts to each healthcare provider’s brand, systems and rules.

The context

BeeHealthy is a white label health platform. Healthcare providers launch it as their own branded app on iOS and Android, and booking is one of the main reasons patients open it.

Every customer brings something different: their own brand, their own patient record system, their own booking rules. A private clinic chain, a public health centre and a physiotherapy practice all want the same thing from the patient’s side, a quick way to find a time and book it, but the way they get there is never the same.

My role

I design the patient-facing booking experience on iOS and Android. Most of the work isn’t one big project. It comes in as a steady stream of customer needs, support issues and new appointment types. My job is to fit each one into the product without breaking what already works.

One flow, configured, not forked

With many customers on one product, the easy answer to every request is a new screen. Do that often enough and you end up maintaining many apps instead of one. So I held every new need to the same question: can this be a configuration of the core flow instead of a new flow?

The core flow stays simple: search, see the soonest times, pick a date and time, confirm. Everything else on this page builds on it.

Booking home, results, date picker and time picker

Search by professional or specialty, see who’s available soonest, then pick a date.

Time selected, booking summary and confirmation

Pick a time, review the booking, confirm. The same steps every customer’s patients see.

Different customers, same search

Customers structure their services in different ways. Some describe care by specialty and professional, straight from their patient record system. Public sector customers group services into categories, like a child health clinic.

Instead of two search experiences, I designed one three-level search: who or what, then the service, then the place. The layout and behaviour stay the same, and each customer’s data fills the levels.

Two three-level search set-ups and filled results

Two set-ups, one layout. Filling all three levels narrows results to the right service and place.

Booking tickets: guided booking

Some care has to be booked within limits: a follow-up within four weeks, with a specific professional, at a specific clinic. Clinics send patients a booking ticket that sets those limits.

The ticket reuses the normal booking flow. Fields the ticket sets are locked, and the app says why, so patients aren’t left wondering why they can’t change the search. Only times inside the booking window show up. Clinical back-end fields stay hidden.

Booking ticket from Home to locked search and times

From the ticket on Home to a time inside the booking window, through the same flow as any booking.

Booking for a guest

One of our key customers needed patients to book care for someone who isn’t in the app yet, like a relative or a child. The guest has no account, so the app has to identify them before anything can be booked.

The user starts with the guest’s ID number or passport and contact details. We verify them, look for a matching profile and add the guest to the user’s family profiles. From there, it’s the normal booking flow.

Book for a guest, check the details, confirm the match, guest profile created

Enter the guest’s details, confirm the match, and the guest joins the family profiles.

The hard part was everything in between. The details might match an existing profile, match nothing, already be on the account, or fail validation. Each outcome got its own screen with one clear next step.

And when the profile can’t be created because of a technical problem, booking still works. The user continues in a guest booking flow, a banner on every step shows who the appointment is for, and the confirmation goes by email.

Profile creation fails, guest booking with a banner, review, and details that can’t be validated

When things go wrong, booking still works, and every error has one clear next step.

Series and group sessions

New appointment types came in from customers: therapy that runs as a weekly series, and classes where several patients attend together. Both reuse the same select-time and confirm steps. What changes is what the patient needs to know first.

Series. The patient picks when the series starts, not every session. The booking keeps the first session in focus, with the rest one tap away.

Series appointment from result to all sessions

A series is booked as one decision: choose the start date, confirm, see every session.

Group sessions. The first question is “will I be with others?”, so the group label and places left are on the result card and on every time.

Group session with places left and booking summary

Booking talks to each customer’s own patient record system, so things can go wrong in ways the app doesn’t control. Someone else takes the time while the patient is choosing, or the record system doesn’t answer.

Every error says what happened and gives one clear next step. A taken time sends the patient back to the times with a note explaining why. A failed booking says plainly that nothing was booked, with customer service as the fallback.

Confirming, time taken, back to times and booking failed

Confirming, time taken, back to times, booking failed.

Also in the flow

Smaller pieces built on the same patterns:

  • Cancel and reschedule from the appointment details, with the old and new time side by side.

  • Book again from an archived appointment, straight to times with the same professional.

  • Browse as a guest and sign up only at the point of booking, with the chosen time kept.

Confirm cancel, confirm new time, book again, booking as a guest

Confirm cancel, confirm a new time, book again, book as a guest.

The outcome

This is the booking flow patients use every day, across every brand the platform runs under.

  • Around 5,000 bookings a day go through it.

  • It’s widely used for booking in Finnish public healthcare.

  • It powers healthcare providers globally as part of BeeHealthy’s white label platform.

It scales because new customer needs are added as extensions of one flow, not as new screens. Each new provider gets the same booking experience, under its own brand.

What I learned

In a white label product, the best design work is often invisible. The question isn’t how a screen looks for one customer, but whether the pattern still holds when the next customer, brand or rule arrives.