← All templates

Warehouse Fulfillment

Operations & IoT · React + Node (Express) · 23 @molecule/* packages

ShipBob-like warehouse fulfillment with orders, picking, packing, shipping, and tracking — with built-in Stripe-backed subscription tiers

Open in Molecule

What is inside

  • auth
  • search
  • realtime
  • picking
  • packing
  • shipping
  • reporting
  • subscriptions

Screens (21)

  • Landing /
  • Login /login
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password
  • Dashboard /dashboard (signed in)
  • Orders /orders (signed in)
  • OrderDetail /orders/:id (signed in)
  • PickList /pick/:id (signed in)
  • Inventory /inventory (signed in)
  • Shipments /shipments (signed in)
  • Settings /settings (signed in)
  • InventoryDetail /inventory/:sku (signed in)
  • ShipmentDetail /shipments/:id (signed in)
  • Receiving /receiving (signed in)
  • Returns /returns (signed in)
  • Reports /reports (signed in)
  • Notifications /notifications (signed in)
  • Profile /profile (signed in)
  • Scanner /scan (signed in)
  • Locations /locations (signed in)

Data model (20 tables)

  • 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
  • locations — id, user_id, zone_id, code, bin_capacity, current_occupancy_pct, created_at, updated_at
  • notifications — id, user_id, kind, body, payload, read_at, created_at
  • order_events — id, orderId, status, metadata, createdAt
  • order_items — id, orderId, productId, variantId, name, price, quantity, image
  • orders — id, userId, status, subtotal, tax, shipping, discount, total, …
  • pick_lines — id, user_id, pick_list_id, product_variant_id, location_id, quantity_to_pick, quantity_picked, picked_at, …
  • pick_lists — id, user_id, order_id, status, assigned_user_id, started_at, completed_at, created_at, …
  • product_variants — id, productId, name, sku, price, inventory, createdAt, updatedAt
  • products — id, name, slug, description, price, currency, status, imageUrl, …
  • receipt_items — id, user_id, receipt_id, product_variant_id, expected_qty, received_qty, created_at
  • receipts — id, user_id, supplier, expected_at, received_at, status, received_by_user_id, created_at, …
  • return_items — id, user_id, return_id, product_variant_id, quantity, condition, restock_to_location_id, created_at
  • returns — id, user_id, original_order_id, rma_number, reason, status, received_at, created_at, …
  • shipment_events — id, user_id, shipment_id, status, description, location, created_at
  • shipments — id, user_id, order_id, carrier, tracking_number, label_s3_key, weight_oz, status, …
  • zones — id, user_id, name, kind, description, created_at, updated_at

API (11 handlers)

  • inventory api/src/handlers/inventory.ts
  • locations api/src/handlers/locations.ts
  • notifications api/src/handlers/notifications.ts
  • orders api/src/handlers/orders.ts
  • packing api/src/handlers/packing.ts
  • picks api/src/handlers/picks.ts
  • receipts api/src/handlers/receipts.ts
  • returns api/src/handlers/returns.ts
  • setup api/src/handlers/setup.ts
  • shipments api/src/handlers/shipments.ts
  • zones api/src/handlers/zones.ts

Subscription tiers

free / pro / team — gated by: maxOrders, maxPacking, maxPicks, maxShipments, maxZones, advancedFeatures, canExport, retentionDays

Built from 23 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • MEILISEARCH_API_KEY MeiliSearch API key
  • MAILGUN_API_KEY Mailgun API key for shipping notifications
  • 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