Vinacta
Ristoratore

Sistema prenotazioni tavoli: setup + booking online

Configura tavoli, orari, servizi (pranzo/cena/brunch), modalità INSTANT/REQUEST/HYBRID. Stripe deposit + no-show fee. SMS reminder 24h.

12 min lettura

Sprint 102-104 (v1.4.0) ha lanciato il sistema prenotazioni tavoli competitivo con OpenTable/Resy/Anolla. Configurabile per ogni ristorante.

  • Apertura (es. 12:00)
  • Chiusura (es. 23:00)
  • Checkbox "Chiuso" se giorno di chiusura

Tab 2 — Servizi prenotabili

  • Tipo (LUNCH/DINNER/BRUNCH/APERITIVO/TASTING)
  • Giorno settimana (es. solo Ven+Sab+Dom per cena gourmet)
  • Apertura/Chiusura (es. 19:30-22:30)
  • Slot booking (15/30/60 min — quanto distanti gli slot)
  • Durata coperta (default 120min — quanto rimane occupato il tavolo)
  • Capacity max (totale coperti simultanei)
  • Modalità booking:
  • 🟢 INSTANT: conferma immediata via email (massima conversion)
  • 🟡 REQUEST: cliente invia richiesta, tu approvi entro 24h
  • 🔵 HYBRID: instant weekday, request weekend

Tab 3 — Tavoli

  • Numero (es. "1", "A1", "Window-3")
  • Min/Max coperti
  • Forma (ROUND/SQUARE/RECTANGULAR/BAR_STOOL)
  • Sezione opzionale (Sala A, Dehors, Privé)

Come funziona il booking pubblico

  1. Step 1: sceglie data + numero coperti (1-50)
  2. Step 2: vede slot disponibili calcolati realtime (capacity meno reservations attive)
  • Slot raggruppati per servizio (Pranzo/Cena/Brunch)
  • Click su orario → seleziona
  1. Step 3: compila guest info (nome, email obbligatori; telefono consigliato per SMS reminder)
  • Note (allergie, preferenze tavolo)
  • Occasione (anniversario, compleanno, cena lavoro)
  • Highchair toggle per bambini
  1. Submit → riceve codice booking VINBK-XXXX + email conferma immediata (se INSTANT)

Admin flow

  • Lista prenotazioni con filtri date/status/restaurant
  • Status: PENDING → CONFIRMED → SEATED → COMPLETED (o CANCELLED / NO_SHOW)
  • Azioni: confirm (per REQUEST) · seat (assign table) · complete · cancel · mark no-show

Stripe deposit (anti no-show)

Servizio: Cena del weekend Deposito: €25/persona Refundable: 24h prima Charge: PaymentIntent EUR automatic_payment_methods


Quando cliente prenota servizio con deposito > 0:
1. Booking creato in status PENDING + paymentStatus=PENDING
2. Email con link Stripe checkout
3. Cliente paga → webhook conferma → status=CONFIRMED
4. Refund automatico se cancellazione entro refundableUntil

## Dynamic deposit (Sprint 107 v1.4.5)

Regole avanzate peak hours:

Rule "Weekend night €30"

  • Days: Ven+Sab
  • Time: 20:00-22:00
  • Min party: 4
  • Days before max: 7
  • Deposit: €30/persona
  • Priority: 10

Calcolato realtime quando cliente seleziona slot. Rule più specifica (priority alta) vince.

## SMS reminder 24h (Sprint 104)

Cron `/api/cron/booking-reminder` ogni 2h:
- Scan CONFIRMED reservations 22-26h da ora
- Invia email + SMS Skebby (se telefono presente)
- Marca `reminderSentAt` (no doppio invio)

## No-show auto-mark (Sprint 104)

Cron `/api/cron/booking-noshow-mark` ogni 15min:
- Scan CONFIRMED >30min in ritardo + arrivedAt null
- Marca status=NO_SHOW + addebita `noShowFee` da depositRequired
- Increment `Guest.totalNoShows` per blacklist auto (Sprint 105)

## Best practices

- ✅ **Cutoff 60-90min**: minimo tempo prima dello slot prenotabile (evita last-minute walk-in equivocate)
- ✅ **Advance days 60-90**: prenotazioni max 2-3 mesi avanti (evita slot stale)
- ✅ **Deposito peak only**: €15-25 cena weekend, gratis pranzo lavorativo
- ✅ **Refundable 24h**: standard industria
- ✅ **Reminder SMS**: +40% reduce no-show vs solo email
- ✅ **Multiple servizi/giorno**: separa pranzo (12:30-14:30) e cena (19:30-22:30) per stats accurate

## Roadmap booking

- **Sprint 105** (v1.4.1): Guest CRM 360° auto-popolato da bookings
- **Sprint 106** (v1.4.2): Smart waitlist quando slot pieno
- **Sprint 107** (v1.4.5): AI seating + dynamic deposit pricing
- **Sprint 109** (v1.5.0): Custom domain Enterprise (`prenota.osteriadelvino.com`)
- **Sprint 111+**: WhatsApp Business API booking · Loyalty program · Online ordering integration

Vedi anche