A Direct Booking Engine That Sells Packages, Long Stays and Specific Rooms
Frontdesko's free booking engine can sell a package as one all-in price, discount longer stays, say why a search found no rooms, and open on one room from a link on your website. Below: one illustrative day, then the settings and limits.
By the Frontdesko team · Last updated: October 31, 2026
One Friday at a Guesthouse That Sells a Sauna Weekend
Illustrative scenario. A 9-room guesthouse with a wood-fired sauna is a made-up property used to show the screens in order. It is not a customer story, and no figures here are real results.
The prices below are made up, but the arithmetic is the one the booking engine uses.
The package arithmetic
With a room at 59 a night, sauna at 12 per guest once per stay, two guests and a 6.50 per room-night discount from two nights:
The discount applies only when the package is booked. A guest who books the same room without the package pays the ordinary rate.
How Does a Package Sell at One Total Price?
A package is a rate adjustment plus optional services. In the widget it is offered per room as a single choice beside Room only, always with the full stay price and an "Includes" line. The guest never sees how the price splits between room and services. Staff do.
- Each service is priced per room or per person, once per stay or every night. A cost of 0 lists the service as included at no extra charge.
- Packages are opt-in. Show in booking engine is off by default.
- A package with a promo code only appears to guests who enter the code or arrive by a link that carries it.
- Advance Booking Days hides a package online when arrival is closer than that many days.
- Multi-room carts are re-totalled with the server's per-room and per-guest parts, and the booking payload carries the package code so promo-only packages validate before anything is created.
- A link such as
?package=SAUNAon your booking page, ordata-package="SAUNA"on the embed, pre-selects the package and shows a banner. If the offer is not available for the dates, the banner says so and the guest can still book a room.
How Do Long-Stay Discounts Work?
There are two kinds. They are set in different places and behave differently, which matters if you sell both room-only and package stays.
Staff see the same discount: the Quick Reservation price preview applies the rate-plan tier and the package discount the same way the server does, so a quoted price and a saved price agree.
How Does the Widget Explain a Search With No Rooms?
The availability search now returns the reason each room type was held back, not just a shorter list. The reasons the rates engine can report are minimum stay, maximum stay, closed to arrival and closed to departure. Group too large and no rooms left are worked out separately.
Maximum stay, closed to departure, party size and sold-out cases are reported by the server but the widget shows only the two messages above.
How Do You Open the Widget on One Room, Currency or Date Range?
The embed loader reads these attributes. Each can be overridden by the same value in the page's query string, so a "Book this room" button on your site can be a plain link.
Currency is chosen in this order: the explicit attribute or link, then the guest's own earlier choice, then the hotel's default widget currency, then a guess from the browser. Language follows the same pattern with the hotel's default widget language.
What Does the Website Widget Page Control?
- Appearance & defaults: theme (Modern, Classic, Minimal, Elegant), primary and secondary colour, default currency and language, an optional after-booking redirect URL, and a Widget active switch that stops new website bookings immediately.
- API key: identifies your hotel to the widget. It is not secret, but regenerating it breaks any snippet still using the old key.
- Get the code: a snippet for Simple HTML, WordPress, Wix or Squarespace with numbered steps, plus optional room-type preselect and prefill currency. Squarespace needs a Business plan or higher for Code Blocks.
- Book this room links: one per room type, with copy and preview.
What Is the Availability Calendar Date Picker?
When a hotel's booking engine is set to calendar mode, step one of the widget is a month grid in place of the standard search form. Two months show side by side on a desktop and one on a phone. Each day shows the lowest nightly rate, or a strikethrough when sold out.
- Room-type chips above the grid switch the grid to one room's own rates and availability. All rooms shows the lowest rate. Changing room type clears any chosen range, since a span valid for all rooms may not be valid for one.
- The chosen room type travels with the search as a preference. Results still list every room, with the previewed one on top and lightly tinted.
- Selection follows the Booking.com pattern: a check-in day needs availability, while a check-out day only needs every earlier night to be free. Same-day and minimum-advance-hours rules and the maximum length of stay apply.
Calendar mode is a per-hotel booking-engine setting and the standard search form is the default. It is not yet a switch on the Website Widget page.
What Does It Not Do?
- Rate-plan long-stay tiers are not pushed to channel managers or OTAs. An OTA calendar cannot express a price that depends on stay length, so the discount appears on your direct booking engine and in staff quotes only.
- Long-stay tiers apply to per-night plans. A flat extra-guest fee, such as an extra bed, is charged on top and is not discounted.
- The package stay-length discount covers the room portion of the package, never room-only bookings.
- The widget does not default its nights selector to a hotel-wide minimum stay. The explanation appears after a search instead.
- Only minimum stay and closed-to-arrival get a specific empty-search message (see above).
- Calendar mode is not yet self-serve on the Website Widget page.
- Newer widget phrases are translated best-effort across the 15 widget languages; English is the fallback where a translation is missing.
The POS, the PMS, the direct booking engine and the guest app are free with unlimited rooms. The paid add-ons are the channel manager and the AI assistant, banded by property size: Mint is $35/month for 0-10 rooms, Basil $42/month for 11-30 rooms and Saffron $54/month for 31-50 rooms. See pricing for local currencies. The direct booking engine, including packages, the widget and the calendar, is part of the free tier. For a wider view of the economics see direct booking versus OTA costs and the booking engine page.
Frequently Asked Questions
Can a hotel booking engine sell a package at a single price?
Yes. In the Frontdesko widget each room card offers Room only or the package as one choice, showing the full stay price and an Includes line. The split between room and services stays hidden from the guest and visible to staff. Packages must be switched on with Show in booking engine.
How do I give a discount for longer stays?
Use rate-plan long-stay tiers for any booking on a plan: night ranges with a percentage each. Or set a stay-length discount on a package, which applies only when the package is booked. The widget shows the saving on room cards when a plan tier applies.
Do long-stay discounts reach Booking.com and other channels?
No. Rate-plan long-stay tiers are not pushed to channel managers because an OTA calendar cannot express stay-length prices. They apply to your direct booking engine and staff quotes. Your OTA prices stay as published.
Why does my booking widget say there are no rooms?
It can now say why. If a room type is held back by a minimum stay, the widget states the minimum and offers a one-tap search for that many nights. If every room is closed to arrival that day it suggests another arrival day. Other causes show the general message.
How do I link a button on my website to one specific room?
Open Website Widget in the admin, find the room in the Book this room links table and copy its link. It adds the room code to your booking page as a room_type parameter. The same widget also accepts currency, dates, adults, language and package parameters.
Does the booking engine work on Wix, WordPress and Squarespace?
Yes. The Website Widget page gives a snippet and numbered steps for Simple HTML, WordPress, Wix and Squarespace. Wix needs the embed box at least 1400px tall with scrolling on overflow, and Squarespace needs a Business plan or higher.
What is the availability calendar in the widget?
A month grid that replaces the search form when the hotel enables calendar mode. Each day shows the lowest nightly rate or a strikethrough if sold out, and room-type chips preview one room at a time. It is a per-hotel booking-engine setting and standard search is the default.
Is the direct booking engine free?
Yes. The booking engine, PMS, guest app and POS are free with unlimited rooms. Only the channel manager and AI assistant are paid add-ons, at $35, $42 or $54 a month by property size.
Let Your Own Website Close the Booking
Packages, long-stay discounts and the website widget are part of the free booking engine. See them in a live demo.
Related Guides
Keep reading about direct bookings