# How to Build a Restaurant Reservation System in Bubble

- Tool: Bubble
- Difficulty: Beginner
- Time required: 25-30 min
- Compatibility: All Bubble plans
- Last updated: March 2026

## TL;DR

A restaurant reservation system in Bubble uses Data Types for tables, time slots, and reservations. You display available time slots based on table capacity and existing bookings, let guests select a time and party size, create the reservation with a confirmation email, and manage a waitlist for fully booked slots. This tutorial covers the complete reservation flow from availability to confirmation.

## Overview: Restaurant Reservation System in Bubble

This tutorial guides you through building a reservation system for restaurants. You will model tables and time slots, display availability, handle booking creation with conflict prevention, send confirmations, and manage waitlists.

## Before you start

- A Bubble app with user authentication or guest email capture
- Understanding of date searches and conditional logic
- Email configuration for confirmation messages

## Step-by-step guide

### 1. Create the reservation Data Types

In the Data tab, create 'Table' with: 'name' (text — e.g., 'Table 1'), 'capacity' (number — max guests), 'location' (text — indoor/outdoor/bar). Create 'Reservation' with: 'table' (Table), 'guest_name' (text), 'guest_email' (text), 'guest_user' (User, optional), 'party_size' (number), 'date' (date), 'time_slot' (text — e.g., '7:00 PM'), 'status' (text: confirmed/cancelled/waitlisted/completed), 'special_requests' (text). Create an Option Set 'TimeSlot' with options for each bookable time (5:00 PM, 5:30 PM, 6:00 PM, etc.).

**Expected result:** Data Types for tables and reservations exist with all fields needed for the booking system.

### 2. Build the reservation booking form

Create a 'book' page with: date picker for reservation date, dropdown for party size (1-10), and a Repeating Group showing available time slots. The time slot display searches for each TimeSlot option, checks if any Table with sufficient capacity has no existing Reservation for that date+time. Show available slots in green, fully booked in grey. When a guest selects a slot, show a form for name, email, and special requests.

> Pro tip: Calculate availability server-side: for each time slot, count reservations and compare against total tables of sufficient capacity.

**Expected result:** A booking form shows available and unavailable time slots based on table capacity and existing reservations.

### 3. Create the reservation with conflict checking

On the 'Book Now' button click, create a workflow. Step 1: Search for available Tables where capacity >= party_size AND no Reservation exists for that table + date + time slot. Step 2 (Only when count > 0): Create a Reservation with the first available table, guest details, and status = 'confirmed'. Step 3: Send a confirmation email with reservation details. Step 4 (When no tables available): Create a Reservation with status = 'waitlisted' and notify the guest they are on the waitlist.

**Expected result:** Reservations are created with automatic table assignment, confirmation emails, and waitlist handling for full slots.

### 4. Send confirmation and reminder emails

After creating a confirmed reservation, send an email with: restaurant name, date, time, party size, table assignment, and special requests noted. Include a cancellation link (URL to a cancel page with the reservation ID as parameter). Set up a scheduled backend workflow to send a reminder email 24 hours before the reservation date using the same pattern as the email reminders tutorial.

**Expected result:** Guests receive immediate confirmation and a reminder email 24 hours before their reservation.

### 5. Build the restaurant admin dashboard

Create an 'admin-reservations' page showing today's reservations in a Repeating Group sorted by time slot. Display guest name, party size, table, time, and status. Add buttons for: 'Seat' (status → completed), 'No Show' (status → no_show), 'Cancel' (status → cancelled, which triggers waitlist promotion). Add a calendar view showing reservation counts per day for the upcoming week.

**Expected result:** Restaurant staff can view, manage, and update reservation statuses from an admin dashboard.

### 6. Implement waitlist promotion on cancellation

When a reservation is cancelled, check for waitlisted reservations for the same date and time. If found, promote the first waitlisted reservation: change its status to 'confirmed', assign the now-available table, and send a confirmation email to the guest notifying them their waitlist reservation has been confirmed.

**Expected result:** Cancelled reservations automatically promote the next person on the waitlist with a confirmation notification.

## Complete code example

File: `Workflow summary`

```text
RESTAURANT RESERVATIONS — WORKFLOW SUMMARY
=============================================

DATA TYPES:
  Table: name, capacity, location
  Reservation: table, guest_name, guest_email, guest_user,
    party_size, date, time_slot, status, special_requests
  Option Set: TimeSlot (5:00 PM, 5:30 PM, 6:00 PM...)

AVAILABILITY CHECK:
  For each TimeSlot:
    Count tables where capacity >= party_size
    Minus count reservations for date + time_slot
    Available = total tables - booked tables > 0

BOOKING WORKFLOW:
  Search available table (capacity >= size, no booking)
  If available: Create Reservation (confirmed), email
  If full: Create Reservation (waitlisted), notify

CANCELLATION + WAITLIST:
  Cancel → status = cancelled
  Search waitlisted for same date+time
  Promote first: status = confirmed, assign table, email

ADMIN DASHBOARD:
  Today's reservations sorted by time
  Actions: Seat, No Show, Cancel
  Calendar view for upcoming week
```

## Common mistakes

- **Not checking for conflicting reservations before creating** — Two guests can book the same table at the same time, creating double-bookings Fix: Always search for existing reservations on the target table, date, and time before confirming a new one
- **Assigning tables without checking capacity against party size** — A party of 6 gets assigned to a 2-person table, creating an impossible seating situation Fix: Add capacity >= party_size as a constraint when searching for available tables
- **Not handling the waitlist when cancellations occur** — Cancelled slots remain empty while waitlisted guests never get notified of availability Fix: Trigger a waitlist promotion workflow every time a reservation is cancelled

## Best practices

- Check both table capacity and existing bookings when determining availability
- Send confirmation emails immediately and reminder emails 24 hours before
- Auto-promote waitlisted guests when cancellations open up slots
- Set a maximum future booking window (e.g., 30 days) to prevent excessive advance booking
- Add special requests field for dietary needs, celebrations, or seating preferences
- Track no-shows to identify unreliable guests
- Allow buffer time between reservations (e.g., 2 hours per booking) for table turnover

## Frequently asked questions

### Can guests book without creating an account?

Yes. Use the guest_name and guest_email fields instead of requiring authentication. Optionally let logged-in users auto-fill from their profile.

### How do I handle different time slots for different days?

Create a 'Schedule' Data Type linking days of the week to available time slots. Filter displayed slots based on the selected date's day of the week.

### Can I set blackout dates (holidays, private events)?

Yes. Create a 'BlackoutDate' Data Type. Before showing availability, check if the selected date is in the blackout list and show a message if so.

### How do I handle walk-in guests alongside reservations?

Reserve some tables as 'walk-in only' by excluding them from the online booking system. Staff can create reservations manually from the admin dashboard for walk-ins.

### Can RapidDev build a complete restaurant management system in Bubble?

Yes. RapidDev can build reservation systems, menu management, order processing, staff scheduling, and customer relationship features in Bubble.

---

Source: https://www.rapidevelopers.com/bubble-tutorial/build-a-restaurant-reservation-system-in-bubble
© RapidDev — https://www.rapidevelopers.com/bubble-tutorial/build-a-restaurant-reservation-system-in-bubble
