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.
Prerequisites
- 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
Create the reservation Data Types
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.
Build the reservation booking form
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.
Create the reservation with conflict checking
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.
Send confirmation and reminder emails
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.
Build the restaurant admin dashboard
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.
Implement waitlist promotion on cancellation
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 working example
1RESTAURANT RESERVATIONS — WORKFLOW SUMMARY2=============================================34DATA TYPES:5 Table: name, capacity, location6 Reservation: table, guest_name, guest_email, guest_user,7 party_size, date, time_slot, status, special_requests8 Option Set: TimeSlot (5:00 PM, 5:30 PM, 6:00 PM...)910AVAILABILITY CHECK:11 For each TimeSlot:12 Count tables where capacity >= party_size13 Minus count reservations for date + time_slot14 Available = total tables - booked tables > 01516BOOKING WORKFLOW:17 Search available table (capacity >= size, no booking)18 If available: Create Reservation (confirmed), email19 If full: Create Reservation (waitlisted), notify2021CANCELLATION + WAITLIST:22 Cancel → status = cancelled23 Search waitlisted for same date+time24 Promote first: status = confirmed, assign table, email2526ADMIN DASHBOARD:27 Today's reservations sorted by time28 Actions: Seat, No Show, Cancel29 Calendar view for upcoming weekCommon mistakes when building a Restaurant Reservation System in Bubble
Why it's a problem: Not checking for conflicting reservations before creating
How to avoid: Always search for existing reservations on the target table, date, and time before confirming a new one
Why it's a problem: Assigning tables without checking capacity against party size
How to avoid: Add capacity >= party_size as a constraint when searching for available tables
Why it's a problem: Not handling the waitlist when cancellations occur
How to avoid: 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
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I want to build a restaurant reservation system in Bubble.io with table management, time slot availability, party size limits, confirmation emails, and a waitlist. What Data Types and workflows do I need?
Build a restaurant reservation system. Create Table and Reservation data types. Show available time slots based on table capacity. Let guests book with confirmation emails. Add an admin dashboard for staff and a waitlist that auto-promotes when cancellations happen.
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.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation