Upstream Inventory
Most e-commerce platforms stop at the merchant's shelf. Upstream Inventory extends the model one tier up, to the factory or warehouse the merchant is buying from. A SUPPLIER tenant maintains one inventory row per SKU in their warehouse; subscribed buyer-tenants see live stock, inbound batch ETAs, and place orders directly in the app.
The problem it solves
Supplier stock has always travelled through the world by email, instant message, and Excel sheets last updated in March. The buyer asks "do you have stock?"; the supplier checks their warehouse, types a number back, the buyer copies it into their own ERP. Multiply by every SKU, every week, across every supplier the buyer carries, and an operations person spends half their week just transcribing numbers.
Upstream Inventory removes that loop. The supplier maintains qty in one place; every buyer subscribed to that SKU sees the same number live. The "do you have stock?" question is answered before it gets asked.
The shared-pool model
A supplier maintains one inventory row per SKU in their warehouse, regardless of how many buyers subscribe to it. There is no per-buyer stock allocation, no reserved-vs-available split, no buyer-specific quantity field. If three buyers are subscribed to the same SKU and the warehouse holds 100 units, all three see 100.
Two sides of a contract
- Supplier tenant
- A factory, manufacturer warehouse, or distribution hub that publishes inventory to downstream buyers. Runs on a stripped sidebar: Dashboard, Inventory (the shared-pool warehouse view), Customers (per-buyer contracts), Labels, Settings, Help. Pays a SUPPLIER-tier subscription.
- Buyer tenant
- Any tenant that carries the supplier's parts. The Suppliers sidebar entry appears on STANDARD, MANUFACTURER, RESELLER, HYBRID, RETAIL, and DISTRIBUTOR tenants. The buyer-side connection is included in their existing tenant subscription, no per-supplier fee. Subscribe to as many suppliers as you carry.
- Contract
- An UpstreamContract row pairs one supplier with one buyer. PowersportOS staff create contracts in the admin portal; self-serve onboarding is not in v1. Once paired, the buyer's Suppliers list shows the supplier and the supplier's Customers list shows the buyer.
What flows in each direction
Supplier → buyer:
- Live qty for every subscribed SKU.
- Inbound batches (orders the supplier has placed with their own upstream): qty, status, ETA. Buyers see "stock arrives next Tuesday" without asking.
- Outbound shipments: carrier, tracking number, arrival ETA.
- Order status changes: PENDING → CONFIRMED → IN_PRODUCTION → FULFILLED, live as the supplier updates them.
Buyer → supplier:
- Orders, placed through the in-app Place-order form. Each submission creates N rows under a shared batchId; supplier sees them grouped as one submission. PDF order document attached to the email notification.
- Subscriptions, requesting visibility into a SKU. (The current implementation has the supplier subscribe the buyer; a buyer-initiated path is on the roadmap.)
The inbound pipeline
On the supplier side, every SKU can have inbound batches attached. A batch is stock the supplier expects to receive into their warehouse from their upstream (a factory, a component supplier, their own next production run).
- ORDERED
- Purchase order placed with the supplier's upstream or scheduled in production. ETA is a best guess.
- IN_PRODUCTION
- Confirmed in production; ETA is supplier-confirmed.
- IN_TRANSIT
- Left the upstream; carrier + tracking number can be attached. ETA is the arrival date at the supplier's warehouse.
- RECEIVED
- Arrived at the warehouse. The Receive action transactionally sets status to RECEIVED and increments the SupplierPart qty by the batch qty.
- CANCELLED
- Batch will not arrive (PO cancelled, replaced, etc). Doesn't affect qty.
The order flow end-to-end
- Buyer opens the supplier's detail page, Place-order tab.
- Buyer adds N lines (SKU + qty + unit price + currency).
- Submit creates N UpstreamOrder rows under a shared batchId.
- System generates a PDF order document and emails it to the supplier's portal users.
- Order shows up on the supplier's Orders tab (and on their Dashboard's pending-orders attention list) with status PENDING.
- Supplier confirms (sets status to CONFIRMED + ETA). Buyer sees the change live.
- When fulfilled, supplier adds a Shipment row (carrier + tracking) and moves status to FULFILLED. Buyer sees the shipment on their In-transit tab.
Linking SKUs to the central catalog
A SupplierPart can optionally point at a Part in the central catalog. The link state controls how rich the data is on labels and on the buyer's views.
- Linked
- SupplierPart.partId points at a central catalog Part. Labels print with full rich data (brand, name, EAN, country of origin). Buyers see the full part on their views.
- Loose
- No partId set. The SupplierPart only knows its own partNumber + name. Labels print with just SKU + name. Use loose when the SKU isn't in the central catalog yet.
- Orphan
- Was linked, but the central Part was deleted. The snapshot of partNumber at link time is preserved on the SupplierPart, so labels still work, but the link is broken. The UI surfaces a relink chip.
Pricing model
What's intentionally constrained in v1
- Admin-paired contracts. A contract has to be created by PowersportOS staff. Self-serve onboarding (buyer requests, supplier accepts) isn't in v1.
- Supplier subscribes the buyer. The current portal flow has the supplier add SKUs to a buyer's subscription list. A buyer-initiated subscribe path is on the roadmap.
- One unit price per order line. Set by the buyer on each order. A formal price-list or supplier-side tier system hasn't shipped.
- Shared pool, no allocation. By design. If a real allocation model is needed for one specific contract, that's a conversation outside the platform for now.
- Portal-driven stock + orders. The integrations API can push qty in if the supplier writes a small worker, but there's no off-the-shelf ERP / WMS connector in v1.
How this fits the rest of PowersportOS
Upstream Inventory is the layer immediately above stock-sharing in the architecture. Where the reseller stock network connects a manufacturer's storefront with downstream resellers ("where can my customers buy this part?"), Upstream Inventory connects a supplier with downstream buyers in the supply chain ("where can I source this part for my inventory?"). Both run on the same shared-pool concept; both leverage the central catalog when SKUs are linked.
Labels printed for supplier shipments use the same template system as everywhere else (see Label printing). The Supplier 76 x 25 mm template is purpose-built for supplier-to-buyer shipments with EAN-13 retail barcode + canonical MPN.