Grocery Delivery
E-commerce · React + Node (Express) · 23 @molecule/* packages
Instacart-like grocery delivery with categories, substitution preferences, delivery slots, and real-time order tracking — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (15)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Shop
/shop(signed in) - ProductDetail
/product/:id(signed in) - Cart
/cart(signed in) - OrderTracking
/order/:id(signed in) - Orders
/orders(signed in) - Settings
/settings(signed in) - Checkout
/checkout(signed in) - Search
/search(signed in) - Lists
/lists(signed in) - OrderConfirmation
/order/:id/confirmation(signed in)
Data model (15 tables)
- cart_items — id, user_id, cart_id, product_id, quantity, substitution_preference, substitute_id, notes, …
- carts — id, user_id, status, created_at, updated_at
- delivery_slots — id, date, start_time, end_time, capacity, remaining_capacity, fee_override, region, …
- delivery_zones — id, name, polygon, active, created_at, updated_at
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- inventory_movements — id, productId, variantId, type, quantity, reason, referenceId, createdAt
- inventory_reservations — id, productId, variantId, quantity, orderId, createdAt
- inventory_stock — id, productId, variantId, total, reserved, lowStockThreshold, createdAt, updatedAt
- order_events — id, order_id, status, note, created_at
- order_items — id, order_id, product_id, original_product_id, name, quantity, unit_price, substitution_preference, …
- orders — id, user_id, status, subtotal, tax, delivery_fee, tip, total, …
- payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
- products — id, created_by, name, slug, description, price, currency, unit, …
- shopping_list_items — id, list_id, product_id, quantity, created_at
- shopping_lists — id, user_id, name, created_at, updated_at
API (6 handlers)
- \_seed
api/src/handlers/_seed.ts - cart
api/src/handlers/cart.ts - delivery-slots
api/src/handlers/delivery-slots.ts - lists
api/src/handlers/lists.ts - orders
api/src/handlers/orders.ts - products
api/src/handlers/products.ts
Subscription tiers
free / pro / team — gated by: maxCart, maxDeliverySlots, maxOrders, maxProducts, advancedFeatures, canExport, retentionDays
Built from 23 @molecule/* packages
@molecule/api-cron-node-cron@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-geolocation-google@molecule/api-image-sharp@molecule/api-payments-stripe@molecule/api-realtime-socketio@molecule/api-resource-cart@molecule/api-resource-inventory@molecule/api-resource-order@molecule/api-resource-payment@molecule/api-resource-product@molecule/api-resource-user@molecule/api-search-meilisearch@molecule/api-uploads-s3@molecule/app-billing-react@molecule/app-data-table@molecule/app-maps@molecule/app-realtime-socketio@molecule/app-status-timeline-react@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringSTRIPE_SECRET_KEYStripe secret API key for payment processingSTRIPE_PUBLISHABLE_KEYStripe publishable key for client-side checkoutSTRIPE_WEBHOOK_SECRETStripe webhook signing secretMEILISEARCH_API_KEYMeiliSearch admin API keyGOOGLE_MAPS_API_KEYGoogle Maps API key for delivery routing and address validationS3_BUCKETS3 bucket for product imagesAWS_ACCESS_KEY_IDAWS access key for S3AWS_SECRET_ACCESS_KEYAWS secret key for S3MAILGUN_API_KEYMailgun API key for transactional emailsMAILGUN_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