Search by place and date, reserve without double-booking, pay out to hosts after the stay.
What is on this board
Parts
- Guest Web app
- Host Web app
- Search Service
- Listings Search index · Elasticsearch
- Places Maps / geocoding API · Mapbox
- Reservations Service
- Reservations Relational DB · PostgreSQL
- Listings Service
- Photos Object storage · S3
- Thumbnails Media processor
- Payments and payouts Payment provider · Stripe
- Payout after check-in Workflow engine · Temporal
- Messages Service
- The database says no Decision record
How they connect
- Guest → Search: Lisbon, 3 nights
- Search → Listings: query
- Search → Places: where is it?
- Guest → Reservations: reserve
- Reservations → Reservations: SQL
- Reservations → Payments and payouts: authorize
- Reservations → Payout after check-in: start
- Payout after check-in → Payments and payouts: pay the host
- Host → Listings: edit
- Listings → Listings: reindex
- Listings → Photos: upload
- Photos → Thumbnails: new photo
- Guest → Messages: ask the host
Notes and decisions
- Reservations: A date range per listing, no overlaps
- Reservations: An exclusion constraint on the dates
- The database says no: An exclusion constraint on (listing, dates) makes a double booking impossible, whatever the code does.
More like this
News feed, like TwitterFan-out on write or on read? Timelines in a cache, the celebrity problem, and how a post reaches millions of followers.
News feed, like TwitterFan-out on write or on read? Timelines in a cache, the celebrity problem, and how a post reaches millions of followers.
URL shortener, like BitlyThe first system design interview question: key generation, heavy reads, a cache in front, and click analytics off the request path.