Booking (Reservations)
Add multi-day reservation functionality to your Larapen site. Manage bookable services with pricing, availability checks, and an interactive reservation calendar — with optional payment integration.
Service Management
Create bookable services with per-night pricing, guest limits, minimum/maximum stay rules, and translatable descriptions.
Reservation Workflow
Guided booking wizard: select a service, pick check-in/check-out dates, enter guest details, and confirm the reservation.
Interactive Calendar
Admin calendar view showing all reservations at a glance. Front-end availability API for real-time date checking.
Payment Integration
Optional payment requirement before confirmation. Supports Stripe, PayPal, Paddle, and MoMo via the Payable interface.
Email Notifications
Configurable notifications for clients and admins on new reservations, status changes, and cancellations.
Multi-language Support
Service names, slugs, and descriptions are translatable. All UI strings use the translation system.
Use Cases
- Hotel or B&B — Guests reserve rooms for one or more nights, choosing check-in and check-out dates with per-night pricing.
- Venue Rental — Event organizers book a conference hall, banquet room, or outdoor space for multi-day events.
- Equipment Rental — Customers reserve heavy machinery, cameras, or vehicles for specific date ranges.
- Vacation Rental — Property owners list holiday homes or apartments with minimum-stay rules and seasonal pricing.
- Campground or RV Park — Campers reserve a site for a specific number of nights with guest-count limits.
Requirements
- Larapen 1.x or later
- PHP 8.3+
- MySQL 8+
- At least one payment add-on installed (Stripe, PayPal, Paddle, or MoMo) if you want to require payment before confirmation
Installation
- Upload the
bookingfolder toextensions/addons/booking/. - Go to Admin > Add-ons and click Activate next to Booking (Reservations).
- The add-on runs its migration automatically, creating 2 tables:
booking_services— bookable services with pricing and capacity rulesbooking_reservations— guest reservations with dates, status, and payment info
- The add-on seeds 9 permissions:
- Services:
booking-service-list,booking-service-show,booking-service-create,booking-service-update,booking-service-delete - Reservations:
booking-reservation-list,booking-reservation-show,booking-reservation-update,booking-reservation-delete
- Services:
- Assign the new permissions to the appropriate admin roles under Admin > Roles & Permissions.
- Visit Admin > Booking > Settings to configure the add-on before creating services.
Configuration
Settings
All settings are stored in the settings table and managed from Admin > Booking > Settings.
| Key | Description | Default |
|---|---|---|
booking_enabled |
Enable or disable the entire booking feature | 1 |
booking_services_per_row |
Number of service cards per row on the front-end (2, 3, or 4) | 3 |
booking_require_payment |
Require payment before a reservation is confirmed | 0 |
booking_advance_days |
Maximum number of days in advance a reservation can be made | 90 |
booking_min_advance_hours |
Minimum hours before check-in that a reservation must be placed | 24 |
booking_cancellation_policy |
Cancellation policy text shown to guests during booking | — |
booking_captcha_enabled |
Enable CAPTCHA on the booking form | 0 |
booking_service_images_enabled |
Allow image uploads on services via the media picker | 1 |
booking_service_step_title |
Custom title for the service selection step in the wizard | — |
Notification Settings
Notification toggles are managed from the centralized notification settings page at Admin > Settings > Notifications.
| Key | Description | Default |
|---|---|---|
notify_admin_on_new_reservation |
Send email to admin when a new reservation is placed | 1 |
notify_client_on_reservation |
Send confirmation email to the guest after booking | 1 |
notify_client_on_status_change |
Notify the guest when their reservation status changes | 1 |
Admin: Services
Service List
Navigate to Admin > Booking > Services to see all bookable services. The list shows the service name, price per night, guest limit, capacity, status, and action buttons. Use the search bar to filter by name.
Create / Edit a Service
Click Add New or the edit button on an existing service. The form includes:
- Name (translatable) — the display name of the service
- Slug (translatable) — URL-friendly identifier, auto-generated from the name
- Description (translatable) — rich-text description shown on the front-end
- Price per Night — nightly rate for the service
- Currency — currency code (e.g., USD, EUR)
- Min. Nights — minimum stay length required
- Max. Nights — maximum stay length allowed
- Max. Guests — maximum number of guests per reservation
- Max. Capacity — total number of concurrent reservations the service can accept
- Active — toggle to show or hide the service on the front-end
Service Images
When booking_service_images_enabled is turned on, the service form shows the media picker.
Upload one or more images to showcase the service. The first image is used as the thumbnail in listings.
Images are stored via Larapen's media system and support resizing and format conversion.
Admin: Reservations
Reservation List
Go to Admin > Booking > Reservations to view all reservations. The list displays the guest name, service, check-in/check-out dates, number of guests, total price, status, and action buttons. Filter by status (pending, confirmed, cancelled, completed) or search by guest name.
Reservation Detail & Status
Click a reservation to view its full details: guest information, service booked, dates, guest count, total price, payment status, and a timeline of status changes. Use the status dropdown to update the reservation status. Available statuses:
- Pending — newly created, awaiting confirmation or payment
- Confirmed — reservation accepted and confirmed
- Cancelled — reservation cancelled by admin or guest
- Completed — stay has finished
Status changes trigger notification emails if notify_client_on_status_change is enabled.
Calendar View
The calendar view provides a visual overview of all reservations across services. Each reservation is displayed as a bar spanning its check-in to check-out dates. Use the service filter to focus on a specific service. Click any reservation bar to jump to its detail page.
Admin: Settings
Access all booking settings from Admin > Booking > Settings. Settings are grouped into tabs:
General
- Enable Booking — master toggle to enable or disable the entire booking feature site-wide.
Display
- Services per Row — number of service cards per row on the booking page (2, 3, or 4).
- Service Step Title — custom heading for the service selection step in the booking wizard.
- Service Images — enable or disable image uploads on services.
Payment
- Require Payment — when enabled, guests must pay before the reservation is confirmed. Requires at least one payment add-on to be active.
Scheduling
- Advance Days — how far into the future guests can book (e.g., 90 days).
- Min. Advance Hours — earliest a reservation can start relative to the current time (e.g., 24 hours from now).
Cancellation Policy
- Policy Text — free-text cancellation policy displayed during the booking process and on confirmation pages.
Notifications
Notification toggles for the booking add-on are managed centrally at Admin > Settings > Notifications. See the Notifications section below for details on each notification type.
CAPTCHA
- Enable CAPTCHA — adds CAPTCHA verification to the booking form to prevent spam reservations. Uses the site-wide CAPTCHA driver configured in Security settings.
Front-end: Booking Experience
Booking Page
The main booking page displays all active services in a card grid layout.
Each card shows the service name, description excerpt, price per night, and a Book Now button.
The number of cards per row is controlled by the booking_services_per_row setting.
Booking Wizard
The booking wizard guides guests through the reservation process in clear steps:
- Select Service — browse and choose from available services.
- Choose Dates — pick check-in and check-out dates using the date picker. The availability API validates dates in real time.
- Guest Details — enter the number of guests and contact information.
- Review & Confirm — summary of the reservation with total price calculation before submission.
Availability API
The front-end uses an AJAX availability endpoint to check whether a service is available for the selected date range. It validates against the service's maximum capacity, minimum/maximum night rules, and advance booking limits. Unavailable dates are visually disabled in the date picker.
Confirmation Page
After submitting a reservation, guests see a confirmation page with their reservation reference number, service details, dates, guest count, and total price. If payment is not required, the reservation status is shown as pending.
Payment Checkout
When booking_require_payment is enabled, the guest is redirected to a checkout page after confirmation.
The checkout page displays the reservation summary and available payment gateways.
Payment is processed through the installed payment add-on (Stripe, PayPal, Paddle, or MoMo).
On successful payment, the reservation status is automatically updated to Confirmed.
My Reservations
Logged-in guests can view their reservations from the My Reservations page. The page lists all past and upcoming reservations with status, dates, and service details. Guests can cancel pending reservations if the cancellation policy allows it.
Notifications
The booking add-on provides 3 notification types, all managed from Admin > Settings > Notifications:
| Notification | Recipient | Trigger | Setting Key |
|---|---|---|---|
| New Reservation (Admin) | Admin | A guest submits a new reservation | notify_admin_on_new_reservation |
| Reservation Confirmation | Guest | A reservation is successfully placed | notify_client_on_reservation |
| Status Change | Guest | Reservation status is updated (confirmed, cancelled, completed) | notify_client_on_status_change |
Updating
- Download the latest version of the booking add-on.
- Replace the
extensions/addons/booking/folder with the new version. - Go to Admin > Add-ons — the system detects the new version automatically.
- If a database migration is included, it runs on the next page load or when you click Update.
- Clear the cache from Admin > Settings > Cache or run
php artisan cache:clear.
Troubleshooting
Booking page shows "Feature disabled"
Make sure booking_enabled is set to 1 in Admin > Booking > Settings. Also verify the add-on is activated in Admin > Add-ons.
Services not appearing on the front-end
- Check that the service is marked as Active.
- Ensure the service has a price per night and at least a name in the current language.
- Clear the site cache and reload the page.
Dates appear unavailable when they should be open
- Verify the service's Max. Capacity is not already reached for those dates.
- Check the Advance Days setting — dates beyond the limit are disabled.
- Ensure Min. Advance Hours is not preventing same-day or next-day bookings.
Payment not working
- Confirm
booking_require_paymentis enabled. - Verify at least one payment add-on (Stripe, PayPal, Paddle, or MoMo) is installed and activated.
- Check the payment add-on's settings for correct API keys and configuration.
Notification emails not sending
- Verify the relevant notification toggle is enabled in Admin > Settings > Notifications.
- Check mail settings in Admin > Settings > Mail — test with the "Send Test Email" button.
- Review the Laravel log at
storage/logs/laravel.logfor mail errors.
CAPTCHA not showing on the booking form
- Enable
booking_captcha_enabledin booking settings. - Ensure the site-wide CAPTCHA driver is configured in Admin > Settings > Security.