← All templates

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

Open in Molecule

What is inside

  • auth
  • search
  • maps
  • bookmarks
  • reviews
  • payments
  • messaging
  • subscriptions

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 (12 handlers)

  • \_aliases api/src/handlers/_aliases.ts
  • \_decorate api/src/handlers/_decorate.ts
  • \_seed api/src/handlers/_seed.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
  • 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

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • MAPBOX_ACCESS_TOKEN Mapbox API access token
  • STRIPE_SECRET_KEY Stripe API secret key for payments
  • MEILISEARCH_API_KEY Meilisearch API key
  • S3_BUCKET S3 bucket for listing photos
  • MAILGUN_API_KEY Mailgun 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