🎟️ Booking & Checkout

Core Booking Engine

End-to-end reservations from availability check to payment confirmation.

Shipped December 13, 2025

✦ Key takeaways

  • Availability check, quote generation, payment capture, and confirmation are one atomic chain — not four separate integrations you bolt together.
  • Prices are locked to an immutable quote version at checkout time. No post-booking surprises on either side.
  • Works for both fixed-slot tours (8am kayak trip, 20 seats) and flex-duration charters (2–8 hour private boat, guest-banded pricing).

The reservation software you’re using today probably started life as a ticketing tool and bolted on payments later. You can feel it: the seams between availability, pricing, and Stripe are where errors live and double-bookings happen.

Freebo’s booking engine was designed the other way around. Availability, pricing, payment capture, and confirmation are one atomic transaction. Either the whole thing succeeds — asset reserved, quote locked, payment captured, confirmation sent — or none of it does.

< 800ms Median end-to-end booking time
0 Orphaned holds from partial failures
2 Product types supported (fixed slot + flex duration)
  1. Customer selects date, time, and guest count

    Freebo checks live asset availability and returns the next open slot or window for the requested configuration.

  2. Quote is generated and locked

    A pricing calculation runs against the current tier, promo codes, taxes, and fees. The result is written as an immutable quote version — it won’t change if you later edit the product’s pricing.

  3. Stripe payment intent is created

    Freebo creates a PaymentIntent against the quote’s grand total. The customer completes payment via Stripe Elements — card data never touches Freebo’s servers.

  4. Reservation is confirmed

    On payment success, the reservation is created, the asset slot is marked booked, confirmation emails fire, and the ledger event is queued — all before the success screen appears.

The checkout experience

The engine is only half the story — the guest still has to get through checkout. Freebo’s public checkout shows an itemized price breakdown: base price, add-ons, and a single combined taxes-and-fees line, so nothing about the total is a mystery. When a product takes a deposit, a deposit-or-full toggle lets the guest choose how much to pay now, with the balance due date shown right alongside it.

Booking summaries render times in the location’s own timezone, so a 4:00 PM departure reads as 4:00 PM no matter where the guest is browsing. Product photos are delivered responsively for sharper images, and the checkout page recovers gracefully from slow or unreliable network conditions instead of stalling.

What happens if Stripe payment fails after the slot is held?
Freebo holds the slot only for the duration of the payment intent session. If payment fails or the session expires, the hold is released automatically — no manual cleanup required.
Can I use the booking engine for both tours and private charters on the same account?
Yes. Fixed-slot products (tours, classes, excursions) and flex-duration products (private charters, yacht rentals) are both supported on the same operator account under different product kinds.