AI-Powered Hospitality
Pacific Motel
A single inventory system with a voice agent bolted onto the same source of truth — built to stop a 150-room property from selling the same room twice.

Challenge
Pacific Motel runs 150 rooms across a single property. Rooms, rates, and arrivals were spread across a whiteboard, a spreadsheet, and a booking inbox, with nothing reconciling between them. A walk-in could be turned away from a room that was actually free, and an OTA could confirm a room that had just been sold at the desk — an average of 3.8 times a month, roughly 32 times a year ending in a paid guest relocation to another property. Overnight, a single porter covered the desk, security rounds, and the phone; of 34 after-hours calls a night, only about 11% ever got a response, and that was a next-day callback. Housekeeping worked from a printed sheet stale by mid-morning, so a cleaned room took 41 minutes on average to register as ready. Night audit ran 95 minutes by hand, with month-end revenue rebuilt manually.
Approach
We started from the failure mode that actually costs a property its rating: two channels confirming the same last room within milliseconds of each other. Rather than patching the existing spreadsheet-plus-inbox setup, we rebuilt availability as a single inventory ledger — never a status field on a room — so every booking write takes a row-level lock on the date range it wants and cannot collide with a concurrent sale. Rates were redesigned to be derived at query time rather than stored on the booking, so every channel (direct site, OTAs, voice agent) asks the same rate engine the same question and parity holds by construction. On top of that ledger, we layered a voice agent constrained to only ever quote what the rate engine returns and only ever hold what the ledger grants — a soft lock with a short expiry so abandoned calls release stock automatically.
Solution
Every booking write is idempotent and keyed, so a retried OTA webhook or a double-tapped confirm button produces exactly one booking. A rule engine resolves base rate, season, length-of-stay discounts, and day-of-week loading at query time, and applies restrictions like minimum stay and closed-to-arrival/departure. The channel connector runs two-way — outbound rate and availability deltas, inbound reservation webhooks — with a scheduled reconciliation job that raises a variance report rather than silently overwriting, since a silent overwrite here means a guest arrives to no room. The voice agent runs on a streaming pipeline (telephony leg, streaming speech-to-text, an intent layer with function calls against live availability and rate APIs, speech synthesis back down the same leg) with barge-in support, holding median response time to 1.4 seconds while still making a real API call per turn. It resolves 82% of calls without a human; the remaining 18% transfer with the transcript attached. Booking events fan out to guest messaging, the housekeeping queue, the accounting export, and reporting, so adding a new downstream consumer never touches the booking path itself. The ledger stores instants with the property's timezone applied at report time, so night audit and revenue reporting hold correctly across daylight saving. The housekeeping app is offline-tolerant, queuing status changes locally and reconciling on reconnect across uneven in-building coverage.
Results
Occupancy
71.4%→78.2%
RevPAR
NZD $129.95→NZD $152.49
Double bookings
3.8/month→0
Guest relocations
32/year→0
After-hours calls answered
11%→94%
Direct booking share
28%→37%
Room turn time to front desk
41 min→26 min
Night audit
95 min→12 min
Front-office admin
27.5 hrs/week→8.0 hrs/week
Annual value NZD $278,500 (OTA commission saved, after-hours bookings captured, admin labour redeployed, relocation costs avoided) against a NZD $145,000 build and NZD $38,000 annual running cost — 7.2-month payback
Product Screens






Ready to Build Something Great?
Book a free strategy session and get a tailored roadmap from our experts — no commitment required.