Voor onderwijs en nieuwsgierige salonhouders

Hoe de Planobook-boekingsengine werkt

Een klant kiest op de boekingspagina een behandeling en ziet een rijtje vrije tijden. Achter dat rijtje zit een echte planningspuzzel: roosters, pauzes, opruimtijd, gedeelde kamers en klanten die tegelijk klikken. Op deze pagina leggen we uit hoe Planobook die puzzel oplost, en je kunt het zelf proberen.

Portret van Mohamed Tourich

Door · Software EngineerGepubliceerd op

In het kort

De boekingsengine van Planobook toont een klant alleen tijden waarop de gekozen medewerker volgens rooster werkt, geen pauze of andere afspraak heeft en ook de benodigde stoel of behandelkamer vrij is. Bij het opslaan controleert de database nog een keer dat twee afspraken van dezelfde medewerker nooit overlappen, zodat een dubbele boeking niet kan ontstaan. Planobook is Nederlandse salonsoftware uit Rotterdam voor salons met een team en een volle agenda: agenda, online boeken, kassa, klantenbeheer, website, webshop, cadeaubonnen, strippenkaarten, spaarpunten en dagprijzen in één, voor €39,95 per maand inclusief 2 medewerkers, exclusief btw, met 0 % commissie op boekingen.

Het planningsprobleem van een salon

Op het eerste gezicht is een salonagenda een simpel rooster. In de praktijk moet elke vrije tijd die een klant ziet aan een hele reeks voorwaarden tegelijk voldoen. Dit zijn de belangrijkste:

  • Medewerkers met roosters

    Elke medewerker heeft eigen werktijden per weekdag, soms een avond of een vrije woensdag, en daarnaast losse vrije dagen of afwezigheid.

  • Behandelduur en pauzes

    Knippen duurt een halfuur, kleuren anderhalf uur. Een pauze of een vast blok in het rooster mag nooit door een afspraak heen lopen.

  • Opruim- en schoonmaaktijd

    Na een gezichtsbehandeling moet de kamer klaar voor de volgende klant. Die minuten zijn voor de klant onzichtbaar, maar wel bezet.

  • Middelen

    Een behandelkamer, een stoel of een apparaat kan maar één klant tegelijk aan (of een vast aantal). Twee medewerkers die allebei vrij zijn, delen dan toch één kamer.

  • Combinaties en inwerktijd

    Kleuren en knippen achter elkaar, of een kleuring met inwerktijd waarin de kapper ondertussen een andere klant helpt: één boeking, meerdere stukjes bezette tijd.

  • Meerdere vestigingen

    Elke vestiging heeft een eigen agenda, eigen roosters en een eigen boekingspagina. De rekensom gebeurt per vestiging.

  • Tegelijk boeken

    Twee klanten kunnen op hetzelfde moment op dezelfde vrije tijd klikken, terwijl de salon aan de balie ook net iets inplant. Er mag er maar één winnen.

De aanpak in grote lijnen

Planobook rekent vrije tijden niet vooraf voor de hele maand uit, maar op het moment dat iemand kijkt: per dag, per behandeling en per medewerker. Zo klopt het antwoord altijd met de agenda van dat moment. Conceptueel gaat het in vier stappen.

1. Het venster en de bezette blokken

Eerst bepaalt de engine het werkvenster van de medewerker op die dag, uit het weekrooster en eventuele afwijkingen. Binnen dat venster wordt alles wat al vastligt een bezet blok: afspraken (inclusief hun opruimtijd), pauzes, vrije uren en geblokkeerde momenten. Alle tijden worden in de tijdzone van de salon gerekend, zodat ook de wissel naar zomer- of wintertijd klopt.

2. Kandidaat-begintijden

Daarna maakt de engine een lijst met mogelijke begintijden: de tijden op het raster dat de salon heeft gekozen (bijvoorbeeld elk kwartier), plus de tijden direct na het einde van een bestaande afspraak. Die laatste zorgen dat een klant precies aansluitend kan boeken, ook als een afspraak niet netjes op het kwartier eindigt.

3. Elke kandidaat toetsen

Voor elke kandidaat telt de engine de behandelduur (en eventuele opruimtijd) op en kijkt of het hele interval binnen het venster past en met geen enkel bezet blok overlapt. Bij een combinatie of een kleuring met inwerktijd bestaat één boeking uit meerdere stukjes bezette tijd: tijdens de inwerktijd is de kapper vrij voor iemand anders, en elk stukje moet bij de juiste medewerker passen. Heeft een behandeling een middel nodig, zoals een behandelkamer, dan moet ook dat middel op dat moment beschikbaar zijn, rekening houdend met hoeveel er van zijn.

Met de instelling Slimme tijdsloten geeft de engine de voorkeur aan begintijden die geen onbruikbaar klein gaatje in de agenda achterlaten. Belangrijk detail: een vrije periode verdwijnt daardoor nooit helemaal. Past er alleen een tijd die wel een gaatje laat, dan blijft de vroegste daarvan gewoon zichtbaar.

4. Geen voorkeur

Kiest de klant voor Geen voorkeur, dan rekent de engine dezelfde stappen uit voor elke medewerker die de behandeling doet en online boekbaar is, in één keer, en voegt de resultaten samen. De klant ziet zo elke tijd waarop minstens één geschikte collega vrij is.

Waarom een dubbele boeking niet kan ontstaan

Vrije tijden tonen is één ding; garanderen dat er nooit twee klanten tegelijk in dezelfde stoel belanden is iets anders. Tussen het moment dat een klant een tijd ziet en het moment dat hij op Bevestigen drukt, kan een ander dezelfde tijd al hebben geboekt. Planobook gebruikt daarom twee lagen.

  1. Opnieuw controleren bij het opslaan. Een boeking wordt in één databasetransactie opgeslagen. Boekingen voor dezelfde medewerker of hetzelfde middel wachten daarbij kort op elkaar, en direct voor het opslaan wordt nog eens gecontroleerd of de tijd vrij is. Middelen worden steeds in dezelfde vaste volgorde vastgezet, zodat twee boekingen nooit op elkaar blijven wachten.
  2. Een regel in de database zelf. De database (PostgreSQL) heeft een zogeheten exclusion constraint: voor dezelfde salon en dezelfde medewerker mogen de tijdsintervallen van twee gewone, actieve afspraken niet overlappen. Geannuleerde afspraken en no-shows tellen niet mee. Zelfs als er ergens in de software een fout zou zitten, weigert de database zo'n overlappende afspraak. Afspraken die uit meerdere stukjes bestaan, zoals een kleuring met inwerktijd, worden per stukje bewaakt door de eerste laag.

Half-open intervallen

Een afspraak van 10:00 tot 10:30 is het interval [10:00, 10:30): het begin hoort erbij, het einde niet. Twee intervallen [a, b) en [c, d) overlappen precies als a < d en c < b. Daardoor mag een afspraak van 10:30 tot 11:00 direct aansluiten, terwijl 10:15 tot 10:45 wordt geweigerd. Dezelfde toets gebruikt de puzzel hieronder.

Voor een salon betekent dit: als de agenda bij elkaar komt via de boekingspagina, de balie en de telefoon, blijft hij kloppen. Wil de salon er zelf bewust een afspraak overheen zetten, dan kan dat na een bevestiging in de agenda; online boekingen zien die tijd gewoon als bezet.

Probeer het zelf: vul een salondag

Deze puzzel gebruikt een bewust eenvoudig first-fit-algoritme, een greedy aanpak: het neemt de aanvragen één voor één en geeft elke aanvraag de vroegste plek die nog past. Het is niet de engine van Planobook zelf (die werkt per boeking en met de stappen hierboven), maar het laat goed zien waar het knelt: vaardigheden, pauzes, opruimtijd en één gedeelde behandelkamer.

1. Wie werkt er vandaag? (2 of 3)
2. De aanvragen van vandaag
  1. 1.Knippen vanaf 10:00
  2. 2.Kleuren vanaf 10:00
  3. 3.Gezichtsbehandeling vanaf 11:00
  4. 4.Knippen vanaf 10:00
  5. 5.Gezichtsbehandeling vanaf 11:30
  6. 6.Baard trimmen vanaf 12:45
3. In welke volgorde plant het algoritme?

Klik op Volgende stap. Het algoritme pakt telkens één aanvraag, kijkt bij elke medewerker die de behandeling doet wat de eerste vrije plek is vanaf de gewenste tijd, en kiest de vroegste. Een geplaatste afspraak schuift daarna nooit meer.

Grijs: buiten het rooster. Gestreept: pauze, of opruimtijd onderaan een afspraak. De kolom Behandelkamer toont dat er maar één kamer is: twee gezichtsbehandelingen kunnen niet tegelijk, ook niet bij verschillende medewerkers.

Om op te letten: zet de volgorde op Langste behandeling eerst en kijk of er minder afspraken verschuiven. Greedy algoritmes zijn snel en begrijpelijk, maar de volgorde maakt uit en het resultaat is niet altijd het best mogelijke. Precies daarom laat Planobook de klant zelf kiezen uit alle tijden die echt passen, in plaats van één tijd op te leggen.

Voor het onderwijs

Planning in een salon is een herkenbaar voorbeeld voor lessen over roosteren, operations research, databases en algoritmen: iedereen is weleens naar de kapper geweest. Je mag deze pagina en de puzzel vrij gebruiken in je les.

Oefenmateriaal: de Branchemonitor

In de Planobook Branchemonitor staan open datasets over de Nederlandse salonbranche, als CSV en JSON onder de licentie CC BY 4.0: afspraakgedrag (no-shows, hoe ver vooruit klanten boeken, drukste momenten), behandelprijzen per categorie en de cao-loontabel voor kappers. Alle cijfers zijn geanonimiseerd en opgeteld over alle salons; de live datasets vullen zich zodra er per cel genoeg salons meetellen.

Opdrachtideeën

  • mbo

    Plan een salondag op papier

    Gebruik de puzzel hierboven als start. Plan dezelfde aanvragen eerst zelf, daarna met het algoritme. Waar verschilt het, en welke volgorde levert de minste verschoven afspraken op?

  • hbo / wo, operations research

    Greedy tegenover optimaal

    Formuleer de salondag als intervalplanning met middelen (bijvoorbeeld als geheeltallig programma) en vergelijk de optimale oplossing met first fit en 'langste eerst'. Bedenk een voorbeeld waarin greedy slecht scoort.

  • hbo / wo, informatica

    Dubbele boekingen in de database

    Bouw in PostgreSQL een eigen afsprakentabel met een exclusion constraint op tijdsintervallen. Laat twee gelijktijdige transacties dezelfde tijd boeken en toon aan dat er precies één slaagt.

  • data en statistiek

    Drukte en no-shows simuleren

    Gebruik de dataset Afspraakgedrag in salons uit de Branchemonitor (drukste momenten, boekingsvoorsprong, no-shows) om aanvragen voor een week te simuleren. Hoeveel medewerkers heb je per dagdeel nodig?

  • bedrijfskunde

    Rooster en omzet

    Combineer een rooster met de dataset Behandelprijzen in salons en reken uit wat een uur bezette stoel oplevert. Wat doet opruimtijd met de bezettingsgraad?

Contact voor docenten

Gebruik je deze pagina in een vak, wil je een gastles of zoek je een praktijkcasus voor een project? Mail ons; we denken graag mee.

info@planobook.nl

Zo citeer je Planobook

Voor deze pagina (APA-stijl):

Planobook. (2026). Hoe de Planobook-boekingsengine werkt. https://planobook.nl/boekingsengine

Voor een dataset: noem Planobook Branchemonitor, de naam van de dataset, de peildatum en de link naar de datasetpagina, met de licentie CC BY 4.0.

Wat betekent dit voor je salon?

Je hoeft niets van algoritmen te weten om er plezier van te hebben. Je zet je roosters, behandelingen met hun duur en eventuele opruimtijd, en je kamers of apparaten één keer goed in Planobook. Daarna zien klanten op je boekingspagina alleen tijden die echt kunnen, dag en nacht, en staat elke boeking meteen in je agenda.

Voor salons met ambitie

Jij bent bij je klant. Planobook doet de rest.

Je klanten komen voor de ervaring. Planobook zorgt dat alles eromheen net zo verzorgd loopt: online boeken, herinneringen en een kassa die klopt.

  • Kapper föhnt het haar van een klant met een ronde borstel

    Dinsdag 10:00

    Sophie zit precies op tijd in je stoel. De herinnering ging gisteren per e-mail.

  • Manicure aan een marmeren nagelbar

    Zondag 22:15

    Een nieuwe klant boekt online een manicure. Jij ligt op de bank.

  • Klant ontspant tijdens een massage

    Vrijdag 18:00

    Kassa dicht, omzet klopt tot op de cent. Het weekend kan beginnen.

Probeer Planobook 14 dagen gratis

Agenda, online boeken, klantenbeheer, berichten en kassa in één systeem. Alleen een e-mailadres nodig, je zit nergens aan vast.

  • Gratis overstapservice
  • Maandelijks opzegbaar
  • 0% commissie
  • Nederlandse support
  • Geen betaalgegevens nodig
  • Geen betaalgegevens nodig
  • 14 dagen gratis
  • Gratis overstapservice
  • Je klantgegevens blijven van jou

4,9 GoogleUitstekend op TrustpilotVermeld op Capterra

“We werken met 6 stylisten en het was altijd chaos in de planning. Nu kijkt iedereen gewoon in Planobook. Iedereen had het zo onder de knie.”

Johan van de Vorstenbosch Trustpilot,26 januari 2026 · Lees de review