B2B Wholesale Ordering Portal
Digitized wholesale ordering and eliminated manual data entry for sales reps.
The Context
A national distributor serving thousands of B2B customers was processing millions in wholesale orders via email, phone calls, and PDFs. Each order often required a sales rep to re-key line items into an outdated, on-premise ERP. Lead times and inventory visibility were inconsistent, and customers frequently called to check stock and order status.
The Challenge
"Sales reps spent an estimated 60% of their time manually entering orders into the ERP and resolving discrepancies. Customers had no self-service way to view real-time inventory, their negotiated pricing tiers, or order history. The ERP was slow and had no modern API, so any new channel had to be integrated carefully without disrupting existing operations."
The Solution
We built a custom B2B e-commerce portal that sits in front of the ERP: customers get a fast, modern ordering experience with real-time inventory and their specific pricing, while a Node.js middleware syncs orders and product data with the legacy system. Sales reps can place orders on behalf of clients (impersonation mode) and see analytics; all orders flow into the ERP for fulfillment.
Customer Portal
- Self-service ordering with near real-time inventory sync from the ERP
- Dynamic, customer-specific pricing tiers, volume discounts, and contract rates
- One-click reordering from past purchase history and saved carts
- Order history with status and shipment tracking
- Product search and filtering with bulk add-to-cart and list upload
Admin & Sales Dashboard
- Impersonation mode for sales reps to place orders on behalf of clients with full audit trail
- Automated order routing and ERP synchronization with retry and error handling
- Analytics on customer purchasing trends, top products, and abandoned carts
- Ability to override pricing and apply one-off discounts with approval logging
System Interface

Wholesale product catalog with real-time inventory

Bulk ordering interface

Sales rep dashboard and analytics

ERP synchronization logs
Business Outcomes
Reduced order processing time by 85%; most orders now flow through without manual entry
Eliminated manual data entry errors for orders placed via the portal
Increased average order value by 15% through suggested add-ons and reorder shortcuts
Freed sales reps to focus on relationship and growth instead of data entry
Architecture Notes & Lessons
Integrating with legacy on-premise systems requires aggressive caching and async flows. We decoupled the user experience from the ERP's response time by caching catalog and pricing and using an asynchronous order queue with clear status (Pending, Synced, Failed). We would add a small admin tool for queue monitoring and manual retry from day one on the next integration.
Architecture
A Node.js middleware layer mediates between the React frontend and the client's legacy on-premise ERP: it polls or receives product and inventory updates, and queues order submissions. Redis caches the product catalog and customer-specific pricing so the portal stays fast even when the ERP is slow. Stripe handles B2B payment options; order and payment status are synced back for display.