Case study · Wholesale
One stock figure across every channel it is sold on
A software company set out to serve small wholesalers who sell through a trade counter, a web shop and marketplaces at once. This is how we built a SaaS product that keeps one stock figure across all of them and connects to the accounting software they already use.
Project overview
A SaaS product built around its integrations.
- Industry
- Wholesale
- Client
- Confidential
- Solution
- Order and inventory SaaS
- Platform
- Vue, Laravel and MySQL on AWS
- Timeline
- 28–36 weeks
- Team
- 7 people
- Tenancy
- Multi-tenant
- Integration
- Accounting, online stores, marketplaces
- API
- Public, documented, versioned
Expected business outcomes
What the client set out to achieve
Wholesalers buy the product to stop overselling and retyping.
-
70–90%
Fewer oversold orders
Stock is reserved the moment an order arrives on any channel.
Target range reported by customers selling on three or more channels
-
60–80%
Less manual order entry
Orders flow in from stores and marketplaces, and out to accounting.
Target range; depends on the share of orders from connected channels
-
Minutes
For a stock change to reach every channel
Updates are pushed as they happen.
Target; subject to each channel's own limits
Business challenges
Where the client started
Small wholesalers had outgrown spreadsheets and could not afford an ERP.
Stock
A spreadsheet updated at the end of the day.
Channels
A web shop and marketplaces each with their own stock count.
Trade customers
Orders by phone and email, with prices looked up by hand.
Accounts
Invoices retyped into the accounting package.
Alternatives
ERP systems that cost more than a year's profit.
Proposed solution
What the product covers
Stock at the centre, with every channel connected to it.
-
Inventory
Stock by location, with reservations, batches and low-stock alerts.
-
Order management
Orders from every channel in one queue, picked and shipped.
-
Purchasing
Reorder suggestions, purchase orders and goods in.
-
B2B ordering portal
Trade customers order at their own prices.
-
Integrations
Accounting packages, online stores and marketplaces.
-
Public API
Documented and versioned, for customers and partners to build on.
Project requirements
What the client asked us for
The request was 'an ERP for people who cannot afford an ERP'. The product's value turned out to be in its connections: a wholesaler chooses it because it talks to the shop and the accounts they already have.
So integrations were designed as the core of the product, with retries, queues and clear error messages, not as add-ons.
What the project had to deliver
- 01One stock figure everywhere
- 02Orders in without retyping
- 03A portal for trade customers
- 04Connected to existing accounts software
Key challenges & considerations
What made it harder, and what we did
-
Marketplaces that limit how often stock can be updated
What we did
Stock updates were queued and sent within each marketplace's limits, with the most urgent changes first.
-
Accounting packages with different data models
What we did
Each accounting package was given its own connector that mapped its data model to the product's.
-
Customers importing messy product lists
What we did
The import accepted untidy product lists and showed the customer what needed fixing before anything was saved.
-
Orders arriving on several channels at the same moment
What we did
Stock was reserved in a single transaction at the moment of order, so two channels could not sell the same item.
What we watched for
- Treat integrations as the product
- Reserve stock at the moment of order
- Queue every outside call
- Make imports forgiving
Development process
Stock first, then the channels around it
Each integration was released to pilot customers and hardened before the next.
-
Discovery
Order and stock flows mapped with pilot wholesalers.
-
Inventory core
Stock, reservations and the rules for concurrent orders.
-
Orders and purchasing
One order queue, picking and purchase orders.
-
Integrations
Accounting first, then stores and marketplaces.
-
Portal and API
Trade ordering and the public API.
-
Release
Imports, onboarding and billing, then general release.
Technology stack
Built around queues and connectors
Every outside system is reached through a queue, so one slow partner never stops the rest.
Front end
- Vue
- TypeScript
- Design system
Back end
- PHP
- Laravel
- MySQL
- AWS
Integrations
- Message queues
- Connector framework
- Webhooks
Platform
- Public API documentation
- Automated tests
- CI/CD
- Monitoring per connector
Quality assurance & deployment
Tested as a product many customers share
A SaaS product is one codebase serving every customer, so a defect reaches all of them at once. Tenant isolation, billing and upgrades were tested as deliberately as the features.
- Automated unit and API tests, run on every change
- Tenant isolation tests: one customer can never see another's data
- Billing, plan and permission scenarios tested end to end
- Code review by a second engineer before anything was merged
- Load tests at the expected number of tenants and users
Deployment
- 01Portal and APITrade ordering and the public API.
- 02ReleaseImports, onboarding and billing, then general release.
- 03Releases without downtimeUpdates shipped behind feature flags, with database changes that can be rolled back.
- 04Monitoring and warrantyUptime, errors and usage per tenant monitored from day one, and six months of free bug fixing.
Final deliverables
The wholesaler's systems finally agree
A sale at the trade counter now reduces the stock shown on the web shop and the marketplace within minutes, and the invoice appears in the accounts without anyone typing it.
The client has a connector framework, so adding the next store or accounting package is weeks of work rather than months.
- Stock reserved across all channels
- One queue for every order
- Trade customers ordering online
- Invoices posted to accounts automatically
Handed over to the client
- 01Production SaaS platformMulti-tenant, deployed and monitored
- 02Source codeIn a repository the client can access
- 03Billing and admin consolePlans, tenants and permissions
- 04Test suite and pipelineIncluding tenant isolation tests
- 05Six-month warrantyFree bug fixing after delivery
Success metrics
How success is measured
| Measure | Outcome | How it is measured |
|---|---|---|
| Fewer oversold orders | 70–90% | Target range reported by customers selling on three or more channels |
| Less manual order entry | 60–80% | Target range; depends on the share of orders from connected channels |
| For a stock change to reach every channel | Minutes | Target; subject to each channel's own limits |
Verified reviews
What clients say about our SaaS development work
Verified reviews from our clients on the same kind of work, published on Clutch.
-
Web Development
Custom Web Development for a Software Solutions Company
We can rely on them to handle almost any task with confidence, as they consistently deliver good results.
Verified review on Clutch (Casper Hougaard Jensen, opens in a new tab)
Casper Hougaard Jensen
CEO & Co-Founder, Iterator IT Jul 2021 – Sep 2022
-
Web Development
Web & Mobile App Development for a Software Development Company
They efficiently organized tasks and deliverables while promptly addressing questions.
Verified review on Clutch (Damien Retzinger, opens in a new tab)
Damien Retzinger
Founder, Graycore Jun 2021 – Feb 2023
-
Web Development
Website Development for a Software Engineering Company
They have a broad understanding of different technologies.
Eugene Bosikov CEO, Ezibeline LLC Mar 2022 – Ongoing Verified review on Clutch (Eugene Bosikov, opens in a new tab)
Free discovery call
Have an idea? Let's turn it into AI-powered software.
Book a free discovery call with our experts. Share your idea and we will help you shape the scope, timeline and budget, under NDA.
- Free consultation
- NDA before we talk
- Transparent estimate




