
Samenvatting
Booking-planner is de kennismakingsplanner op deze site: een zelfgebouwd alternatief voor Cal.com. Hij leest vrije tijd uit Google Calendar, biedt bezoekers open slots aan, en legt bij het boeken een afspraak met Google Meet-link vast. Annuleren gaat via een ondertekende link met bevestigingsknop. Er is geen database: elke boeking leeft in de agenda zelf. De kern is een bewuste keuze in rechten: de app krijgt alleen toegang tot de kalender die hij zelf via de API heeft aangemaakt, plus vrij/bezet-informatie, en kan zo niet in de hoofdagenda schrijven of lezen waarmee ik bezet ben.
De vraag
De site had geen boekingspad en eindigde in een mailto. Cal.com vraagt volledige lees- en schrijfrechten op de hele agenda; dat was de reden om het zelf te bouwen met zo smal mogelijke scopes.
Wat ik heb gebouwd
- Vrije-slot-berekening uit Google Calendar op basis van werkuren, met buffer tussen afspraken en een boekingshorizon
- Boeken van een afspraak met automatisch aangemaakte Google Meet-link, rechtstreeks in een aparte, via de API aangemaakte kalender
- Annuleren als POST met bevestigingsknop achter een HMAC-ondertekende link, niet als GET (mailscanners volgen GET-links automatisch)
- Tijdzone-logica die intern altijd met UTC-instants rekent en per slotgrens naar Europe/Amsterdam converteert, zodat slots rond de zomertijdovergang niet een uur verschuiven
- Bevestigings- en annuleringsmail via Resend, met de Meet-link en de annuleerknop erin
- Bot-afweer: een honeypot-veld en een minimale invultijd, zonder echte bezoekers te hinderen
In detail
- Zo smal mogelijke agenda-rechten: alleen de zelf aangemaakte boekingskalender plus vrij/bezet, geen lees- of schrijftoegang op de hoofdagenda
- Geen database: elke boeking leeft in Google Calendar zelf, dus geen aparte opslag om te beheren of te beveiligen
- DST-correcte tijdzone-conversie, gedekt door tests op de slotgrenzen rond de zomertijdovergang
- Annuleren via een ondertekende link met bevestiging, bestand tegen mailscanners die links vooraf openen
- Beschikbaarheid aanpassen is één bestand: werkuren, slotlengte, buffer en horizon staan op één plek
Resultaat
In gebruik op deze site als primaire kennismakingsroute. De code draait met een testsuite die het tijdzone-rekenwerk en de HMAC-signing dekt, de plekken waar een fout stil en pas veel later pijn zou doen.