← All templates

Restaurant Ordering

E-commerce · React + Node (Express) · 14 @molecule/* packages

Toast-like POS with table-side QR ordering, menu management, kitchen display, and real-time order tracking — with built-in Stripe-backed subscription tiers

Open in Molecule

What is inside

  • auth
  • payments
  • realtime
  • image-upload
  • notifications
  • subscriptions

Screens (22)

  • Landing /
  • Login /login
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password
  • OrderDashboard /dashboard (signed in)
  • Menu /menu (signed in)
  • OrderDetail /orders/:id (signed in)
  • Tables /tables (signed in)
  • Customers /customers (signed in)
  • Analytics /analytics (signed in)
  • Settings /settings (signed in)
  • MenuItemDetail /menu/:id (signed in)
  • CustomerDetail /customers/:id (signed in)
  • OrderHistory /orders/history (signed in)
  • TableDetail /tables/:id (signed in)
  • Reservations /reservations (signed in)
  • Notifications /notifications (signed in)
  • Profile /profile (signed in)
  • Billing /settings/billing (signed in)
  • GuestMenu /menu/guest
  • GuestCart /cart

Data model (10 tables)

  • customers — id, user_id, name, email, phone, total_visits, total_spent, last_visit_at, …
  • devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
  • menu_items — id, user_id, name, description, price, category, image_url, dietary_tags, …
  • notifications — id, user_id, type, payload, read_at, created_at
  • order_events — id, order_id, status, metadata, created_at
  • order_items — id, order_id, menu_item_id, name, quantity, unit_price, status, special_instructions, …
  • orders — id, user_id, table_id, customer_id, table_number, status, subtotal, tax, …
  • payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
  • reservations — id, user_id, customer_id, table_id, party_size, scheduled_for, status, notes, …
  • tables — id, user_id, table_number, seats, section, status, created_at, updated_at

API (10 handlers)

  • \_debug api/src/handlers/_debug.ts
  • analytics api/src/handlers/analytics.ts
  • customers api/src/handlers/customers.ts
  • guest api/src/handlers/guest.ts
  • kitchen api/src/handlers/kitchen.ts
  • menu api/src/handlers/menu.ts
  • notifications api/src/handlers/notifications.ts
  • orders api/src/handlers/orders.ts
  • reservations api/src/handlers/reservations.ts
  • tables api/src/handlers/tables.ts

Subscription tiers

free / pro / team — gated by: maxKitchen, maxMenu, maxOrders, maxTables, advancedFeatures, canExport, retentionDays

Built from 14 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • STRIPE_SECRET_KEY Stripe secret API key for payment processing
  • STRIPE_PUBLISHABLE_KEY Stripe publishable key for client-side checkout
  • STRIPE_WEBHOOK_SECRET Stripe webhook signing secret
  • S3_BUCKET S3 bucket for menu item images
  • AWS_ACCESS_KEY_ID AWS access key for S3
  • AWS_SECRET_ACCESS_KEY AWS secret key for S3
  • MAILGUN_API_KEY Mailgun API key for receipt emails
  • MAILGUN_DOMAIN Mailgun sending domain

The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing