Build a vehicle rental booking system in Bubble with a vehicle inventory featuring availability calendars, date range selection for pickup and return, dynamic pricing calculation, booking confirmation workflows, and return check-in tracking. This covers the full rental lifecycle from browsing to return.
Overview: Building a Vehicle Rental Booking System in Bubble
This tutorial walks you through building a vehicle rental system in Bubble. You will create data types for vehicles and bookings, build a catalog with availability filtering, implement date range selection with pricing calculation, create booking and confirmation workflows, and add return check-in tracking.
Prerequisites
- A Bubble account with an existing app
- Basic understanding of Bubble data types and workflows
- Familiarity with Repeating Groups and date pickers
- Optional: Stripe plugin for payment processing
Step-by-step guide
Create the rental data types
Create the rental data types
Go to the Data tab. Create Vehicle with fields: name (text), type (Option Set: Car, SUV, Van, Truck), daily_rate (number), image (image), description (text), and is_active (yes/no). Create Booking with fields: vehicle (Vehicle), renter (User), pickup_date (date), return_date (date), total_price (number), status (Option Set: Reserved, Active, Returned, Cancelled), actual_return_date (date), and stripe_charge_id (text).
Expected result: Vehicle and Booking data types exist with all required fields.
Build the vehicle catalog with availability filter
Build the vehicle catalog with availability filter
Create a vehicle listing page with two Date Pickers for pickup and return dates. Add a Repeating Group showing Vehicles where is_active = yes. To check availability, add a constraint or filter that excludes vehicles with overlapping bookings. The availability check: Do a search for Bookings where vehicle = this vehicle AND status is not Cancelled AND pickup_date < desired return date AND return_date > desired pickup date. If count = 0, the vehicle is available.
Pro tip: Display an Available or Booked badge on each vehicle card using a conditional that runs the availability search.
Expected result: Users can browse vehicles and see which ones are available for their selected dates.
Calculate pricing and show booking summary
Calculate pricing and show booking summary
On the vehicle detail page, display the selected dates and calculate the total: (return_date - pickup_date) in days * Vehicle's daily_rate. Show a booking summary with vehicle name, dates, number of days, daily rate, and total price. Add a Confirm Booking button below the summary.
Expected result: Users see a clear pricing breakdown before confirming their booking.
Create the booking confirmation workflow
Create the booking confirmation workflow
When Confirm Booking is clicked: Action 1: Create a new Booking with vehicle, renter = Current User, dates, total_price, status = Reserved. Action 2: If using Stripe, trigger payment for the total_price. Action 3: On payment success, update Booking status to Reserved and store the stripe_charge_id. Action 4: Navigate to a confirmation page showing booking details and a confirmation number (the Booking's unique ID).
Expected result: A booking is created, payment is processed, and the user sees a confirmation.
Build the return check-in process
Build the return check-in process
Create an admin page for managing returns. Show Active bookings in a Repeating Group. Each cell has a Check In button. The workflow: Make changes to Booking — status = Returned, actual_return_date = Current date/time. If the return is late (actual_return_date > return_date), calculate additional charges: (actual_return_date - return_date) in days * Vehicle's daily_rate * 1.5 (late fee multiplier). For complex fleet management with maintenance tracking and multi-location support, consider working with RapidDev.
Expected result: Staff can check in returned vehicles and apply late fees when applicable.
Complete working example
1VEHICLE RENTAL SYSTEM — WORKFLOW SUMMARY2==========================================34DATA TYPES:5 Vehicle6 - name (text), type (Option Set), daily_rate (number)7 - image (image), description (text), is_active (yes/no)8 Booking9 - vehicle (Vehicle), renter (User)10 - pickup_date (date), return_date (date)11 - total_price (number)12 - status (Option Set: Reserved/Active/Returned/Cancelled)13 - actual_return_date (date), stripe_charge_id (text)1415AVAILABILITY CHECK:16 Vehicle is available when:17 Search for Bookings (vehicle=this, status≠Cancelled,18 pickup_date < desired_return, return_date > desired_pickup)19 :count is 02021PRICING:22 days = (return_date - pickup_date) in days23 total = days * Vehicle's daily_rate24 late_fee = extra_days * daily_rate * 1.52526WORKFLOW 1: Confirm booking27 Action 1: Create Booking (status=Reserved)28 Action 2: Stripe Checkout (total * 100)29 Action 3: Navigate to confirmation3031WORKFLOW 2: Check in return32 Action 1: Make changes to Booking33 status = Returned34 actual_return_date = Current date/time35 Action 2 (if late): Calculate and charge late feeCommon mistakes when building a vehicle rental booking system in Bubble.io: Step-by-Step Guide
Why it's a problem: Not checking for booking date overlaps
How to avoid: Always check for existing bookings with overlapping date ranges before allowing a new booking.
Why it's a problem: Using equals instead of range comparison for date availability
How to avoid: Use the overlap formula: existing.pickup < desired.return AND existing.return > desired.pickup.
Why it's a problem: Not handling cancelled bookings in availability checks
How to avoid: Exclude Cancelled bookings from availability searches by adding status is not Cancelled to the constraint.
Best practices
- Use date range overlap logic for accurate availability checking
- Exclude cancelled bookings from availability searches
- Calculate pricing dynamically from the date range and daily rate
- Store the stripe_charge_id for refund processing
- Track actual return dates separately from planned return dates
- Apply late fee multipliers for overdue returns
- Add Privacy Rules so renters can only see their own bookings
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I am building a vehicle rental system in Bubble.io. I need a vehicle catalog with availability checking by date range, pricing calculation, booking with Stripe payment, and a return check-in process. What data types and workflows do I need?
Build a vehicle rental booking system. Create Vehicle and Booking data types. Add availability filtering by date range, pricing calculation, Stripe payment, and a return check-in workflow with late fee handling.
Frequently asked questions
Can I add multiple pickup locations?
Yes. Create a Location data type and add a location field to Vehicle. Let users filter by pickup location and show only vehicles at their selected location.
How do I handle security deposits?
Create a pre-authorization with Stripe (charge but do not capture) at booking time. Capture the deposit amount if there is damage, or release it when the vehicle is returned in good condition.
Can I add vehicle maintenance tracking?
Yes. Create a MaintenanceRecord data type linked to Vehicle. Block bookings when a vehicle has upcoming maintenance scheduled.
Can RapidDev help build a fleet management platform?
Yes. RapidDev specializes in Bubble development and can build comprehensive fleet management with multi-location support, maintenance scheduling, insurance tracking, and analytics dashboards.
How do I handle same-day bookings?
Set a minimum booking lead time (e.g., 2 hours) by checking that pickup_date is at least 2 hours after Current date/time before allowing the booking.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation