NETWORK · CLIENT PORTAL

Your clients work in your portal. Approve, pay, claim. With your logo on top.

Your client orders from fifteen suppliers a year. Most send PDF invoices and expect to be chased for status. Approvals happen by email and stall the day someone forgets. “Where's my order?” arrives in your CS team's inbox fifty times a week. Claims and disputes live in three-day email threads, then disappear into shared folders. The client comes away thinking your business runs on PDFs.

The TradeOS Client Portal is that portal, fully operator-branded. Nine sections of real surface — orders, production, shipments, invoices, claims, samples, approvals, messages, account. Three state machines (claims · samples · approvals). Stripe Connect rails. Service-layer redaction — your supplier and margin never cross the boundary.

Book a demoSee pricing

Portal sections

9 · orders, shipments, finance, claims, and 4 more

State machines

Claims, samples, approvals

Multi-operator identity

One login, all your operators, unified view

Cost to client

$0 · unlimited seats

MBrevin Health EUClient workspace · Anna Kohl · VP Procurement
Switch operator ▾
HomeOrders · 4ProductionShipmentsInvoices · 3DocumentsTodo · 2MessagesAnalyticsSettings
Wednesday afternoon
Good afternoon, Anna. 2 things need you today · 1 amendment pending approval, 1 invoice due Friday.
1 PENDING APPROVAL · ASSIGNED TO YOU
Order amendment · PO 2026-0418 · +50K units

Operator proposes lot 4 quantity 150K → 200K units. Same spec, same ship date. Net change: +$140,000 · within your $200K director-tier ceiling. Raised 11 min ago.

ACTIVE SHIPMENT · PO 2026-0418
200K medical gloves · CIF Hamburg
Open shipment →
Lot 3 of 4Container 2 of 4Net 30 · USDIncoterm CIF
Container bookedJul 02 · MSC
In transitLoading lot 3 · Klang
Departed— scheduled Jul 09
Arrived Hamburg— ETA Jul 21
PRODUCTION · 78% completeSource · production in progress · redacted
Materials
Production
QC
Pack
Ship
Recent activity5 events · last 24h
  • 14:08Sample SMP-2026-088 · approved with conditions
  • 11:22Claim CLM-2026-014 · resolution proposed · credit $4,200
  • 09:45PO 2026-0418 · production reached 78%
  • YesterdayDocument · Certificate of Origin · ready to download
  • YesterdayPayment confirmed · INV-2026-011 · $420,000

The real Home dashboard — operator-branded chrome, 9-section nav, hero status strip, action prompt for pending approvals, two-column grid with active shipment + invoice center, recent activity feed. Single backend call (GET /api/portal/client/dashboard) returns everything. The dashboard adapts through 4 ClientDashboardMode states as the client's first session unfolds (fresh → mid-production → mid-shipped → active).

THE INBOX THAT NEVER EMPTIES

What “great client service” really looks like today.

The work is real: clients want to know where their orders are, want approvals to be fast, want to feel like they're dealing with a serious business. The default tooling — PDF + email + shared folders — costs your CS team days a week and costs your renewal rate something even bigger.

01 · “WHERE'S MY ORDER?” LIVES IN 50 EMAILS A WEEK

Your CS team becomes a status-update-by-email service.

The client wants to know if RD-2026-018 has shipped. They email procurement, who emails ops, who opens four sections, retypes the answer back. By the time the email arrives the lot has advanced two stages. Multiply by twenty clients and that's two days a week of CS time spent on status updates the record already has.

Client emailManual status retype
asked 3× this week·same order

02 · APPROVALS STALL IN PDF CHAINS

“I'll need to check with my CFO” means four days of dead threads.

You send a quote, an order, a counter-proposal. The client says they need to escalate. Three days later you ping them. They forgot. Two days after that the approval arrives by email — but the terms you'd updated in the meantime aren't reflected. The deal moves at the speed of the slowest inbox.

Quote PDFCFO email · ?
4-day stall·half the deals

03 · YOU LOOK LIKE A PDF MILL

The competitor with a proper portal feels premium. You don't.

Your client orders from fifteen suppliers a year. The one with a branded portal — orders, shipments, claims, approvals all in one surface — feels like a different category of business. They get renewed. You get put back out to RFP.

PDF millRFP shortlist
portal · 1 of 15·renewed

9 SECTIONS · ONE PORTAL

Every surface the client works on, in one navigation.

Real CLIENT_NAV.flatLinks from client/src/lib/navConfig.ts. Mobile bottom-nav uses four: Home · Orders · Payments (the /invoices route renamed, because clients think “I'm paying things”) · Messages.

01

Home

1,710-line adaptive dashboard. Hero status + action prompt + 2-col grid with active shipment (D3 map) and invoice center. Four ClientDashboardMode states for first-session vs ongoing-relationship rendering.

02

Orders

PO acceptance, amendments, line items, lots, shipment linkage. 608-line list + 964-line detail. Approval routing via task engine.

03

Production

Watch the goods being made — production phases, factory progress, lot tracking. Source identity always anonymized (redacted at service layer).

04

Shipments

D3 + topojson map, real-time milestones (booked → loading → departed → arrived), document attachment. Same renderer the homepage uses.

05

Invoices

Invoice list + 764-line detail. Pay via Stripe Connect (4 rails). On mobile this renames to Payments in the bottom-nav.

06

Documents

Visibility-tag driven access. CO, BL, packing list, CI, COA, insurance, phytosanitary, QC. Async export (orders/invoices/docs/messages/audit).

07

Todo

Tasks scoped to the client. Auto-spawned by client portal actions on the operator side via auto-tasks.service.ts. Approvals also live here (task_category='approval').

08

Messages

Threaded messaging with the operator. Attached per entity (order, invoice, shipment, claim, sample). 5-category notification prefs.

09

Analytics

Relationship-level analytics. Aggregated across operators at Business+ tier (real cross_operator_analytics feature).

CLAIMS & SAMPLES · COMMERCIAL WORKFLOWS

Claims and sample requests stop living in your CS inbox.

Every B2B relationship has commercial events that aren't orders or invoices — quality issues, short shipments, sample requests, gold-sample sign-off. Most operator software treats these as out-of-band email exchanges. TradeOS treats them as first-class entities with enforced state machines.

CLAIMS · MIGRATION 165 · 6 STATES

Quality, delivery, short shipment — recorded and resolved in-portal.

Real client_claims table. Six claim types covering the full universe of “we have a problem with the goods” — distinct from invoice disputes (which are about invoice content, handled separately in mig 166).

short_shipmentdamagewrong_productquality_defectlate_deliveryother
openunder_investigationresolution_proposedresolved

Branches: escalated · cancelled. Six resolution kinds (replacement_shipment · credit · refund · price_concession · no_action · dispute). Photos and evidence in JSONB. Three severity levels (minor / major / critical). Client raises and accepts proposals; operator investigates and proposes resolutions — distinct write paths in different services.

SAMPLES · MIGRATION 163 · 8 STATES

Pre-production, gold, shade, safety — all tracked in the portal.

Real sample_requests table. Five sample types covering the validation cycle from “first thing the factory ships” to “the reference standard both sides retain.”

pre_production_sampleproduction_samplegold_sampleshade_color_samplesafety_functional_sample
requestedin_productionshippeddeliveredapproved

Decision branches: approved_with_conditions · rejected · cancelled. Photos and annotations from both sides. Gold samples have retain_until dates (typical 2 years). The portal carries the entire workflow — request, photo upload, annotation, decision, retention — without falling back to email.

SCALES WITH YOUR CLIENTS

Single-tap for SMB. Amount-routed for mid-market. Custom builder for Enterprise.

The same portal serves the corner-store buyer and the Fortune 500 procurement org. The five real client.*_approvals tier features (migration 161) gate progressively richer routing as the operator's tier moves up. The client's procurement process is respected, not imposed.

TIER · STARTER (SMB DEFAULT)

Single user. One tap.

1 approver · no routing

1

Owner / Buyer

FULL AUTH · ANY AMOUNT

approve

REAL FEATURE KEY

client.single_approver_workflow

EXAMPLE CLIENT

Independent pharmacy chain · 4 locations · $80K/mo spend

TIER · SOLO+ / TEAM+

Amount-routed, sequential.

3 approvers · ladder by dollar value

1

Team lead

PROCUREMENT TEAM

< $50K

routed by amount
2

Director

DIRECTOR · PROCUREMENT

$50K — $200K

3

VP · Supply Chain

VP · SUPPLY CHAIN

> $200K

REAL FEATURE KEYS

client.amount_based_approvals(Solo+) ·client.sequential_multi_step(Business+)

EXAMPLE CLIENT

Regional medical distributor · 14 sites · $4M/mo spend

TIER · BUSINESS+ / ENTERPRISE

Parallel, conditional, delegated. Custom builder.

Configurable · n-of-m · delegation policies · audit log

1

Requester

SITE LEAD

submit

↓ sequential
2

Cost-center owner

FINANCE GATE

any

↓ parallel — both must approve
3

Quality / Compliance

REGULATED · MEDICAL

QA

4

Security / Vendor Risk

SAML · ENTERPRISE

risk

↓ sequential · amount-routed
5

VP · Supply Chain

FUNCTION HEAD · DELEGATION OK

< $5M

6

CFO sign-off

EXEC · WITH DELEGATION

> $5M

REAL FEATURE KEYS

client.parallel_approvals · client.delegation_policies · client.category_based_approvals(Business+) ·client.custom_approval_builder(Enterprise)

EXAMPLE CLIENT

Fortune 500 hospital network · 200 sites · $40M/mo spend

PO 2026-0418 · CLIENT VIEWredactFor() · service layer
PO idPO 2026-0418visible
Line items200K medical gloves · 8mil nitrilevisible
Ship termsCIF Hamburg · ETA Jul 21visible
Production status78% · lot 3 of 4 · in productionvisible
Invoice total$560,000 · their commercial pricevisible
Supplier name▪▪▪▪▪▪▪▪▪▪▪▪redacted
Manufacturer country▪▪▪▪▪▪▪▪redacted
Operator cost basis▪▪▪▪▪▪redacted
Operator margin▪▪▪▪▪redacted
Capacity data▪▪▪▪▪▪▪▪▪redacted
Other clients▪▪▪▪▪▪▪▪redacted
6 OF 11 FIELDS REDACTED→ enforced in the API · doc metadata sanitized

DATA ISOLATION · ARCHITECTURAL

What don't see is the survival rule.

A client portal that leaks your supplier or your margin is a portal you don't ship. Radical transparency on status; opaque on origin. Every visible field was deliberately exposed; everything else is invisible before the row leaves the database.

×

Only their own orders, their own data

A client never sees another of your clients on the platform. Per-connection scope at the service layer; cross-operator unified view (Starter+) aggregates only this client's own data across operators they're connected to.

×

Never your suppliers or manufacturers

“Production in progress” — not factory name, not country, not lot location. Real redactFor() in server/src/modules/portal-shell/redaction.ts rewrites the row before it leaves the service.

×

Never your cost, margin, or pricing structure

They see their commercial price. They never see what you paid the factory, your freight cost basis, or what other clients on the same SKU are charged.

×

Document redaction at the service layer

Even if a document has a supplier reference in metadata — a PDF's XMP block, an Excel header, a watermark — it's rewritten before serving. No “leak via accidentally-shared file” path.

×

No Settings toggle to misconfigure

There is no admin UI where an operator could flip the wrong switch and expose cost. The boundary is encoded; the only way past it is a deploy-gated code review.

OPERATOR-BRANDED · THEY SEE YOU, NOT TRADEOS

White-label is not a checkbox. It's the product.

Your clients don't choose vendors based on the back-office software you use — they choose based on how the vendor presents itself. The Client Portal is the operator's primary surface for that presentation. Every visible byte goes out under your brand.

LAYER 01 · YOUR LOGO, YOUR COLORS

AVAILABLE FROM · SOLO TIER

Your mark on every document, invoice, contract, and screen.

Upload a logo, pick a primary brand color, and every artifact the client touches inherits it — portal UI, PDF invoices, signed contracts, email notifications, downloadable manifests. The TradeOS wordmark is restricted to a small footer on the portal; on documents, it's not present at all.

LAYER 02 · CUSTOM DOMAIN

AVAILABLE FROM · ENTERPRISE TIER

Portal lives at portal.yourcompany.com — your own SSL cert.

Your clients never type “edma” or “tradeos” into a browser. Real client.custom_domain feature key at Enterprise tier — full white-label per migration 161. The portal is served from your own DNS, with a certificate provisioned for your domain. The URL bar is part of your brand — and it stays clean from sign-in all the way to a paid invoice.

Operator email sender (DKIM-signed outbound from your domain) is on the roadmap — flagged honestly in §13 below.

ONE CLIENT · MANY OPERATORS · UNIFIED VIEW

One login, all your operators, one read view.

A client legal entity connected to multiple operators on TradeOS gets a unified read view via real client.cross_operator_account feature key (Starter+ tier, migration 161) and the /cross-operator/dashboard endpoint in portal-client/services/cross-operator.service.ts.

One user, one login, all their operators in one screen — per-connection isolation preserved. Each operator's data stays scoped to that connection; aggregation only happens at safe summary level (counts, totals, no PII leakage between operators). Cross-operator analytics at Business+ tier.

This is a deliberate deviation from the FAQ many client-portal SaaS products give — “client identity is operator-scoped, no cross-operator views.” TradeOS exposes the unified view because clients actually need it and per-connection isolation in the aggregation layer is the architectural safeguard, not the absence of the surface.

Brevin Health EU
PO 2026-0418 · 4 active · 1 pending approval
Active workspace
Pendrew Energy · EU
2 active orders · 1 invoice due Friday
Switch →
AcmeCorp Trading
3 active · sample SMP-088 pending decision
Switch →
All operators · unified view
9 active orders · $1.2M paid YTD · 14 approvals
View →
Each isolated · operators don't see each other's data

PAYMENTS · STRIPE CONNECT

Four rails. Honest about what's wired vs ready.

Real client.direct_payment_rails feature key (Starter+, migration 161). Four Stripe Connect rails — card · ACH · SEPA · BACS. Read-side payment history ships at launch; the INITIATE side ships with the Stripe webhook receiver, currently behind the v1.1 milestone. Both surfaces are flagged below so you know exactly what's wired vs UI-ready.

CARD

2.9% + 30¢

Visa, MC, Amex via Stripe. Instant settlement. Best for SMB clients who want speed; not for high-value invoices where the fee matters.

ACH

0.8%

US bank-to-bank. 2-day settlement. The default for large invoices. Cheapest fee per dollar moved.

SEPA

0.5%

EU bank-to-bank. 2-day settlement across the SEPA zone. The default for European clients paying European operators.

BACS

0.4%

UK bank-to-bank. 3-day settlement. The default for UK clients. Replaces Direct Debit for one-time payment flows.

STATUS

READ surface live · INITIATE surface ships with the Stripe webhook receiver (v1.1)

Scheduled and recurring payments at Business+ tier (client.scheduled_payments)

AI · ACROSS CLIENT EVENTS

AI on the client side too — drafting responses, routing approvals, matching payments.

Every client interaction in the portal is an event the AI stack can act on. The same data-isolation rules apply — Atlas reasons over the client's own scope, never across other clients of yours.

AATLAS · DRAFTING CLIENT REPLIES

Forward Atlas a client email. It drafts the response with operational context.

The client asks “can we accelerate by 3 days?” Atlas pulls current production %, freight options, pricing impact, and drafts a reply in your voice. You hit send. The record updates automatically.

▶ FWD ATLAS · A. Kohl @ Brevin"Can we accelerate PO 0418 by 3d?"▶ ATLAS · draft reply"Yes — air-freight lot 3 for +$14K (currently 78% production, ETA Jul 18 instead of Jul 21). Confirm by EOD Tuesday and we'll book."→ context · production · freight · margin (private)

BBOT STUDIO · ON CLIENT APPROVALS

When a client approves an amendment, a bot cascades the update.

You build the bot once. It watches client-approval events: auto-updates the supplier's production plan, drafts the forwarder note, recalculates the invoice schedule, and only escalates to a human when the change crosses a threshold.

▶ BOT  client-approval-cascade · v2.4event ·approve · +50K unitssupplier plan ·lot 4 updatedforwarder ·capacity check requestedinvoice schedule ·+$140K · INV-019human ·none required

$ACCOUNTING AI · ON CLIENT PAYMENTS

Stripe Connect payments auto-reconcile against invoices.

The client pays $560K via ACH. Accounting AI matches the rail to the invoice, posts it to your ledger, flags any short-pay against a known holdback policy, and surfaces only the cases that need a human eye.

▶ ACCOUNTING AI  rail match · v1.8 ACH · $560,000 · ref MERIDIAN-018matched ·INV-2026-018 · 100%ledger ·posted · AR clearednext ·INV-019 holdback 2.3% · review

COMPARE

Five places clients already work. None of them is built for the operator.

Email and PDF is the incumbent — and it wins on familiarity, loses on everything else. Customer Communities and Ariba win on enterprise procurement, lose on operator-branding and margin protection. In-house portals win on flexibility, lose six months later.

CapabilityTradeOS Client PortalEmail + PDFSalesforce Customer CommunitiesAriba Buyer (forced on you)In-house custom portal
Operator-branded (your domain, your colors)✓ portal.yours.com · Enterprise tier✓ your sigyour colors, Salesforce URL— SAP brand
Real-time status visibility · same record✓ single backend call— manualvia integrationsasync syncDIY
Inline approvals · single tap to custom builder✓ 5 tier-gated levels— PDF + email✓ workflow builder✓ enterprise onlyDIY
Stripe Connect payment rails (card · ACH · SEPA · BACS)✓ all 4 · transparent fees— wire onlyvia 3rd-partyACH · wire— rare
Cross-operator unified view (one login, all your operators)✓ Starter+ feature— N/A— per-org silo— per-org silo— DIY
Cross-tenant data isolation enforced architecturally✓ redactFor() in API— leaks by accidentorg-leveltenant-level— DIY
Claims + Samples workflows (state machines)✓ 6 + 8 states · live— ad-hoc emailcases module— out-of-band— DIY
SAML SSO at Enterprise✓ client.saml_sso✓ SF IdentityDIY
Free seats for clients (operator pays for TradeOS)✓ unlimited at tier✓ email is free— per community user— per-seat✓ in-house
Native AI integration (Atlas · Bots · Accounting)✓ scoped per client— bring your ownEinstein add-onJoule add-on

Email is the actual incumbent — and it wins on familiarity for a reason. Clients are fluent in PDF. The Client Portal isn't trying to replace email by being more impressive; it's trying to replace it by being easier than email for the things email is bad at: status visibility, approval routing, payment, claims, samples, document attachment to the right PO, and not making the operator look like a vendor running on Excel.

TIER GATING · 19 FEATURE KEYS

Free for the client. The operator's tier decides which capabilities show up.

Real tier_features registry (migration 161) defines nineteen client-portal feature gates. Clients never see a paywall; the connecting operator's tier decides what's available in your workspace for that operator. Roadmap tags mark features whose tier_feature key is registered but whose UI/engine implementation is post-launch.

Feature
Starter
Solo
Business
Enterprise
Basic portal (orders · shipments · invoices · documents · messaging)
Stripe Connect direct payment rails (card · ACH · SEPA · BACS)
Sample request workflow (5 types · 8-state · photos + annotations)
Claims workflow (6 types · 6-state · evidence + resolution)
Single-approver workflow (SMB default)
Cross-operator client account (one login, multiple operators)
Amount-based approval routing
Sequential multi-step approval chains
Cross-operator aggregated analytics
Client-initiated order placement (self-serve)
Scheduled and recurring payment execution
Parallel and conditional approval workflows
Approval delegation policies (time/scope/amount limited)
Category-based approval routing
Saved order templates Roadmap UI
SAML SSO for client users
Custom visual approval workflow builder UI
Custom domain / full white-label
EDI integration for order/shipment/invoice flow

ON THE ROADMAP

What's coming to the Client Portal.

v1 ships nine sections, three state machines, four Stripe Connect payment rails (READ side live), multi-tenant identity with cross-operator unified view, service-layer redaction, PWA install, onboarding overlay + tier-aware checklist, auto-tasks, data export, and tier gating across nineteen feature keys. The capabilities below are flagged honestly — their tier_feature keys exist but their UI / engine / wire-up lands post-launch.

01

Stripe webhook receiver · payment INITIATE

READ surface (payment history) is live. The INITIATE side — POST /invoices/:id/pay — is stubbed pending the Stripe webhook receiver that writes payment rows. Per payments.service.ts: “Stubbed exactly like createSetupIntent. Throws ValidationError with documented next steps.”

02

Operator email sender (DKIM-signed outbound from your domain)

Order confirmations, approval requests, shipment alerts, invoice notices — delivered from [email protected], not from TradeOS infrastructure. SPF, DKIM, DMARC configured on your DNS. Not implemented yet; Enterprise tier when built.

03

OIDC + SCIM provisioning

SAML SSO is live at Enterprise tier (client.saml_sso). OIDC and SCIM auto-provisioning land next — same Enterprise gate. SCIM de-provisions when the client's HR system offboards a user, so portal access tracks the client's source of truth.

04

Saved order templates UI

Real client.order_templates feature key at Business+ (mig 161, flagged “UI post-launch”). The schema is ready; the saved-template picker + one-click reorder flow ships post-launch.

05

Custom approval workflow builder UI

client.custom_approval_builder at Enterprise tier. The runtime engine is in place (parallel, sequential, n-of-m, delegation, category routing all work); the visual builder UI for non-technical operators ships post-launch. Operators on Enterprise can request hand-built workflows from us in the meantime.

06

EDI integration

client.edi_integration at Enterprise tier (mig 161). For enterprise clients on EDI, the order/shipment/invoice flow lands directly via X12 / EDIFACT instead of the portal UI. Schema reserved; integration adapters ship per-customer as Enterprise contracts close.

07

Wire + Letter of Credit rails

The four Stripe Connect rails (card / ACH / SEPA / BACS) cover the digital-rail universe. Wire and LC are out-of-band rails the operator can still record manually against an invoice today. Native portal flows for wire confirmations and LC presentation tracking ship as the use cases concentrate.

08

Native iOS / Android client app

PWA is the v1 client mobile surface (manifest + service worker + InstallNudge — already shipping). Native apps with biometric auth, native camera APIs, and push notifications land post-launch.

FAQ

The questions every operator asks the first time they see this portal.

Honest answers to the questions distributors, importers and trading-company owners hit us with on the demo call.

Yes — but it's branded as your system. They see your logo, your colors, and at Enterprise tier a custom domain (portal.yourcompany.com with your own SSL cert). Most clients prefer this to chasing email PDFs; the operators who switched report procurement teams asking for the portal first, not vice versa.

Hand your hardest client the portal. See if they prefer it to email.

Book a 30-minute demo. We'll spin up a sandboxed Client Portal with your logo, your brand color, your custom domain on a staging subdomain, a fictional order, and a fictional VP of procurement. You walk through it on a real desktop and a real phone. If they wouldn't prefer it to a PDF chain, we won't ask you to buy it.

Book a demoTalk to sales

See the full Network — 4 portals, one record →

Client Portal · Real-time orders, inline approvals, one-click payments | TradeOS