The starting point
The client runs a guest benefits programme with local businesses: hotels and holiday rental hosts pay for passes their guests use during a stay. For that to work at scale, passes had to appear from real bookings automatically, reach guests through the member app, and stay correct when a booking is moved, resized or cancelled — with nobody re-typing data between systems.
What we were responsible for
Readymade designed and built the backend platform: the property management system integration, booking processing, the guest pass and claim API, delivery to the member app, the cloud infrastructure and the deployment pipeline. The member app itself is run by the client's own team.
What we built
-
Booking intake
Signed webhooks from the host's property management system. Each booking is stored together with an outbox record in one transaction, so a booking can't be half-processed or lost between steps.
-
Guest pass preparation
Passes are prepared from the booking — one per eligible guest — and date changes, guest count changes and cancellations flow through as versioned updates.
-
Claim API for the member app
The member app looks up and claims passes through a small API with hashed codes, rate limiting and idempotent requests, so a retry never creates a second claim.
-
Sync back to the app
A queue-driven worker delivers pass updates to the member app, with retries, dead-letter queues and a scheduled safety net that re-sends anything that didn't arrive.
Why it was hard
-
Bookings change after they are created
Dates, guest numbers and cancellations must update passes without duplicating them.
-
Three systems fail independently
The property system, the platform and the member app each have their own failures, so every hand-off is queued, retried and observable.
-
Guests are reached only through the client's app
The platform never contacts guests directly; it serves the member app's backend.
The result
The booking-to-pass pipeline, the claim API and the sync to the member app were delivered with automated tests, separate development and production stages, and preview environments for every change.
- Booking in the host's system The property management system sends a signed webhook.
- Booking stored safely Booking and outbox record are committed together.
- Passes prepared One pass per eligible guest, versioned.
- Guest claims in the app Lookup and claim through the API, idempotent.
- App kept in sync Queued delivery with retries and a safety net.
Booking changed or cancelled The same path carries a new version of the passes.