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

  1. Upload the booking folder to extensions/addons/booking/.
  2. Go to Admin > Add-ons and click Activate next to Booking (Reservations).
  3. The add-on runs its migration automatically, creating 2 tables:
    • booking_services — bookable services with pricing and capacity rules
    • booking_reservations — guest reservations with dates, status, and payment info
  4. 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
  5. Assign the new permissions to the appropriate admin roles under Admin > Roles & Permissions.
  6. 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:

  1. Select Service — browse and choose from available services.
  2. Choose Dates — pick check-in and check-out dates using the date picker. The availability API validates dates in real time.
  3. Guest Details — enter the number of guests and contact information.
  4. 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

  1. Download the latest version of the booking add-on.
  2. Replace the extensions/addons/booking/ folder with the new version.
  3. Go to Admin > Add-ons — the system detects the new version automatically.
  4. If a database migration is included, it runs on the next page load or when you click Update.
  5. Clear the cache from Admin > Settings > Cache or run php artisan cache:clear.
Tip: Always back up your database before updating any add-on.

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_payment is 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.log for mail errors.

CAPTCHA not showing on the booking form

  • Enable booking_captcha_enabled in booking settings.
  • Ensure the site-wide CAPTCHA driver is configured in Admin > Settings > Security.

Was this article helpful?

Thank you for your feedback!

Still need help? Create a support ticket

Create a Ticket