NETWORK · SUPPLIER PORTAL
Your factories, in your record.
The supplier you work with has 200 WhatsApp messages about a lot, a screenshot of a packing list in an email thread, a counter-proposal sitting in the procurement manager’s inbox, and a scorecard they’ve never seen. Your “system of record” knows none of it — it’s a fiction maintained by paraphrasing the conversations into the order after the fact. Audit pulls the email, if it can find it.
The Supplier Portal in TradeOS lets your manufacturers and suppliers work directly in your record — the same database, scoped to what they need to see. They counter-propose terms inside the PO. They mark production stages live. They issue invoices and see AR. Your scorecard of them is visible to them. Multi-tenant identity: one supplier login, many operator contexts, each one isolated. Data redaction enforced in the service layer, not the UI.
Portal sections
Home, orders, production, finance, contracts, samples, and 4 more
Production stages
Scheduled, in production, QC, packed, ready, shipped
Multi-tenant identity
One login, many operator contexts
Free seats per tier
5 in Starter · unlimited in Enterprise
The real supplier dashboard — same composition every supplier sees. Greeting · action prompt · 4 KPIs · 5 cards arranged in two columns. Counter-proposals are real; scorecard is real; production stages are real.
THE 3 AM PROBLEM
What “supplier collaboration” really looks like today.
Operators don’t lack tools — they have too many. The supplier ends up choosing the channel that’s easiest for them (WhatsApp, a screenshot, a phone call) and the operator’s system of record decays into a fiction.
01 · STATUS LIVES IN 200 WHATSAPP MESSAGES
To know where the lot is, you scroll WhatsApp.
The factory replies with a photo and three emojis. Two days later you ask again. There’s no system of record — there’s a chat history and someone’s memory of it. Information gets paraphrased into the order in arrears, if at all.
02 · COUNTER-PROPOSALS DON’T LIVE IN THE PO
“Can we ship May 12 instead of May 09?” lives in an email thread.
The supplier wants to negotiate a term. The operator gets an email. They reply. Three days later neither side remembers what was agreed, and the PO record still shows the original terms. Audit pulls the email; if it can find it.
03 · SCORECARDS BREED MISTRUST WHEN HIDDEN
Suppliers learn they were being measured during the QBR.
“You’re below 85% on QC pass” arrives in a quarterly business review. The supplier didn’t know that metric existed. Three months of bad faith built up because the operator never showed the score in real time. Trust breaks the same week.
WHAT SUPPLIERS DO IN THE PORTAL
Five things your suppliers actually do — in your record, not in WhatsApp.
Each maps to a real endpoint in the supplier portal API. Three additional capabilities — QC photo upload, lot notes, one-tap delay reporting — are on the roadmap with the buttons currently rendering as “Coming soon” in the production UI.
01 · RECEIVE POS
The PO arrives the moment the operator confirms it.
Full line-item detail, lead time, delivery date, document requirements (COC · SDS · COA). No PDF attachment to download — the PO is a row the supplier opens in the portal. The dashboard’s pending-PO count goes up by one; an entry appears in their action prompt; an email-style notification fires if they’re not actively in the portal.
02 · ACCEPT OR COUNTER-PROPOSE
Inline negotiation. POST /counter-propose.
The supplier accepts the PO as-is, declines, or counter-proposes a modified ship date / quantity / lead time / unit cost. The counter-proposal goes back to the operator with reason and timestamp; if accepted, the PO state machine advances; if declined, the supplier can iterate. Real endpoint at POST /api/portal/supplier/purchase-orders/:id/counter-propose.
03 · TRACK PRODUCTION · 6 STAGES
Scheduled → In production → QC → Packed → Ready → Shipped.
Real lot status machine on production_lots.status with six progress stages. As status changes — operator updates manufacturing stage, QC decision passes or fails, lot is packed and released — both parties see the same record. The QC stage handles three sub-states: qc_pending, qc_passed, qc_failed.
04 · VIEW PERFORMANCE SCORECARD
Same scorecard the operator uses to evaluate you.
Four rate metrics, displayed identically in the supplier’s portal and the operator’s manufacturer view: On-time dispatch rate, Inspection pass rate, CAPA closure rate, Certification compliance rate. Rolling windows configurable (90 days default). No hidden criteria; no QBR ambush.
05 · ISSUE INVOICES + TRACK AR
Six Finance sub-tabs. Invoices, proformas, payments, AR aging.
The supplier issues an invoice or proforma against an accepted PO, sees payment status from the operator’s accounting events, tracks AR aging buckets, and downloads statements. Live data, same numbers the operator’s AP team is looking at — no waiting for the monthly statement email.
10 SECTIONS · ONE PORTAL
Every section the operator has — scoped to what the supplier needs.
The supplier portal isn’t a “lite” version of the operator app. It’s a full 10-section workspace with its own dashboard, orders, production, products catalog, compliance certs, documents library, finance with 6 sub-tabs, messaging, tasks engine, and performance scorecard. Same data model; redaction enforced in the service layer.
Home
Greeting + action prompt + 4 KPIs + 5 dashboard cards (pending POs, lots needing attention, performance, compliance, recent activity).
Orders
Live POs, History, Claims, Analytics. Counter-propose, accept, decline. Each PO opens to a full lifecycle view with status machine.
Production
Lot board across all the operator’s orders assigned to this supplier. 6-stage status machine. QC sub-states. Operator-driven status updates.
Products
The supplier’s own catalog of items they make + “My Catalog” form for items linkable to operator products. Specs, dimensions, certifications attached.
Compliance
Certifications tracking — ISO, CE, FDA, country-specific certs. Expiry calendar. Document attachments. Per-operator “compliance attention” feed.
Documents
COC · SDS · COA · BOL · packing lists · audit reports. Versioned per lot, scoped per operator, drilling back to the order they relate to.
Finance · 6 sub-tabs
Overview · Invoices · Proformas · Payments · AR Aging · Statements. Same numbers the operator’s AP team sees on their side.
Messages
Threaded messaging scoped per operator connection. Attached to entity (order, lot, document). Notifications fan out to email if not in-portal.
Tasks
Same task engine as the operator, scoped per user (assignee / assigner / watcher). Counter-proposal acknowledgements, cert renewals, document requests.
Performance
4-metric scorecard (on-time dispatch, inspection pass, CAPA closure, cert compliance). Period selector. Per-operator view for suppliers serving multiple operators.
DATA ISOLATION
What suppliers don’t see is the whole product.
A supplier portal that leaks the operator’s commercial position is a supplier portal you don’t ship. redactFor("order", row, "supplier") is a real function in portal-shell/redaction.ts that strips margin, cost, end-client, and other-supplier data before the row leaves the database. Same pattern for shipments, invoices, documents. There’s no Settings toggle, no UI permission to misconfigure.
Only their own relationship with you
Their lots, their POs, their docs, their scorecard. Nothing else on your record exists for them.
Never your other suppliers
Crescent doesn’t know you also work with Linhai or Sapphire on the same product line.
Never your end clients
The factory doesn’t know who the gloves go to. The BOL ships under a forwarder; the consignee is yours, not theirs.
Never margin, pricing, or aggregate business
Order value, cost basis, margin, total-of-business — none of it crosses the redact boundary.
Enforced at the service layer
Not the UI. The redactFor() happens before the row leaves the database — there is no Settings toggle to misconfigure, no CSV path that quietly leaks.
MULTI-TENANT IDENTITY
One supplier login. Many operator contexts. Each one isolated.
The external_memberships table joins one global users row to multiple external_organizations. A supplier admin who works with you and with another operator on TradeOS uses one login. The data isolation per operator is enforced architecturally; per-org roles (supplier_admin, supplier_user, qc, accounting, viewer) apply across all of that org’s operator connections.
01
One identity, many operators
A supplier admin doesn’t manage three logins for three operator portals. One global users row in the database, multiple external_memberships rows joining to their employer’s external_organization. The operator context switcher in the topnav switches scope.
02
Per-org roles
Five role types per portal kind. Supplier portal roles: supplier_admin, supplier_user, qc (QC inspector only), accounting (Finance section only), viewer. Role assigned per external_organization, not per operator-connection.
03
No cross-context leakage
When the supplier user is in your context, none of the other operator’s data is queryable. The external_memberships.status field (invited / active / suspended / revoked) gates access per relationship. Suspend the connection from your side, you stop appearing in their context switcher.
04
Standard auth foundation
The supplier portal uses the same global users table as the operator app (per migration 104). SSO, passkeys, password reset, MFA — all the same machinery. There is no separate external_users table to break the “one account, many contexts” mental model.
RADICAL TRANSPARENCY
Your scorecard of your supplier is visible to your supplier.
Hidden scorecards breed mistrust. Suppliers who discover they were being graded on criteria they didn’t know about feel betrayed. TradeOS shows the four rate metrics the operator computes to the supplier directly. They see the trend, the period, and how it compares to the prior window. Suppliers who know how they’re being scored can improve.
“The first time a supplier sees their scorecard, they get quiet. Two weeks later their inspection pass rate is up 4 points.”
“Three months in, they’re asking us to tighten the criteria — because they know how to beat them, and they want the rating.”
— HEAD OF OPERATIONS · MERIDIAN TRADING CO · 38 SUPPLIERS
PERIOD · TRAILING 90 DAYSUPDATED 02 MAY 2026
On-time dispatch rateLots shipped on or before promised dispatch date · trailing window
96%▲ 1.2
Inspection pass rateFirst-pass QC acceptance · includes AQL major findings
94%▲ 3.4
CAPA closure rateCorrective & preventive actions closed within target window
88%▼ 1.8
Cert compliance rateRequired certifications current as of inspection date
100%▲ 0.0
ON THE ROADMAP
What’s coming to the Supplier Portal.
The current portal is v1 — 10 sections shipped, counter-proposal flow live, scorecard visible, redaction enforced, multi-tenant identity. Several capabilities the marketing team would love to claim are explicitly on the roadmap and currently render as “Coming soon” in the production UI.
01
QC photo upload from the factory floor
The “Upload Photo” button on lot detail currently renders disabled with a “Coming soon” tooltip. Phase 5D backend service spec is drafted; UI build pending.
02
Inline lot notes and comments
The “Add Note” button is disabled. Supplier-to-operator messaging works at the order level; per-lot inline notes pending.
03
One-tap delay reporting from the UI
The backend endpoint exists (POST /api/portal/supplier/production/lots/:id/delays) and is fully tested. The “Report Delay” button on lot detail is disabled pending the UI design pass. Operator-side delay visibility on the dashboard is live.
04
Multi-language supplier portal strings
The platform’s i18n foundation has 122 locale files. Supplier-portal strings are populated in English only at v1; trade-domain translation pass for Mandarin, Vietnamese, Spanish, Turkish, Bahasa Melayu, Arabic (with RTL) ships with the next supplier portal release.
05
Offline-tolerant photo upload
Service worker shell + PWA manifest are live (you can install the portal to a phone home screen today). Photo upload queue with background sync pending alongside the QC photo upload feature itself.
06
Auto-pay rails on invoices
Suppliers issue invoices and track payment status today via the Finance section. Auto-pay rails — direct ACH / SWIFT settlement initiated from the portal — are slated for the post-launch wave.
07
Atlas in supplier WhatsApp
Atlas is live in the operator app. WhatsApp Business integration is a Business-tier feature on the integrations backlog; Atlas-via-WhatsApp scoped to supplier context ships after the integration lands.
08
Bot Studio · supplier event bots
Bot Studio framework not yet built. When it ships, supplier portal events (lot status changes, document uploads, delay reports) will be first-class subscribable triggers.
VS. ALTERNATIVES
Where the Supplier Portal fits versus the things suppliers already use.
| Capability | TradeOS Supplier | WhatsApp + Excel | Flexport supplier portal | SAP Ariba | Custom extranet |
|---|---|---|---|---|---|
| Counter-propose terms inside the PO record | ✓ POST endpoint | — in email | limited | ✓ | DIY |
| Performance scorecard visible to the supplier | ✓ 4 rate metrics | — | internal | SLA grades | — |
| Multi-tenant identity (one login, many operators) | ✓ external_memberships | ✓ chat | — per-operator | — per-tenant | — per-portal |
| Data redaction enforced at service layer | ✓ redactFor() | — group chat leaks | tenant-level | tenant-level | — DIY |
| Six-stage production lifecycle visibility | ✓ 6 stages live | — freeform | 3 stages | ✓ deep | DIY |
| Free supplier seats per operator tier | ✓ 5 → ∞ | ✓ chat is free | — per-seat | — per-seat | ✓ in-house |
| PWA installable to a phone home screen | ✓ manifest live | ✓ WA app | — web only | — desktop | — rarely |
| QC photo upload from the factory floor | on roadmap | ✓ chat | desktop only | desktop only | — |
| Multi-language portal (translated, not MT) | on roadmap | user types | EN + 4 | ✓ 12+ | — |
WhatsApp is the actual incumbent — and it wins on familiarity for a reason. Suppliers are fluent in it. The Supplier Portal isn’t trying to replace WhatsApp by being more impressive; it’s trying to replace it by being more useful for the things WhatsApp is bad at: tracking what was agreed, scorecard visibility, document versioning on the right lot, and keeping the operator’s commercial position invisible. The roadmap items (QC photo upload, multi-language, offline queue) are flagged honestly so operators know what’s shipped today vs what’s planned.
FAQ
Questions operators ask the first time they see the portal.
The five things factory managers, ops leads, and trading-company owners hit us with on the demo call.
Five workflows ship in v1: (1) receive purchase orders the moment the operator confirms them, with full line-item detail, lead time, and document requirements; (2) accept or counter-propose terms via a real negotiation flow (POST /portal/supplier/purchase-orders/:id/counter-propose), no email back-and-forth; (3) track production progress through six stages — Scheduled → In production → QC → Packed → Ready → Shipped — visible to both parties on the same lot record; (4) view their own performance scorecard with the same numbers the operator sees; (5) issue invoices and proformas, track payments, view AR aging — six Finance sub-tabs in total. QC photo upload, lot notes, and one-tap delay reporting are on the roadmap (the buttons render as “Coming soon” in the current UI).
Send us your supplier list and one in-flight PO. We’ll set up a sandboxed Supplier Portal and walk one of your suppliers through it in 30 minutes.
Send a CSV of your top suppliers and one open PO. We’ll spin up a sandboxed Supplier Portal with your tenant’s branding, your supplier list as external_organizations, and walk a real supplier through receiving the PO, counter-proposing terms, marking production stages, and issuing an invoice. No demo data. Your suppliers, your PO.