Booking Engine — subdomain only (draft)
Proposed winner host: https://{HotelName}.com-bookdirect.com/
HotelName = PascalCase (or alias) matching the property direct-link field — e.g. TsaraLagos.com-bookdirect.com.
v1 Direct Booking (/book/[directSlug]) stays implemented until 301s exist. Same Middleware booking + pay + availability APIs. No second inventory store.
Out of scope as primary (legacy → 301)
| Legacy | Action |
|---|---|
hotel-name.com-bookdirect.com (dashed) | 301 → Pascal alias |
com-bookdirect.com/hotel-name | 301 → subdomain |
com-bookdirect.com/hotel/slug | 301 → subdomain |
com-bookdirect.com/HotelName | 301 → subdomain |
Alias apexes (directbooking.ng, …) | Retire after DNS plan |
MelonQ “copy booking link” emits only the subdomain form.
How to build
- Wildcard
*.com-bookdirect.com+ TLS on the FE host - Edge: reject reserved labels (
www,api,admin); setx-property-slug,x-booking-source=DIRECT_LINK_1_GFBL - Resolve:
GET https://middleware-dev.bookdirect.live/api/v1/bookdirect/properties/slug/{alias}(live explorer already has slug GET) - Rooms → rates →
POST .../availability/check→POST .../bookings→POST .../payments/initialize - Branding from the same property GET. Missing media → placeholders
- Confirmation stays on the direct host when the session started there
- Google POS / metasearch landing URLs = subdomain only
Apex com-bookdirect.com home redirects to Marketplace. Do not compete on SEO.
IDOR
Same as Marketplace checkout. Public browse for the resolved active property. Writes need guest JWT. Availability returns counts only.