The guest portal

Updated on 2026-04-22

Every guest receives a personal portal link that covers three phases of their stay — on a single URL. Pre-arrival, during the stay, and post-stay.

How does the guest get the link?

Automatically. As soon as the booking moves to CONFIRMED (first payment), booking.booking_url is generated via temporarySignedRoute. This link is then included in:

  • The booking-confirmed email (CTA block "Open my portal")
  • The booking-fully-paid email (same CTA)

The link works until 1 day after departure. After that, 403.

When can the guest open the portal?

At the earliest 2 days before arrival (configurable via the bw_prearrival_portal_days setting). Before then → 403 with an explanation of when it does open.

What does the guest see in each phase?

📅 Pre-arrival (2 days before arrival)

  • Payment status — total / paid / outstanding, with a button to pay the remaining balance online
  • Filling in details:
    • Required: first name, last name, mobile (for WhatsApp), address, postcode, city, country
    • Optional: company name, VAT number, emergency contact
    • Data is saved on the Debtor
  • Request a check-in time — with a time picker + optional note. On submit, you receive a Telegram with Approve / Decline buttons. Click → the booking is updated, a badge appears in the Room overview
  • Breakfast choice per morning — always visible, not only from check-in
  • General information (WiFi, parking, check-in hours, check-out)

🏠 During the stay

Everything from pre-arrival stays visible, plus:

  • 🔐 Door unlock via Home Assistant webhooks (front door + individual rooms)
  • 🍺 Honesty bar — guest taps products, they appear live on their invoice
  • 💳 Live invoice with the current balance

👋 Post-stay (until departure + 1 day)

  • ⭐ Google Reviews CTA (link from the google_reviews_url setting)
  • Final invoice + any remaining payment
  • Honesty bar + wellness upsells are hidden (they have left anyway)

Privacy

  • Signed URL — not guessable
  • Expires automatically
  • Can be invalidated per booking by admin (set booking_url = null)
  • The housekeeper has a separate portal that does NOT show guest details (see the Housekeeping section)