Skip to content

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  1. Stage 1

    Discovery

    Order and stock flows mapped with pilot wholesalers.

  2. Stage 2

    Inventory core

    Stock, reservations and the rules for concurrent orders.

  3. Stage 3

    Orders and purchasing

    One order queue, picking and purchase orders.

  4. Stage 4

    Integrations

    Accounting first, then stores and marketplaces.

  5. Stage 5

    Portal and API

    Trade ordering and the public API.

  6. Stage 6

    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

MeasureOutcomeHow 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.

5.0 27 verified reviews

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