Rental Marketplace
Real Estate & Travel · React + Node (Express) · 23 @molecule/* packages
Airbnb-like rental marketplace with listings, booking, reviews, and messaging — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (20)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Search
/search(signed in) - ListingDetail
/listings/:id(signed in) - Bookings
/bookings(signed in) - Wishlist
/wishlist(signed in) - HostDashboard
/host(signed in) - Messages
/messages(signed in) - Settings
/settings(signed in) - BookingDetail
/bookings/:id(signed in) - MessageThread
/messages/:id(signed in) - HostListings
/host/listings(signed in) - HostListingDetail
/host/listings/:id(signed in) - Reservations
/host/reservations(signed in) - CreateListing
/host/listings/new(signed in) - Profile
/users/:id(signed in) - Notifications
/notifications(signed in)
Data model (14 tables)
- availability — id, listing_id, date, available, price_override, created_at, updated_at
- bookings — id, userId, resourceType, resourceId, status, startTime, endTime, duration, …
- bookmarks — id, userId, resourceType, resourceId, folder, createdAt, updatedAt
- comments — id, resourceType, resourceId, userId, parentId, body, editedAt, createdAt, …
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- host_payouts — id, host_id, user_id, booking_id, amount, service_fee, currency, status, …
- listings — id, host_id, user_id, title, description, address, city, state, …
- message_threads — id, participant_a_id, participant_b_id, participant_id, user_id, listing_id, last_message_at, last_message_preview, …
- messages — id, thread_id, sender_id, user_id, body, read_at, created_at
- notifications — id, user_id, type, payload, read_at, created_at
- payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
- review_helpful — reviewId, userId, createdAt
- reviews — id, resourceType, resourceId, userId, rating, title, body, helpful, …
- uploads — id, user_id, file_id, filename, mimetype, size, created_at
API (14 handlers)
- \_aliases
api/src/handlers/_aliases.ts - \_decorate
api/src/handlers/_decorate.ts - \_seed
api/src/handlers/_seed.ts - \_test
api/src/handlers/_test.ts - bookings
api/src/handlers/bookings.ts - bookmarks
api/src/handlers/bookmarks.ts - hosts
api/src/handlers/hosts.ts - listings
api/src/handlers/listings.ts - messages
api/src/handlers/messages.ts - notifications
api/src/handlers/notifications.ts - payouts
api/src/handlers/payouts.ts - reviews
api/src/handlers/reviews.ts - settings
api/src/handlers/settings.ts - uploads
api/src/handlers/uploads.ts
Subscription tiers
free / pro / team — gated by: maxBookings, maxHosts, maxListings, maxMessages, maxReviews, advancedFeatures, canExport, retentionDays
Built from 23 @molecule/* packages
@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-realtime-socketio@molecule/api-resource-booking@molecule/api-resource-bookmark@molecule/api-resource-comment@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-realtime-socketio@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringMAPBOX_ACCESS_TOKENMapbox API access tokenSTRIPE_SECRET_KEYStripe API secret key for paymentsMEILISEARCH_API_KEYMeilisearch API keyS3_BUCKETS3 bucket for listing photosMAILGUN_API_KEYMailgun API key for notifications
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing