Multi-vendor Marketplace
E-commerce · React + Node (Express) · 19 @molecule/* packages
Etsy-like marketplace with vendor management, commissions, and payouts — 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 - Catalog
/catalog - ProductDetail
/products/:id - VendorStorefront
/vendors/:slug - Cart
/cart(signed in) - VendorDashboard
/vendor/dashboard(signed in) - Orders
/orders(signed in) - Settings
/settings(signed in) - Checkout
/checkout(signed in) - OrderDetail
/orders/:id(signed in) - VendorProducts
/vendor/products(signed in) - VendorProductForm
/vendor/products/new(signed in) - VendorOrders
/vendor/orders(signed in) - VendorPayouts
/vendor/payouts(signed in) - Notifications
/notifications(signed in) - VendorOnboarding
/vendor/apply
Data model (16 tables)
- cart_items — id, user_id, cart_id, product_id, variant_id, quantity, unit_price, name, …
- carts — id, user_id, coupon, created_at, updated_at, updatedAt
- commissions — id, user_id, vendor_id, order_id, amount, payout_amount, status, payout_id, …
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- inventory — id, product_id, available, reserved, reason, created_at, updated_at, updatedAt
- inventory_movements — id, product_id, delta, reason, created_at
- inventory_reservations — id, product_id, user_id, quantity, expires_at, created_at
- notifications — id, user_id, type, payload, read_at, created_at
- order_events — id, order_id, status, metadata, created_at
- order_items — id, order_id, product_id, vendor_id, variant_id, quantity, unit_price, name, …
- orders — id, buyer_id, user_id, vendor_id, status, subtotal, commission, vendor_payout, …
- payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
- payouts — id, vendor_id, user_id, total, currency, status, stripe_payout_id, created_at, …
- products — id, vendor_id, user_id, name, slug, description, price, currency, …
- reviews — id, user_id, product_id, vendor_id, rating, title, body, status, …
- vendors — id, user_id, name, slug, description, logo, banner_url, bank_account, …
API (10 handlers)
- \_seed
api/src/handlers/_seed.ts - cart
api/src/handlers/cart.ts - commissions
api/src/handlers/commissions.ts - notifications
api/src/handlers/notifications.ts - orders
api/src/handlers/orders.ts - products
api/src/handlers/products.ts - profile
api/src/handlers/profile.ts - reviews
api/src/handlers/reviews.ts - storefront
api/src/handlers/storefront.ts - vendors
api/src/handlers/vendors.ts
Subscription tiers
free / pro / team — gated by: maxCommissions, maxOrders, maxProducts, maxReviews, maxVendors, advancedFeatures, canExport, retentionDays
Built from 19 @molecule/* packages
@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-image-sharp@molecule/api-payments-stripe@molecule/api-permissions-custom@molecule/api-resource-cart@molecule/api-resource-inventory@molecule/api-resource-order@molecule/api-resource-payment@molecule/api-resource-product@molecule/api-resource-review@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/api-uploads-s3@molecule/app-billing-react@molecule/app-data-table@molecule/app-gallery
Required secrets
DATABASE_URLPostgreSQL connection stringSTRIPE_SECRET_KEYStripe secret API keySTRIPE_PUBLISHABLE_KEYStripe publishable keySTRIPE_WEBHOOK_SECRETStripe webhook signing secretMEILISEARCH_API_KEYMeiliSearch admin API keyS3_BUCKETS3 bucket for product imagesAWS_ACCESS_KEY_IDAWS access key for S3AWS_SECRET_ACCESS_KEYAWS secret key for S3MAILGUN_API_KEYMailgun API keyMAILGUN_DOMAINMailgun sending domain
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing