Hotel Booking
Real Estate & Travel · React + Node (Express) · 24 @molecule/* packages
Hotels.com-like hotel booking with rooms, availability, rates, amenities, and loyalty rewards — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (14)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - SearchResults
/search - PropertyDetail
/property/:id - BookingCheckout
/booking/:id(signed in) - Trips
/trips(signed in) - Favorites
/favorites(signed in) - Account
/account(signed in) - BookingConfirmation
/booking/:id/confirmation(signed in) - TripDetail
/trips/:id(signed in) - Notifications
/notifications(signed in)
Data model (12 tables)
- bookings — id, userId, resourceType, resourceId, status, startTime, endTime, duration, …
- bookmarks — id, userId, resourceType, resourceId, folder, createdAt, updatedAt
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- hotels — id, name, slug, city, country, address, latitude, longitude, …
- loyalty — id, user_id, tier, points, nights_count, year_to_date_spend_cents, year, created_at, …
- notifications — id, user_id, type, title, body, href, read, created_at
- payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
- reservations — id, user_id, hotel_id, room_id, check_in, check_out, guests, nights, …
- review_helpful — reviewId, userId, createdAt
- reviews — id, resourceType, resourceId, userId, rating, title, body, helpful, …
- room_inventory — id, room_id, date, available_count
- rooms — id, hotel_id, name, description, capacity, rate, resort_fee, thumbnail_url, …
API (12 handlers)
- \_decorate
api/src/handlers/_decorate.ts - \_seed
api/src/handlers/_seed.ts - favorites
api/src/handlers/favorites.ts - hotels
api/src/handlers/hotels.ts - loyalty
api/src/handlers/loyalty.ts - notifications
api/src/handlers/notifications.ts - profile
api/src/handlers/profile.ts - properties
api/src/handlers/properties.ts - reservations
api/src/handlers/reservations.ts - reviews
api/src/handlers/reviews.ts - rooms
api/src/handlers/rooms.ts - trips
api/src/handlers/trips.ts
Subscription tiers
free / pro / team — gated by: maxHotels, maxReservations, maxReviews, maxRooms, advancedFeatures, canExport, retentionDays
Built from 24 @molecule/* packages
@molecule/api-cache-redis@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-geolocation-mapbox@molecule/api-image-sharp@molecule/api-payments-stripe@molecule/api-resource-booking@molecule/api-resource-bookmark@molecule/api-resource-payment@molecule/api-resource-review@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/api-uploads-s3@molecule/app-billing-react@molecule/app-calendar@molecule/app-date-range-picker@molecule/app-gallery@molecule/app-maps@molecule/app-notification-feed-react@molecule/app-status-timeline-react@molecule/app-top-nav-layout-react@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringMAPBOX_ACCESS_TOKENMapbox API access tokenSTRIPE_SECRET_KEYStripe API secret keyMEILISEARCH_API_KEYMeilisearch API keyS3_BUCKETS3 bucket for hotel photosMAILGUN_API_KEYMailgun API key
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing