Subscription dairy delivery business
Subscription deliveries that schedule, route and bill themselves
A recurring-delivery business where the operational load is not the deliveries themselves but the arithmetic around them: who gets what today, who paused, who owes, and what changes when one customer skips a week.
- Client
- Subscription dairy delivery business
- Industry
- Logistics
- Services
- Custom Software Development, Web Application Development, SaaS Development
- Stack
- Next.js, React, Express, MySQL, JWT authentication, Scheduled jobs
- The day's deliveries are built overnight from every active plan, so nobody types the list in the morning.
- Each drop is marked delivered or missed, and that record is the bill. A missed drop is not charged.
- The operations portal on a phone. Customers use a second portal built from the same code and rules.
2
Portals (customer and operations) from one codebase
One codebase serves the customer and operations portals
0
Manual list-building each morning
A scheduled job builds each day's deliveries before the day starts
The challenge
Recurring delivery looks simple until you write down the rules. A customer takes two litres daily, another takes three on alternate days, a third pauses for a fortnight and expects the bill to reflect it.
Someone has to decide, every morning, exactly what leaves the building and on which route, and then reconcile what actually got delivered against what gets charged. Done by hand, that job scales badly and gets more expensive precisely when the business is growing.
What we did
- Modelled the subscription itself as the source of truth (quantity, frequency, and the specific weekdays it runs), so the daily delivery list is derived, never typed.
- Generated each day's deliveries with a scheduled job that runs before the day starts, so the operations team opens the morning with the run already built.
- Made the delivery record the billing record, so a missed drop reduces the bill without anyone remembering to adjust it.
- Built the customer portal and the operations portal from one codebase, so a change to how a plan works cannot mean two different answers in two different places.
- Kept every balance derived from movements rather than stored as a number, so a disputed bill can be walked back through the exact deliveries behind it.
Outcome. Daily delivery runs are generated automatically from active plans, with no manual list-building. Missed and completed deliveries feed billing directly, so what is charged matches what was delivered. Customer and operations experiences ship from a single codebase and a single set of rules.
Screens are shown with demonstration data.
More client work
All case studies
eCommerce
Amazon and Walmart accounts run for revenue: a price change that paid, and a channel opened from zero
26.1% more Amazon revenue from the same units, year on year
Read the case study →
SMBs
The office behind a cleaning company: leads, quotes, crews and invoices in one system
6 slices delivered, from lead inbox to reports
Read the case study →
Let’s talk
Tell us about a similar problem in your business. A senior specialist replies within one business day.