hotel booking pages load third-party widgets
Laas is a reference rebuild of a heritage boutique hotel site. It lets guests book directly at the listed rate. The flow uses a channel-manager widget, review badge, live-availability iframe, and upsell banner, each adding scripts and a third-party service.
On a mid-range phone over cellular, these pages can take 8+ seconds before the booking flow responds. Iframes can repeat the hotel name or change the price between steps.
direct booking as an edge-native product
Laas serves the hotel story, room catalog, gallery, dining room, and contact paths as static HTML at the edge. The reservation drawer is a five-step flow that reads room data, applies the direct-booking discount, prices add-ons, and issues a folio.
After confirmation, guests can download a calendar event and print the folio from the same page.
the payload budget as a CI gate
The page’s selling point is quantitative, so it is enforced quantitatively. The build pipeline runs a budget check that gzips the total client payload and fails the build above 5 KB. At the moment of delivery the site sits at 2.99 KB gzipped — the booking island plus the gallery lightbox, nothing else.
Two self-hosted variable fonts (~117 KB) are the only other assets, and they are the price of the design: a display serif with true italics over a workhorse sans, served from the same edge as the HTML. There is no analytics suite, no A/B framework, no chat widget — the colophon states the payload story in plain numbers and the CI gate keeps it true.
a design system that documents itself
The visual world — deep pine section fields, a single moss accent, stamped mono data labels, square corners, 1px hairlines, real dark mode — is specified in a DESIGN.md at the repository root with machine-readable tokens and a sidecar for what the token schema cannot hold. Any screen added to the property stays on-brand by reading the spec, and the detector ignores are committed with reasons, so “why is this color allowed” has a durable answer in the repo.
the numbers
| Metric |
Widget-laden hotel site |
Laas direct-booking rebuild |
| Client JavaScript (initial) |
500–1000 KB |
2.99 KB gz |
| Client-JS budget |
none |
5 KB gz, CI-enforced |
| Hydration |
full-page framework |
zero (2 islands) |
| Booking transaction fee |
15–25% of direct stay |
none |
| Time to interactive (mobile) |
8s+ |
sub-second (static HTML) |
| Confirmation |
session iframe |
folio + .ics + print |