← Back to case studies
  • Healthcare
  • Mobile and web
  • Design system

Parlo · case study

The right doctor, in your language, at the earliest real slot.

Doctor booking for Germany, built around language: find a doctor who speaks yours and takes your insurance, at the earliest real slot. In 2019 I led design of a booking marketplace; in 2026 I rebuilt it for Germany as a working prototype for patients, doctors and practices, with AI.

Role
Lead Product Designer
Timeline
2019 · reimagined 2026
Company
Doctor-booking platform
Location
Berlin, Germany
Team
2019: lead designer of the marketplace. 2026: concept, flows, design system and prototype, solo with AI

Deliverables

  • Research
  • User flows
  • Three-role prototype
  • Design system
Parlo home: Good morning, Anna, Find a doctor, search, popular specialties
Search, in your language
GPs near Kreuzberg: each card shows the doctor, the languages Anna speaks and the earliest bookable times
Earliest real slot first
A push and a card offering an earlier slot: Tomorrow 09:00, 29:59 left to take it
A freed slot, offered
roles on one schedule: patient, doctor, practice
3
spoken languages to search by, never flags
10
to take a cancelled slot from the waitlist
1 tap
phone calls to refill a cancelled appointment
0

Overview

Finding a free slot is solved. Finding a doctor who understands you isn't.

Booking a doctor online is normal in Germany: insurance filters, reminders and waitlists are table stakes. For the many people who moved to Berlin, the hard part is different. A visit only helps if the doctor can explain things in a language you understand, and that is the one thing the usual booking flow treats as a footnote.

In 2019 I was the lead designer of a doctor-booking marketplace that put patients, doctors and clinics on one platform. We interviewed patients and clinic staff and tested the booking flow with them. What held up became the core of this project: bookable times right in the search results, separate ratings for the doctor and the practice, one calendar for the whole practice.

In 2026 I took those ideas to Germany and rebuilt everything: brand, flows, interface and design system. With AI as my build partner, it became a working prototype where three roles share one schedule, and every change is true for all of them at once.

Who it is for

  • Anna, 32

    Moved to Berlin two years ago. Public insurance. English and Russian, basic German. Books for herself and her daughter Mia.

    A GP who speaks English, near Kreuzberg, this week.

  • Omar, 41

    Engineer, public insurance, English and Arabic. Booked a specialist three weeks out.

    Any earlier slot, without calling the practice every morning.

  • Sabine, practice manager

    Runs reception for three doctors. Lives in the calendar and on the phone.

    Fewer calls, no empty chairs after cancellations, a day that tells her what to do.

  • Dr. Emre Aydın, GP

    Speaks German, Turkish and English. Sees 15 to 20 patients a day.

    Who is next, why, and in which language, before the door opens.

Research

Booking was solved. Language and lost slots weren't.

I started from what our 2019 research had shown and checked it against the German setting: two insurance systems, referrals, strict health-data rules and a large international population. The gaps were not in the booking form. They were before it and after it.

  1. 01Language decides whether a visit helpsPatients pick a doctor they can talk to, but languages sit deep in a profile, if anywhere.
  2. 02Insurance and referrals confuse newcomersPublic or private, which specialist needs a referral: questions people ask at the wrong moment.
  3. 03The earliest slot hides behind profilesLists rank by rating or distance; the time you can actually go takes three taps and a call.
  4. 04Cancelled slots stay emptySomeone cancels at 8 pm, someone else waits three weeks for the same doctor. Nobody connects the two.
  5. 05Reception lives on the phoneBookings, moves and cancellations arrive by phone, and the calendar shows status, not what to do.
  6. 06Doctors meet patients coldThe first time a doctor learns the reason for a visit, or that the patient prefers English, is in the room.

Pains, by role

Patients

  • •Hard to find a doctor who speaks my language and takes my insurance
  • •The earliest slot is buried
  • •A freed slot somewhere is invisible to me

Practices

  • •Phones ring all day
  • •Cancellations leave empty chairs
  • •No-shows and late patients break the day

Doctors

  • •Little context about the next patient
  • •Schedule changes ripple through the day

Define

Goals

Patients

  • •Find a doctor who speaks my language and takes my insurance in under a minute
  • •Get the earliest real slot, and an earlier one if it frees up

Practices

  • •Fewer calls for booking and moving appointments
  • •Refill cancelled slots
  • •Fewer no-shows

Doctors

  • •Know who is next and why, at a glance

Principles

  1. 01

    Earliest real slot first

    Time beats ratings in a results list. The card books in one tap.

  2. 02

    Language is visible everywhere

    As words and codes, never flags: flags are countries, not languages.

  3. 03

    Tell staff what to do now

    The practice day starts with “Needs attention”, not a grid of links.

  4. 04

    One schedule, three views

    A change is instantly true for the patient, the doctor and reception.

  5. 05

    Consent is explicit and reversible

    Patients see which practices have their data and can withdraw it.

I mapped one cancellation across all three roles first.

The scenario that proves the product: Anna cancels, Omar on the waitlist gets the slot, reception never picks up the phone, the doctor sees Omar's brief, and the practice counts one more slot saved. Every screen in the prototype serves a step in it.

Miro · hero scenario across roles
Flow: patient A cancels Thursday 9:00; the platform frees the slot and updates the calendar for everyone; if anyone is on the waitlist the slot is offered to the first match on doctor, insurance and language; patient B gets a push with 30 minutes to take it; if not accepted it goes to the next person, otherwise patient B is booked in one tap and the old slot is released. Reception sees Filled from waitlist with no phone call; the doctor sees the new patient in My day with a brief; after the visit patient B reviews “Spoke my language”; insights count one more empty slot filled. If nobody is waiting, the slot goes back to public search.
A cancellation travels from one patient to another, to reception, to the doctor and back into the practice's numbers. Scroll sideways, or open it full size.

Key decisions

Six decisions that carry the product.

  1. Results with three bookable times per doctor, the earliest in coral

    01

    The card leads with the earliest slot

    Three bookable times sit on every result. The first one is coral: the one colour that means “soonest”.

  2. Filters: insurance, doctor speaks, earliest appointment, distance, visit

    02

    Language is a saved filter, shown as words

    Anna sets English and Russian once. Every card says which of them the doctor speaks.

  3. Booking step with a menu: Anna Petrova (you), Mia Petrova (child, 6 years)

    03

    Book for anyone in the family

    A pull-down instead of tabs: it works for one child or five relatives, each with their own insurance.

  4. Share your details with the practice: what is shared, a checkbox, GDPR note

    04

    Consent before the first visit, reversible

    A new practice sees nothing until the patient agrees, and the list of what is shared is right there.

  5. Earlier slot offer with a countdown and Take Tomorrow 09:00

    05

    A freed slot is offered, not posted

    Matched by doctor, insurance and language, with 30 minutes to take it. No refreshing, no calling.

  6. Appointments: tomorrow 09:00 with Are you coming tomorrow, I'm coming, Cancel

    06

    The day-before check lives in the card

    “Are you coming tomorrow?” sits inside the appointment, with one clear yes and a quiet way out.

Key flows

Four journeys, clicked through end to end.

Patient

Find and book

Search by specialty, symptom or name; results lead with the earliest real slot; booking is three or four short steps, with an account created inside the flow and consent only when a practice is new.

See the user flow
Doctor profile with photo, rating, a day picker and times, languages
Pick any day and time
Booking step 1: who is it for and what kind of visit
Who and what kind
Booked: tomorrow 10:00, add to calendar, directions
Booked, with what's next

Patient

Manage, wait, review

Reschedule or cancel without calling; join the waitlist for an earlier slot; confirm the day before, say you are running late, check in; afterwards rate the doctor and the practice separately, with reasons as chips.

See the user flow
Appointment detail: change time, get an earlier slot, where, reason, cancel
Everything about one visit
Rate your visit: doctor and practice stars, reason chips like Spoke my language
Two ratings, real reasons
Family: Anna and Mia with insurance and languages, Book for Mia
A household, one account

Doctor

My day

The next patient on top with time, languages and reason; a brief before the visit; start, complete, book a follow-up. If the day slips, one tap tells reception and the patients who are waiting.

See the user flow
My day: next patient Ines Vogel with languages and reason, then the timeline
Who is next, and why
Patient brief: Omar Khalil, first visit, filled from waitlist, you both speak English
The brief before the door opens
Schedule: blocked time with 5 patients affected, reception is moving them
Blocking time, safely

Practice

Run the day

Today starts with what needs attention: requests to confirm, doctors who blocked time, late patients. The calendar shows every doctor side by side; phone bookings take three fields; moving patients notifies them in the same step.

See the user flow
Practice Today: Needs attention with four cards, counters, and the day for three doctors
Today: what needs doing now
Calendar with Omar Khalil's 09:00 marked Filled from waitlist
Filled from waitlist, no call
Phone booking panel: existing or new patient, doctor, date, visit type
A phone booking in three fields
Resolve conflict: three patients with new times, Move 3 and notify
Move patients and tell them, at once

Also mapped and built

  • Practice onboarding

    Sign up, verification, services, invite doctors, a checklist until the practice goes live in search.

    See the user flow
  • Patient account

    Insurance, family, languages as a default filter, notifications, privacy with download and delete.

    See the user flow

The practice

The same schedule, seen from reception.

Insights: 7 slots filled from waitlist this week, no-show rate, occupancy, new patients by language, reviews
Insights: refills, no-shows, languages
Doctors and services: languages, visit types, insurance rules, accepts new patients
Doctors, services, languages
Team and roles: what a practice manager, reception and a doctor can do
Roles and permissions
Reviews with reason chips and public replies
Reviews with reasons

Hard states

The screens nobody plans, planned.

No doctor matches all filters, with the nearest fix: show doctors speaking English within 3 km
No match: the nearest fix
Offline: saved appointments shown, booking works again when back online
Offline, still useful
The home screen in German: Guten Morgen, Anna, Arzt finden
German, first-class
Results in German: Hausärzte, Frühester Termin, Spricht Englisch
Long words, no overflow

Design system

One token file drives the app, the web and Storybook.

Brand green for what is yours, selected or navigation; coral, from the dot in the logo, only for “earliest”; everything else stays ink and grey, so colour keeps its meaning. iOS type scale with Inter, Instrument Sans for the wordmark. 35 components and patterns live in Storybook, with the real screens they come from.

  • •Languages as codes and names, never flags
  • •Status is always icon and words, never colour alone
  • •Text tokens for every status colour, so text passes WCAG AA on light and dark
  • •One icon size per role in a row, 44-point touch targets, tabular numbers for times
Parlo logo mark: a green “p” whose counter is a speech bubble, with a coral dot
Parlo app icon: the green mark on white

App icon: the mark on white, so it stays calm among bright health apps and still reads at small sizes.

The Parlo mark: a “p” whose counter is a speech bubble, with a coral dot. Talking is the product.
  • Parlo green#0F6B5C· from the logoBrand, selected, navigation, the home header
  • Coral#E4704F· from the logoThe earliest slot. Nothing else is coral
  • Confirmed#1E7F4BStatus: confirmed, done, all good
  • Waiting#B8740AStatus: pending, running late
  • Offer#2D62B8Waitlist offers and information
Storybook: colour tokens with live WCAG contrast checks
Tokens with live contrast checks
Storybook: the DoctorResultCard pattern with controls
Patterns, with real data
Storybook: the CalendarGrid pattern with every appointment status
The practice calendar, as a pattern
Storybook: AppointmentCard with the day-before check
Every state of a component
Home in the dark theme
Home, dark
Results in the dark theme
Results, dark
Doctor profile in the dark theme
Profile, dark
Appointments in the dark theme
Appointments, dark
Open the design system

Validation

How I checked it.

The prototype is the spec, so I tested the prototype, not the mockups.

  • The hero scenario, end to end

    Clicked across all three roles from a fresh load: cancel, offer, accept, filled from waitlist, brief, visit, review, insights. State is shared, nothing is faked between screens.

  • Every edge case by link

    13 scenarios open straight from a URL: offer, filled, running late, conflict, no match, offline, onboarding, empty. Reviews and demos start from the same state every time.

  • Contrast in light and dark

    Colour tokens are checked against WCAG 2.1 AA in both themes; status colours got separate text tokens where the fill was too light for text.

  • German on every screen

    Every screen checked in German for overflow and truncation. Long compound words and longer labels shaped several layouts.

Outcome

What exists today.

3

roles in one clickable scenario, sharing one schedule

30+

screens on phone and web, in light and dark

35

components and patterns documented in Storybook

13

scenarios reachable by link

2

interface languages: English and German

42

screens shot automatically from the prototype for this case

How we'll know it works

Targets to set with pilot practices for launch, not results.

  • Time from search to a booked appointment

    Earliest slot on the card and booking without a separate sign-up should make this fast

    Target< 2 min

  • Cancelled slots refilled from the waitlist

    Matched offers with a 30-minute window instead of an empty chair

    Target50%

  • Bookings and moves without a phone call

    Phone time is reception's biggest cost

    Target70%

  • No-show rate

    Day-before check, running-late and check-in in the same app

    Target−30%

  • Reviews that mention “Spoke my language”

    The promise of the product, measured in patients' own words

    TargetTracked

Key takeaways

Three things this project taught me.

  1. 01

    Language is a feature, not a filter

    Once language sat on every card, matched to the patient, the rest of the flow could stay ordinary. One attribute, shown everywhere, changed the product.

  2. 02

    Design the handoffs, not the screens

    The hardest part was the space between roles: a cancellation becoming someone else's appointment without anyone calling anyone.

  3. 03

    AI moved the work from pictures to behaviour

    Building with AI let me test timing, shared state and edge cases instead of describing them. The questions changed from “does it look right” to “does it behave right”.

Try it yourself

Switch between patient, doctor and practice in the live prototype, play the waitlist scenario, or read the design system.