Chapter 1 — Why This Combo Exists
When customers can place orders themselves, you stop being a data-entry shop. Commerce OS gives them the storefront; Warehouse OS does the actual work. The combo is mandatory because Commerce OS literally depends on Warehouse OS.
Every order placed on the storefront becomes a fulfillment order in your warehouse — same queue your operators already work.
Chapter 2 — Roles in This Combo
| Role | What's different in the combo |
|---|---|
| company_admin | Marks SKUs catalog-visible, configures buyer profiles, sets per-buyer pricing. |
| operations_manager | Sees orders flowing in from buyers automatically — no manual entry. |
| operator | Picks/packs/ships buyer orders the same way as any other fulfillment order. |
| customer_buyer / customer_admin / customer_ship_now | Now actually meaningful — they can place real orders. |
Chapter 3 — Linking the Catalog to the Item Master
The customer-facing catalog isn't separate data; it's a view onto your Item Master with the right toggles set.
Step-by-step
- Open a SKU at /console/business/wms/item-master.
- Tick Visible in Catalog.
- Set a customer-facing Display Name if it should differ from the internal name.
- Optionally set a Public Price (used when a buyer doesn't have a contracted price).
- Save.
Repeat for every SKU you want orderable. Catalog visibility can also be filtered per buyer profile (Chapter 4 of the Commerce OS guide).
Inventory thresholds
You can hide a SKU from the catalog when stock drops below a threshold to prevent over-selling. Configure on the SKU: Catalog Min Available. If available_units < threshold, the SKU shows "out of stock" in the storefront.
Chapter 4 — Order-to-Fulfillment End-to-End
| Step | Who | Where | What happens |
|---|---|---|---|
| 1. Browse | customer_buyer | /console/customer/catalog | Sees catalog filtered by buyer profile. |
| 2. Add to cart | customer_buyer | (in-page cart) | Quantities + ship-to. |
| 3. Submit order | customer_buyer | checkout | Trenvar creates a fulfillment order with owner_customer_id = buyer. |
| 4. Pick task generated | system | /console/operator/fulfillment | Appears in pick queue. |
| 5. Pick | operator | /console/operator/fulfillment | Standard pick flow. |
| 6. Pack + label | operator | /console/operator/fulfillment | Standard pack and label. |
| 7. Status update | system | /console/customer/orders | Buyer sees status updates live. |
| 8. Shipped | system | customer email + portal | Tracking number + carrier link emailed. |
Chapter 5 — Inventory Visibility from the Customer Side
Customers can see their own stock — but only their own.
If your tenant has 3PL OS too, the inventory at /console/customer/inventory shows the customer's owned stock. Without 3PL OS, the catalog screen still works but personal-stock inventory views might be limited.
| OS combo | Customer's inventory view |
|---|---|
| Warehouse + Commerce only | Catalog only — what they can order. No "their" inventory because there isn't multi-customer ownership. |
| Warehouse + Commerce + 3PL | Full per-customer inventory + catalog + orders. |
Chapter 6 — Ship-Now Wizard Handoff
For one-off shipments without an order, the Ship-Now wizard gives a buyer a label.
Wizard flow
- Buyer opens /console/customer/ship-now.
- Picks ship-from address (warehouse default).
- Picks ship-to (saved address or new).
- Carrier + service.
- Parcel details (weight, dimensions, contents).
- Submit. Trenvar calls the carrier API → returns label PDF + tracking.
- Optionally creates a tiny fulfillment record for billing.
Chapter 7 — Shopify-to-Warehouse Pipeline
Buyers with their own Shopify store can connect it. Their Shopify orders flow into your warehouse automatically.
Customer setup
- Buyer opens /console/customer/integrations.
- Clicks Connect Shopify.
- Enters Shopify store URL.
- Approves the OAuth scopes.
- Connection shows as Connected; click Sync Now for an initial pull.
What happens on each sync
- Trenvar pulls all paid orders since the last sync.
- For each Shopify order: matches SKUs to your Item Master, creates a fulfillment order with owner = the buyer's customer record.
- Order appears in your operator queue.
- Status updates flow back to Shopify (mark as fulfilled, add tracking).
Chapter 8 — Common Pitfalls
"Buyer doesn't see anything in the catalog"
- SKUs aren't marked Visible in Catalog.
- Buyer profile catalog visibility filter excludes them.
- Stock is below catalog threshold for everything.
"Order placed but didn't appear in operator queue"
- Customer record's portal access for ordering is off.
- SKU mapping mismatch (Shopify case).
- Buyer profile is suspended.
"Buyer sees the wrong price"
- Buyer profile pricing override is set wrong.
- Public price on the SKU is stale — update.
- Buyer logged in but cached an old session — sign out and back in.
"Ship-Now button is missing"
- Tenant has Transport OS or Air Cargo OS on, which disables Ship-Now by design.
- Buyer's role is missing customer.orders.create.
Chapter 9 — Full Worked Example: Buyer Order to Shipped in 4 Hours
A customer_buyer at Acme Corp places an order on the storefront. Operator picks/packs/ships. Buyer sees status updates throughout. Walkthrough with concrete timestamps.
Day 0, Hour 0 (10:00) — Acme's buyer signs in
- Lisa, customer_buyer at Acme, opens
www.trenvar.com/your-tenant/login. - Lands on /console/customer/catalog (her role's default).
- Browses the catalog — filtered by Acme's buyer profile (apparel SKUs only, contracted prices).
Hour 0:15 — Lisa places the order
- Adds 12 × SKU-BLUE-SHIRT-M, 8 × SKU-RED-SHIRT-L to cart. Total $580 at Acme's contracted prices.
- Clicks Cart → Proceed to Checkout.
- Picks default ship-to address (Acme's NY warehouse, pre-loaded by you).
- Enters PO Number "ACM-PO-2026-512".
- Clicks Submit Order.
- Confirmation: "Order O-20260503-001 received."
Hour 0:16 — order lands in operator queue
- Trenvar creates fulfillment order FO-20260503-001 with owner=Acme, recipient=NY warehouse, lines from Lisa's cart.
- Pick task auto-generated. Appears in
/console/operator/fulfillmentPick tab.
Hour 1 (11:00) — operator picks
- Operator Maria sees the new pick task (priority normal, age <1h).
- Walks the pick path. Scans HU + SKU at each stop. Picks 12 + 8.
- Click Complete Pick. Lisa's portal at /console/customer/orders updates: status → picked.
Hour 2 (12:00) — pack + label
- Maria moves the order to Pack tab.
- Packs into 1 carton: 20 shirts, 4.2 kg, 40×30×20 cm.
- Click Complete Pack. Lisa's portal: status → packed.
- Generate Shipping Label → FedEx Ground. Tracking number 1Z999... received from carrier.
- Maria prints label, sticks it on the carton, hands to FedEx pickup.
- Click Mark Dispatched. Lisa's portal: status → dispatched with FedEx tracking link.
Day 0, Hour 4 (14:00) — Lisa watches it leave
- Lisa logs in again. Sees order status with timeline: open 10:15 → picked 11:08 → packed 11:52 → dispatched 12:14.
- Click the FedEx tracking link → carrier's site shows "Picked up by carrier".
Day 2 — delivered
- FedEx delivers the carton at Acme's NY warehouse.
- Lisa's portal status updates from carrier tracking: delivered.
End of month — invoiced
- Acme's monthly invoice includes:
- Order Fulfillment line: $1.50 per order × 14 orders this month = $21.00.
- Shipping Label line: $0.20 × 14 = $2.80.
- Storage accrual lines from /console/business/storage/accrual.
- Tax.
- Lisa or her AP team pays via Stripe Pay Now in the portal. Invoice flips to Paid.
Customer self-served end-to-end. Your team did pick/pack only. No phone calls, no manual entry, no chasing.
Appendix A — Glossary (Combo-Specific)
Cross-cutting terms specific to Warehouse + Commerce. For per-OS terms, see the Warehouse OS and Commerce OS guides' glossaries.
Buyer order — A customer-submitted order via the storefront. Lands in your fulfillment queue with Source = customer_portal.
Catalog-to-warehouse mapping — The connection between a Visible-in-Catalog SKU shown to a buyer and the actual Item Master record + inventory the warehouse picks against.
Self-service ordering — When customers place orders themselves through the catalog/cart instead of you entering them manually.
Shopify pipeline — Shopify orders → OAuth-connected sync → fulfillment orders in your warehouse → tracking pushed back to Shopify on dispatch.
SKU mismatch / Sync exception — When a Shopify order has a SKU that doesn't exist in your Item Master. The order can't auto-fulfill until you map or create the missing SKU.
End of Warehouse + Commerce Combo Guide · v1.0 · May 2026