| name | theme-travel_booking |
| description | Travel / booking application palette: variants, pages, entities, and flows for building a varied reservations app. Use when theme_preset is travel_booking.
|
Travel booking theme
Domain
Apps that hold reservations against limited inventory and a traveler's loyalty
balance. The invariants that matter โ a seat/room is sold once, a fare is what
was quoted, points can't go negative, you only see your own itinerary โ are
exactly where the interesting exploits live.
Application variants โ pick ONE per lab
Honor any hint in theme_free_text / custom_prompt; otherwise pick one.
- Flight booking โ search flights, seat selection, passengers, e-tickets.
- Hotel booking โ room types, date-range availability, reservations, folios.
- Multi-leg trip planner โ itineraries bundling flights/hotels/activities.
- Car / rental โ vehicle classes, pickup/return slots, add-ons, holds.
- Loyalty-points program โ earn/burn miles, tier status, reward redemption.
Roles โ choose the set that fits the variant
- user (traveler) โ search, book, view own itineraries, manage loyalty.
- service โ inventory/availability sync, fare/points jobs where relevant.
- admin (agent / back office) โ view any booking, override fares, refunds.
Most exploits run as user.
Candidate pages โ select a coherent subset
Size the subset to endpoint_count. Candidates: search/results, fare or rate
detail, seat/room map, passenger/guest details, checkout & payment, booking
confirmation, my trips/itineraries, itinerary detail, e-ticket / boarding pass,
modify or cancel booking, loyalty dashboard, rewards catalog, profile/settings,
notifications, admin bookings, admin fare/inventory.
Candidate entities (seed tables) โ select what the variant needs
- users โ id, email, password_hash, role, loyalty_tier
- bookings โ id, user_id, kind, status, total_cents, currency, created_at
- passengers / guests โ id, booking_id, name, dob, document_no
- inventory โ id, kind, code, capacity, remaining, starts_at, ends_at
- fares / rates โ id, inventory_id, class, price_cents, refundable
- seats / rooms โ id, booking_id, inventory_id, label, status (held/booked)
- payments โ id, booking_id, amount_cents, method, status
- loyalty_accounts โ id, user_id, points_balance, tier, lifetime_points
- loyalty_txns โ id, loyalty_account_id, delta_points, reason, created_at
- rewards (loyalty) โ id, name, cost_points, kind, stock
- trip_segments (planner) โ id, booking_id, kind, ref_id, order, starts_at
Seed multiple travelers each with โฅ2 bookings and a loyalty balance so
cross-account and points exploits are possible.
Candidate user flows โ select the ones matching chosen pages/features
- Search โ pick a fare/rate โ enter passengers โ pay โ confirmation.
- Open my trips โ view an itinerary โ download the e-ticket / boarding pass.
- Modify a booking (change date/seat) โ repriced โ balance updates.
- Cancel a refundable booking โ refund issued โ status updates.
- Select a specific seat/room from the map โ it's held, then booked.
- (loyalty) Earn points on a booking โ redeem points for a reward.
- (planner) Build a multi-leg trip โ add a hotel + activity โ checkout as one.
- (admin) Look up any booking โ override a fare or force a refund.
Candidate endpoints โ a feature may span several
Endpoints are a shared surface, not owned 1:1 by a feature (a single feature
often spans several, and an endpoint can back multiple features). Pick a coherent
subset alongside the pages above. Grouped by area:
- search / inventory โ
GET /api/search, GET /api/inventory/{id}, GET /api/inventory/{id}/availability
- bookings โ
POST /api/bookings, GET /api/bookings, GET /api/bookings/{id}, PATCH /api/bookings/{id}, POST /api/bookings/{id}/cancel
- seats / rooms โ
GET /api/inventory/{id}/seats, POST /api/bookings/{id}/hold, POST /api/bookings/{id}/seats
- tickets โ
GET /api/bookings/{id}/ticket, GET /api/bookings/{id}/boarding-pass
- payments โ
POST /api/bookings/{id}/pay, POST /api/bookings/{id}/refund
- loyalty โ
GET /api/loyalty, POST /api/loyalty/redeem, GET /api/rewards
- admin โ
GET /api/admin/bookings/{id}, POST /api/admin/bookings/{id}/override, POST /api/admin/bookings/{id}/refund
Where vulnerabilities fit naturally
- idor โ
GET /api/bookings/{id}, /api/bookings/{id}/ticket, /api/bookings/{id}/boarding-pass โ read another traveler's itinerary/PII/document numbers.
- business_logic โ redeem more points than held, negative/zero points delta, reprice abuse on modify, refund a non-refundable fare, apply a promo twice.
- race_condition โ two users hold/book the last seat or room concurrently; redeem the same points twice before the balance settles.
- auth_bypass โ reach checkout, cancel, or refund without a valid session.
- privilege_escalation โ user reaching
/api/admin/... fare-override or refund actions.
- idor/business_logic โ set another traveler's
booking_id on a cancel/refund.
Diversity guidance
Pick ONE variant and a coherent subset โ a flight app and a hotel app should
not share a page list. Size to endpoint_count; let theme_free_text /
custom_prompt bias the variant, currencies, and naming. Vary cabins/room types,
loyalty tiers, and cancellation rules so two travel labs feel like different
brands.