Zo bouw je een boekingsapp: tijdslots, beschikbaarheid, herinneringen en aanbetalingen
Om een boekingsapp te bouwen heb je vier dingen nodig die samenwerken: een lijst van wat geboekt kan worden (diensten, ruimtes, personeel), regels voor wanneer elk beschikbaar is, een boekingsflow die alleen echt vrije tijdslots aanbiedt, en een privéweergave waar het bedrijf binnengekomen boekingen beheert. Een AI-app-bouwer kan in enkele minuten een werkende eerste versie maken op basis van een korte beschrijving; het echte werk is de regels bepalen — duur van een slot, buffers, annuleringen, tijdzones — en testen dat dubbele boekingen onmogelijk zijn.
Begin met bepalen wat „een boeking” voor jou betekent
Boekingsapps lijken van buiten op elkaar, maar verschillen veel van binnen. Beantwoord deze vragen eerst:
- Wat wordt geboekt? Een dienst (een knipbeurt), een persoon (een bijlesdocent), een resource (een vergaderruimte, een baan, een bestelbus), of een plek bij een sessie (een yogales met 12 plekken).
- Hoe lang duurt het? Vast per dienst, of gekozen door de klant?
- Wie levert het? Eén persoon, meerdere medewerkers met eigen uren, of niemand (een ruimte)?
- Wat gebeurt er na de boeking? Directe bevestiging, of een verzoek dat de eigenaar goedkeurt?
- Speelt geld mee? Gratis, betalen op de dag, een aanbetaling vooraf, of volledige vooruitbetaling?
„Vraag een tijd aan, de eigenaar bevestigt per e-mail” is veel eenvoudiger te bouwen dan „directe boeking tegen drie personeelsagenda’s met aanbetalingen”. Beide kunnen kloppen — kies wat je voor versie één echt nodig hebt.
Wat de app nodig heeft
Data
| Tabel | Belangrijkste velden |
|---|---|
| Diensten | Naam, duur, prijs, buffer erna, actief ja/nee |
| Personeel of resources | Naam, welke diensten ze aanbieden |
| Beschikbaarheid | Wekelijkse werktijden per medewerker, plus uitzonderingen (feestdagen, eenmalige sluitingen) |
| Boekingen | Dienst, medewerker, starttijd, eindtijd, klantgegevens, status (in afwachting, bevestigd, geannuleerd), betaalstatus |
| Klanten | Naam, e-mail, telefoon, notities — in het begin optioneel; kan op de boeking zelf staan |
Het opslaan van de eindtijd bij elke boeking, niet alleen de starttijd, maakt controles op overlap veel eenvoudiger.
Pagina’s
- Openbaar: dienstenlijst, tijdslotkiezer, boekingsformulier, bevestigingspagina, en een link om te annuleren of te verzetten.
- Privé (eigenaar of personeel): het schema van vandaag, aankomende boekingen, een manier om vrije tijd te blokkeren, en instellingen voor diensten en uren.
Rechten
Klanten mogen alleen vrije of bezette tijdslots zien — nooit de namen van andere klanten. Personeel ziet misschien alleen het eigen schema; de eigenaar ziet alles. Leg dit vast, want het bepaalt of je inloggen en rollen nodig hebt. Onze gids over inloggen toevoegen aan je app beschrijft de opties.
De lastige delen, en hoe je ermee omgaat
Dubbele boekingen
De klassieke fout: twee mensen laden de pagina, beiden zien 10:00 vrij, beiden boeken het. De oplossing is opnieuw controleren op de server op het moment dat de boeking wordt opgeslagen, en die weigeren als er nu iets overlapt. Vraag dit expliciet:
Controleer bij het opslaan van een boeking op de server dat er geen bevestigde of openstaande boeking voor dezelfde medewerker overlapt met de gevraagde tijd (inclusief de buffer). Als die er wel is, wijs de boeking af en toon „Dat tijdstip is net bezet — kies alstublieft een ander moment.”
Test het daarna met twee browservensters.
Tijdzones
Sla elke tijd op in UTC en reken om voor weergave. Bepaal wiens tijdzone de boekingspagina toont — meestal die van het bedrijf voor diensten op locatie, en die van de klant voor online gesprekken — en vermeld dat op de pagina. Test een boeking rond een zomertijdwisseling.
Buffers, opzegtermijn en limieten
Gebruikelijke regels om vooraf te bepalen: een buffer tussen afspraken, minimale vooruitboekingstijd („geen boekingen minder dan 2 uur vooraf”), hoe ver vooruit mensen kunnen boeken, en een dagelijks maximum. Elk daarvan is één zin in een prompt; laat je ze weg, dan kiest de AI standaardwaarden voor je.
Annuleringen en no-shows
Geef elke bevestiging een annuleerlink met een unieke token, zodat klanten geen account nodig hebben. Bepaal je annuleringstermijn en of aanbetalingen terugbetaalbaar zijn, en toon dat beleid vóór de betaling.
Herinneringen
Herinneringsmails of sms’jes hebben iets nodig dat volgens een schema draait („elke 15 minuten: stuur herinneringen voor boekingen die over 24 uur beginnen”). Controleer hoe je bouwer en hosting geplande taken afhandelen. Als ze dat niet doen, gebruik je een externe planner die een endpoint in je app aanroept, of stuur je de bevestigingsmail met een agenda-uitnodiging als bijlage, zodat de eigen agenda van de klant herinnert. Zie hoe je e-mails vanuit je app verstuurt voor de kant van de e-mailprovider.
Aanbetalingen en betalingen
Het gebruikelijke patroon met Stripe:
- De klant kiest een tijdslot; de app maakt een boeking in afwachting die het slot kort vasthoudt (bijvoorbeeld 15 minuten).
- De app stuurt de klant naar Stripe Checkout voor de aanbetaling.
- Stripe meldt via een webhook aan je app dat de betaling is gelukt; de boeking wordt bevestigd.
- Als er niet op tijd betaald wordt, verloopt de boeking in afwachting en komt het slot weer vrij.
De standaardprijs van Stripe is een percentage plus een vast bedrag per geslaagde kaartbetaling, zonder maandelijkse kosten (per september 2026); de tarieven verschillen per land, dus controleer de prijspagina van Stripe voor jouw land. Gebruik de testmodus en testkaarten totdat alles werkt. Onze gids over betalingen toevoegen loopt stap voor stap door het proces.
Een eerste prompt die werkt
Bouw een boekingsapp voor Northside Barbers. Diensten: knipbeurt (30 min, $25), baardtrim (15 min, $12), knipbeurt + baard (45 min, $32). Twee kappers, Sam en Ali, die elk dinsdag tot en met zaterdag van 9:00 tot 18:00 werken. Klanten kiezen een dienst, daarna een kapper of „een willekeurige kapper”, en zien dan alleen vrije starttijden van 15 minuten voor de komende 14 dagen, en vullen naam, telefoon en e-mail in. Sla boekingen op in een database, met een buffer van 10 minuten na elke afspraak, en controleer de beschikbaarheid opnieuw bij het opslaan om dubbele boekingen te voorkomen. Toon een bevestigingspagina met een annuleerlink. De eigenaar heeft een privépagina met de boekingen van vandaag en de komende tijd, kan een boeking annuleren en tijd blokkeren. Tijden zijn in de lokale tijdzone van de zaak. Schoon ontwerp, eerst voor mobiel.
De prompt noemt de diensten, het personeel, de uren, de regels en het overzicht van de eigenaar — alles wat de AI anders zou moeten raden.
Bouwstappen
- Eerst de kern van de boekingsflow. Diensten → tijdslot → formulier → opgeslagen boeking → bevestiging. Niets anders tot dit op een telefoon werkt.
- Overzicht voor de eigenaar. Lijst van vandaag, lijst van komende boekingen, annuleren, tijd blokkeren.
- Bescherm de pagina’s van de eigenaar. Voeg inloggen toe voordat echte data erin gaat.
- Regels. Buffers, opzegtermijn, boekingshorizon, feestdagen.
- E-mail. Bevestiging met een agenda-uitnodiging en annuleerlink.
- Aanbetalingen als je die nodig hebt, eerst in de testmodus van Stripe.
- Test de randgevallen. Twee vensters die hetzelfde slot boeken, een boeking over middernacht, een datum met zomertijd, een geannuleerde boeking die zijn slot vrijgeeft.
- Publiceer, en maak daarna zelf een echte boeking voordat je de link deelt.
Veelgemaakte fouten
- Beschikbaarheid alleen in de browser controleren. Het ziet er goed uit en toch worden er dubbele boekingen gemaakt.
- Lokale tijden opslaan zonder tijdzone. Het werkt tot de klokken veranderen.
- Namen van klanten tonen in de openbare agenda. Toon alleen vrij of bezet.
- Personeelsplanning, loyaliteitspunten en sms op dag één bouwen. Lanceer de kern en voeg daarna toe wat klanten echt vragen.
- Geen manier voor de eigenaar om tijd te blokkeren. De eerste zieke dag geeft no-shows.
Wanneer Calendly (of iets vergelijkbaars) de betere keuze is
Als je één persoon bent die beschikbaarheid deelt voor gesprekken, is een planningstool moeilijk te verslaan. Per september 2026 dekt het gratis abonnement van Calendly één soort afspraak, één agenda-koppeling en één-op-één planning met een aanpasbare boekingspagina; betaalde abonnementen voegen meer soorten afspraken en teamfuncties toe. Dergelijke tools koppelen direct aan je bestaande agenda, wat een eigen app moet worden gebouwd om te doen.
Bouw zelf als je regels nodig hebt die die tools niet ondersteunen, meerdere boekbare resources, je eigen huisstijl overal, boekingen die gekoppeld zijn aan andere data (klanten, bestellingen, lidmaatschappen), of als je een boekingsproduct bouwt om aan anderen te verkopen.
Bouwen met Mythex
Bij Mythex beschrijf je de boekingsapp in de chat, bouwt het die in een live voorbeeld, en voegt het een Postgres-database toe wanneer boekingen moeten worden opgeslagen. De pagina over boekingen in de documentatie adviseert te beginnen met een aanvraagformulier en een beheerlijst, en daarna de rest toe te voegen. Wees helder over wat ingebouwd is en wat je zelf koppelt: Mythex heeft geen ingebouwde agendasynchronisatie, sms-herinneringen of aanbetalingsproduct. E-mail loopt via je eigen provider, aanbetalingen via je eigen Stripe-sleutels die als projectgeheimen zijn opgeslagen (Stripe-recept), en regels voor dubbele boekingen en tijdzones zijn dingen die je zelf specificeert en test, zoals hierboven.
Met het commando /test laat je de agent de boekingsflow in het voorbeeld doorlopen en melden wat er misgaat. Voor een startprompt kun je de sjabloon voor een kapperswebsite met boekingen of meeting booker proberen, of alle app-sjablonen bekijken.
Veelgestelde vragen
Welke functies heeft een boekingsapp minimaal nodig?
Minimaal: een lijst met diensten en duren, een manier om alleen vrije tijdslots te tonen, een boekingsformulier, een bevestiging, en een privépagina waar het bedrijf de boekingen ziet en beheert. Herinneringen, aanbetalingen en personeelsagenda’s komen daarna.
Hoe voorkom ik dubbele boekingen?
Controleer de beschikbaarheid op de server op het moment dat de boeking wordt opgeslagen, niet alleen bij het laden van de pagina, en wijs de boeking af als het tijdslot inmiddels is bezet. Test het door vanuit twee browservensters hetzelfde tijdslot te proberen te boeken.
Kan een eigen boekingsapp aanbetalingen innen?
Ja. De gebruikelijke aanpak is de klant naar een Stripe Checkout-pagina voor de aanbetaling te sturen en de boeking pas te bevestigen zodra de betaling is gelukt. Je hebt een eigen Stripe-account en sleutels nodig.
Moet ik een boekingsapp bouwen of Calendly gebruiken?
Als één persoon zijn beschikbaarheid wil delen en er niets bijzonders is aan de flow, is een planningstool zoals Calendly sneller en goedkoper in gebruik. Bouw zelf als je eigen regels nodig hebt, meerdere resources, je eigen huisstijl overal, of boekingen die gekoppeld zijn aan andere data die je bewaart.