Distributors ordered by phone. Sales teams tracked revenue in spreadsheets. We built a role-based DMS on top of ADF Foods' ERP, without replacing the system underneath.
ADF Foods
4
3
~10 weeks

ADF Foods had a working ERP, but the system was built for internal operations, not distributor self-service or management visibility. Distributors still placed orders through calls and emails. Sales heads and country managers relied on spreadsheets to track revenue, order history, and distributor performance.
SoluteLabs built a distribution management system on top of the existing ERP, giving distributors a self-service ordering portal and managers live, role-scoped dashboards without replacing the ERP underneath.
The data already existed within the ERP. The challenge was providing the right users with timely access to act on it.
Area
Before
After
Order placement
Phone calls and emails to a sales rep, manual ERP entry, no distributor-side record
Self-service portal: browse, select, submit. Every order is timestamped and auditable.
Fulfilment visibility
No status tracking for distributors after placing an order
Real-time status: submitted, confirmed, in-transit, delivered — visible in the portal.
Revenue reporting
Manual spreadsheets, assembled infrequently, prone to version drift
Live dashboards scoped by role — sales heads, country managers, and admins each see their view.
Performance tracking
Country managers waited for weekly reports to spot underperforming distributors
Live drill-downs — underperforming distributors surfaced without waiting for a report cycle.
Distributor onboarding
Manual coordination, no structured access provisioning
Structured admin flow: details, region mapping, account activation, Kinde Auth provisioning.
ERP integration
Orders entered manually by sales reps after receiving calls or emails
Orders pushed directly from the DMS into the ERP on submission, status pulled back automatically.
Across this project, we delivered:
Before writing a line of code, we mapped how orders moved across distributors, sales teams, country managers, admins, and the existing ERP.
The ERP was the source of truth, so the new system had to sit on top of it, not replace it.
What we learned:
Distributors needed self-service ordering.
They had no digital portal to browse products, place orders, or track fulfilment. Every order still depended on phone calls or emails.
Sales heads needed live network visibility.
They needed to track orders, revenue, distributor performance, and product demand across their assigned regions without waiting for manually prepared reports.
Country managers needed a wider performance view.
They needed to compare distributor performance, monitor targets, and spot underperforming regions from one dashboard.
Admins needed control over users, roles, and access.
They needed to onboard distributors, create sales and country manager accounts, assign regions, manage permissions, and keep the platform operational without engineering support.
The ERP had to remain the system of record.
Orders needed to flow into the ERP for processing, while fulfillment status and reporting data came back into the DMS for users to act on.

The same platform had to serve four fundamentally different user types. A distributor sees only their own orders. A country manager sees the full network under their geography. Building this cleanly upfront meant that changes to role permissions were considered configuration changes rather than architectural changes.
The ERP already owned order processing. The DMS would own the user experience and the analytics layer on top. Keeping the integration surface narrow — push orders in, pull status updates out — reduced risk and made the system easier to maintain.
The DMS was structured around three core modules, each addressing a distinct gap in the existing workflow.
Admin panel for onboarding distributors and creating sales head and country manager accounts
Role-scoped permissions — distributor sees only their own orders; country manager sees their full geography
Structured onboarding: distributor details, region and category mapping, account activation
Credential provisioning via Kinde Auth — distributors receive access without manual handoff
Every stakeholder type was served from one platform without any user seeing data outside their scope.
Distributor portal: browse product catalogue, select quantities, submit orders
Orders flow directly into the ERP for processing on submission
Real-time fulfilment status surfaced back to the distributor: submitted, confirmed, in-transit, delivered
Timestamped, auditable order history for every distributor — for the first time
Admin and sales head dashboards with filters by distributor, date range, product category, and status
A workflow that previously required a phone call or email became fully self-service. Every order now has a verifiable paper trail.
Role-scoped dashboards for sales heads, country managers, and admins
Revenue by distributor, order volume over time, performance against targets
Live data — dashboards update as orders flow through the system
Country manager analyzes data to spot underperforming distributors without waiting for a weekly report
Full-network view for admins
The manual spreadsheet process was replaced entirely. Country managers now see underperforming distributors in real time instead of waiting for a weekly report.
Initial scope covered a basic revenue view for admins. Early demos surfaced deeper needs from sales heads and country managers: target-vs-actual tracking, distributor drill-downs, and time-series trends. The analytics layer expanded without changing the core platform architecture.
The first design assumed fewer permission models. Client feedback showed that sales heads and country managers needed distinct dashboard views and access rules. Because role-based access was built early, the change stayed configurable instead of becoming a rewrite.
We scoped for deeper bidirectional sync, but the final path was simpler: push orders into the ERP and pull fulfilment status back. Keeping the integration surface small reduced risk and made the system easier to maintain.
Concern
How it's handled
Authentication
Kinde — OAuth 2.0, role claims map directly to DMS permission model. No passwords stored in the application layer.
File Storage
Google Cloud Storage with signed URLs for time-limited access to distributor-uploaded files
Infrastructure
Google Kubernetes Engine — horizontal scaling, rolling deployments, staging/production environment isolation.
Observability
Cloud Monitoring and Cloud Logging for full visibility. All API errors logged centrally with request context.
Secrets
Secret Manager for all credentials and environment configuration. No secrets in source code or environment files.
Container images
Artifact Registry across environments.
Failure handling
Invalid role access returns 403 with no information leakage. ERP integration failures surface as order submission errors with retry guidance.
Distributors are onboarding now, with early feedback already pointing to self-service order placement as a major improvement over the previous phone-and-email workflow. The platform is live in production and operational.
Sales heads and country managers now have a single, role-scoped view of network performance, replacing the manual spreadsheet process entirely. Admins have end-to-end control over the platform without requiring engineering involvement for routine operations.
The ERP remains the system of record. The DMS is the interface layer that makes it accessible to the people who depend on it.
2 Developers
1 QA Engineer
1 Product Manager
~10 Weeks
A lean four-person team with a clear scope.
The PM owned stakeholder alignment and requirement clarification.
Developers owned architecture, backend, and frontend.
QA owned test coverage and regression cycles.
Ten weeks from kickoff to a production-ready platform covering onboarding, order management, ERP integration, analytics, and role-based access across four user types.

A twice-a-month newsletter from
Karan Shah, CEO & Co-Founder
10K+ Users Already Subscribed
SoluteLabs © 2014-2026
Privacy & Terms