Reservations Documentatie

← Terug naar Reserveringen

Welkom bij de Reservations Module

Deze module is het centrale dashboard voor alle tafelreserveringen van NaNoi. Het combineert een publieke boekingspagina voor gasten met een uitgebreid admin-paneel voor personeel. Van telefoontjes tot walk-ins β€” alles wordt in realtime verwerkt.

Wat kan je?

  • πŸ“… Floorplan-bekijken β€” visuele weergave van alle tafels en reserveringen
  • ✏️ Reserveringen beheren β€” direct datum/tijd/personen aanpassen, tafels verplaatsen
  • 🚢 Walk-in β€” klik op een vrije tafel om direct een gast in te checken
  • πŸ“ž Telefonische boekingen β€” caller popup bij inkomend gesprek + snel reserveren
  • πŸ‘₯ Contacten β€” `/admin/contacts` pagina met KPIs, reserveringshistorie en no-show tracking
  • βž• Handmatig boeken β€” quick-add modal voor telefonische reserveringen met autocomplete op naam
  • πŸŽ‰ Grote groepen β€” tot 50 personen met handmatige tafelindeling
  • πŸ”’ Exclusief evenement β€” blokkeer alle resterende tafels voor een privΓ©-bijeenkomst met paarse badge op floorplan en publieke banner
  • πŸ“ Notities β€” gast-commentaar zichtbaar op tafelkaarten en in popup
  • πŸ“Š Status banner β€” live beschikbaarheid en exclusief event zichtbaar op Γ©lke pagina

Reserveren via de website (gasten)

De publieke reserveringspagina (/reservations) is beschikbaar in 4 talen (EN, NL, FR, DE) en werkt op één pagina β€” als een gesprek, niet als een formulier:

Publieke reserveringspagina

Flow in één oogopslag

  • Quick date knoppen β€” Vanavond / Morgen / Andere datum met live beschikbaarheidsindicatoren. Bij volgeboekt of gesloten dagen krijg je direct een duidelijke melding.
  • Gasten kiezen β€” Grote knoppen 1 t/m 7 en 8+. Knoppen passen zich aan beschikbaarheid aan: als max 4 gasten mogelijk is, zijn knoppen 5+ verborgen.
  • Tijd kiezen β€” Uurlijkse slots (18:00, 19:00, 20:00 β€” weekend vanaf 17:00). Geen 15-minuten klinische intervallen β€” het is een etentje, geen tandartsafspraak.
  • Naam + e-mail β€” E-mail is verplicht voor de bevestiging. Telefoon optioneel. Browser vult e-mail automatisch in.
  • EΓ©n klik reserveren β€” "Reserveer uw tafel" knop. Klaar.

Beschikbaarheids-indicatoren

  • Kalender toont per dag een bolletje bij beschikbare datums
  • Groen = ruim beschikbaar
  • Geel = begint vol te lopen
  • Rood = vol
  • Grijs = gesloten dag of verleden
  • 6 maanden vooruit boekbaar

Duplicaat-detectie

Als een gast al een reservering heeft op dezelfde datum, krijgt hij een melding met de bestaande reservering. De gast wordt verwezen naar de bevestigingsmail om te wijzigen (veilige token-link). Alleen een extra tafel boeken kan nog via de knop "Toch extra tafel".

Reserveringsmails (Resend)

Bij elke reservatiewijziging wordt automatisch een e-mail verstuurd via Resend (reservations@nanoi.be). Alle mails gebruiken hetzelfde premium template met het NaNoi-logo, tagline, gouden ornamenten, en compacte footer.

MailtypeWanneerICSCTA
BevestigingNieuwe reserveringβœ… METHOD:REQUESTPas reservering aan β†’ /nl/beheren?token=xxx
WijzigingReservering aangepastβœ… SEQUENCE:1 (vervangt bestaand event)Bekijk reservering
AnnuleringReservering geannuleerdβœ… METHOD:CANCEL (verwijdert event)Nieuwe reservering maken
No-showNiet komen opdagen❌ GeenBel ons β†’ tel:+3233320165

Locale-prefixed URLs: De bevestigingsmail bevat een taal-specifieke link (/nl/beheren, /fr/gerer, /de/verwalten, /reservations/manage). Taalwissel op de manage-pagina behoudt de token.

Reservering beheren (gast)

Via de link in de bevestigingsmail kan de gast zijn reservering inline aanpassen of annuleren β€” geen aparte pagina's, geen popups:

  • Wijzigen β€” datum/tijd/gasten aanpassen met live beschikbaarheidscheck (bestaande tafels worden uitgesloten). Bij opslaan: visuele bevestiging + wijzigingsmail.
  • Terug naar origineel β€” knop om wijzigingen ongedaan te maken.
  • Annuleren β€” inline amber card "Weet u zeker?" met Ja/Nee. Geen lelijke browser popup. Bij annulering: ICS wordt verwijderd uit agenda + annuleringsmail.

No-show verwerking (admin)

Aan het einde van de avond opent het personeel /admin/closing-checklist:

  • Toont alle gasten van vandaag die niet hebben ingecheckt
  • Aanvinken wie Γ©cht niet is komen opdagen
  • "Opslaan" β†’ status wordt no_show, no_show_count op het contact wordt verhoogd, no-show mail wordt verstuurd
  • Let op: een gast met no_show_count > 0 kan niet meer online reserveren β€” moet bellen. De teller kan handmatig op 0 worden gezet in /admin/contacts.
  • Geen automatische cron β€” volledig handmatig, door het personeel gecontroleerd

Stap 3 β€” Bevestigen

  • Samenvatting met datum, tijd, personen en contactgegevens
  • Duplicaat-check: waarschuwing als hetzelfde e-mailadres of telefoonnummer al een boeking heeft op deze datum
  • Bevestigingsscherm met links naar WhatsApp, Menu en routebeschrijving

Validatie

  • E-mail: geldig formaat vereist
  • Telefoon: minstens 7 cijfers
  • Restaurant gesloten op de geselecteerde dag β†’ boeking geblokkeerd
  • Capaciteit onvoldoende β†’ rode melding, volgende-knop uitgeschakeld

Admin Floorplan

De hoofdweergave van het admin-paneel is een visueel vloerplan van het restaurant:

Admin floorplan
  • Raamzijde (T1-T4): horizontale rij bovenaan, opeenvolgend koppelbaar
  • Toog (T5, T6): tussen de raam-tafels in, verticaal geplaatst
  • Muurzijde (T7, T8): rechts uitgelijnd
  • Terras (T101-T103): aparte sectie onderaan
  • Kleuren: elke reservering krijgt een eigen kleur β€” zelfde kleur in floorplan en lijst
  • Merged cards: opeenvolgende raam-tafels van dezelfde reservering worden samengevoegd tot één brede kaart
  • Late indicator: amber kleur pulseert als een gast >30 minuten te laat is zonder in te checken
  • Check-in indicator: groene bol met wit vinkje linksboven op de kaart als de gast is ingecheckt
  • Clusters: grote groepen worden getoond als twee verticale stacks (T5-cluster + T6-cluster)

Datum navigatie

  • ← β†’ knoppen: vorige/volgende dag
  • Vandaag knop: springt naar huidige datum
  • Datumknop + kalender popup: klik op de datum (bijv. "za 8 aug 2026") om een kalender te openen met beschikbaarheidsdots (groen/geel/rood) β€” zelfde als de publieke website. Klik op een datum om direct te navigeren. Verleden en volle dagen zijn ook te selecteren (verleden toont read-only floorplan).
  • Stats bar: toont aantal reserveringen, bezette tafels en totaal personen

Walk-in

Klik op een vrije tafel in het floorplan (grijze kaart zonder reservatie) om een walk-in toe te voegen:

  • Popover opent met tafelnaam en personen-teller (+/βˆ’, capped op tafelcapaciteit)
  • Naamveld met autocomplete op contacten (typo-tolerant via fuzzy search)
  • Naam leeg laten = "Walk-in T" + tafelnummer
  • Bij bevestigen: gast wordt direct ingecheckt (status: bezet), tafel blijft op de gekozen tafel
  • Alleen beschikbaar voor vandaag β€” verleden/toekomst uitgeschakeld

Notities op tafelkaarten

Als een reservering een notitie bevat (ingevuld door gast op de website of door admin), toont de tafelkaart een πŸ“ icoontje. In de popup is de notitie volledig leesbaar.

Reservatie Popup

Klik op een reservering in het floorplan of de zijbalk om de popup te openen:

Header

  • Naam van de gast (groot)
  • Tijd Β· personen Β· tafels (samenvatting)
  • Status badge (Bevestigd / Geannuleerd / No-show / Afgerond)
  • πŸ’Ύ Opslaan knop β€” wijzigingen direct doorvoeren. Bij ingecheckte gasten: "Ingecheckt" (grijs, disabled)

Bewerkbare velden (altijd zichtbaar, geen edit-toggle)

  • Datum: date picker, live check bij wijziging
  • Tijd: time input, gesynchroniseerd met header
  • Personen: 1-50, met live beschikbaarheidscheck
  • Bij aanpassen personen: exclude_tables parameter geeft huidige tafels vrij voor de check
  • Bij ingecheckte gasten: datum, tijd en personen zijn disabled (alleen verplaatsen blijft actief)

Tafel verplaatsen

  • Dropdown met vrije losse tafels per zone
  • Bezette tafels waarvan de gast niet is ingecheckt: getoond met label "Β· herverdeelt" β€” de reshuffle verplaatst de andere reservering
  • Ook inactieve tafels beschikbaar (voor heropenen)
  • Raam β€” gecombineerd: combinaties zoals T1+T2 (4p), T1+T2+T3+T4 (10p)
  • Opties die onoplosbare conflicten veroorzaken zijn grijs en disabled ("β€” niet beschikbaar")
  • "Verplaatsen en herverdeel avond": slaat override op en herschikt andere reserveringen
  • Ook na check-in blijft verplaatsen mogelijk

Actieknoppen

  • βœ“ Gast ingecheckt β€” zet checked_in_at timestamp. Toont geen vinkje vΓ³Γ³r check-in, wΓ©l groen vinkje erna (disabled)
  • No-show β€” markeert als no-show (met bevestigingsvraag). Niet zichtbaar bij ingecheckte gasten
  • Annuleren β€” annuleert de reservering (met bevestigingsvraag). Niet zichtbaar bij ingecheckte gasten
  • Maaltijd afgerond β€” markeert als voltooid (met bevestigingsvraag)
  • Herstel naar bevestigd β€” maakt een geannuleerde/no-show reservering opnieuw actief

Klantgeschiedenis

  • Toont eerdere bezoeken (max 5) op basis van e-mail of telefoonnummer
  • Vaste gast badge bij 3+ bezoeken

Snel Reserveren (Quick-Add)

Quick-add modal

De quick-add modal opent via de + Snel Reserveren knop of vanuit de caller toast. Velden:

  • Naam, Telefoon, E-mail (standaard info@nanoi.be uit instellingen)
  • Datum (standaard vandaag), Personen (max = totale zaalcapaciteit)
  • Tijdslots: zelfde logica als publieke form (weekend/weekday opening, interval)
  • Notities

Capaciteitswaarschuwingen

SituatieKleurMeldingBoeken?
Te weinig stoelenπŸŸ₯ Rood"Onvoldoende capaciteit β€” max X stoelen"❌ Geblokkeerd
Systeem kan niet alloceren🟧 Oranje"Systeem kan niet toewijzen β€” X stoelen vrij"βœ… Handmatig
Voldoende plek⬜ Geenβ€”βœ… Normaal

Exclusief Evenement

Vink "Exclusief evenement" aan in de quick-add modal om alle resterende tafels te blokkeren:

  • De reservatie krijgt Γ‘lle binnentafels toegewezen (T1-T8)
  • Bestaande reserveringen op dezelfde datum blijven onaangeroerd
  • Checked-in gasten worden gerespecteerd (hun tafels worden niet geblokkeerd)
  • Publieke kalender toont datum als VOL
  • Paarse πŸ‘‘ badge op de admin floorplan en in de reserveringspopup
  • Publieke status banner toont "πŸ‘‘ Exclusief evenement β€” alle tafels gereserveerd" (paars)
  • ⚠ Waarschuwing als er al andere reserveringen op de datum staan
  • Toggle in de reserveringspopup om achteraf aan/uit te zetten

Caller Toast (Telefonische boekingen)

Bij een inkomend telefoongesprek (via Zadarma VOIP) verschijnt rechtsboven een toast:

  • Bekende beller: naam + "XΓ— geboekt Β· Y aankomend" + "Reserveringen β†’" knop (opent /admin/contacts in nieuw tabblad) + "πŸ“ž Terugbellen"
  • Onbekende beller: "Snel Reserveren" knop (opent quick-add met telefoonnummer vooringevuld) + "πŸ“ž Terugbellen"
  • Herhaalde oproepen: zelfde nummer belt meermaals β†’ 1 toast met "XΓ— gebeld Β· laatste: HH:MM"
  • Max 5 toasts tegelijk β€” oudste verdwijnt automatisch

Contacten Pagina

/admin/contacts β€” centraal overzicht van alle gasten:

  • Zoeken: typo-tolerante fuzzy search op naam (bv. "jaak" vindt "Jacques")
  • KPIs: bezoeken deze maand, laatste bezoek, gemiddeld personen, no-show count (amber als >0)
  • ⚠ No-show pill: amber badge naast naam als een van de laatste 2 reserveringen een no-show was
  • Reserveringshistorie: volledige lijst met status-badges, klik opent popup direct (zonder pagina-navigatie)
  • Periode-filter: deze maand / 3 maanden / dit jaar / alles
  • Snel Reserveren + Bel terug knoppen
  • Bereikbaar via caller toast, reserveringspopup (klik op naam/e-mail), en zijbalk

Grote Groepen (>8 personen)

Groepen die niet in de normale tafelcombinaties passen worden handmatig ingedeeld:

  • T5 en T6 als ankers β€” twee onafhankelijke clusters
  • Elk cluster krijgt raam- en muur-tafels toegewezen tot de groep past
  • De clusters worden gebalanceerd (binnen 2 personen van elkaar)
  • Floorplan toont twee verticale stacks met ↳ voor toegevoegde tafels
  • Checked-in gasten blokkeren de handmatige allocatie (raam-rij en ankers moeten vrij zijn)

Herverschik Avond

De Herverschik avond knop optimaliseert alle niet-ingecheckte reserveringen:

  • Grootste groepen krijgen eerst de beste tafelcombinaties
  • Overridden tafels (handmatig verplaatst) blijven op hun plek
  • Checked-in tafels worden niet aangeraakt
  • Gebruik dit na meerdere verplaatsingen om de avond te optimaliseren

Caller Toast (Telefonische Reserveringen)

Bij een inkomend gesprek verschijnt rechtsboven een popup:

  • Toont naam (of "Onbekend") en telefoonnummer
  • Badge: "NΓ— geboekt" of "nieuw"
  • Reserveringshistoriek (max 3 zichtbaar, klikbaar naar popup)
  • Snel Reserveren knop β€” opent quick-add met naam en telefoon vooringevuld
  • Max 3 toasts tegelijk β€” oudste wordt automatisch gesloten

Realtime Updates

Alle wijzigingen worden via Supabase Realtime direct doorgevoerd:

  • Nieuwe reservering β†’ verschijnt automatisch in floorplan
  • Statuswijziging β†’ kleur en positie updaten direct
  • Check-in β†’ reservering verdwijnt uit unchecked-lijst