# Case study: On-Demand Courier Platform

> After a first attempt at their platform didn't work out, 1Fetch asked us to build it properly. We rebuilt ordering, payments, and accounts, and connected partners whose orders 1Fetch now pulls in, delivers, and reports back on automatically. More than 380,000 deliveries have been completed on it since 2017.

- URL: https://www.happen.software/case-studies/on-demand-courier-platform
- Publisher: Happen Software (https://www.happen.software/)

## At a glance

- **Client**: 1Fetch
- **Category**: Logistics · Rescue & rebuild
- **Running**: Since 2017 · 9 years
- **Orders in**: Apps and website, a business API, spreadsheet import, and partner integrations
- **Engagement**: Rebuild in 2017, then run and support ever since
- **Customers**: Individuals paying by card or EFT, and business accounts on credit
- **Payments**: PayGate cards with saved cards, Ozow instant EFT, and monthly accounts
- **Integrations**: Driver dispatch, Pastel Evolution accounting, partner order systems, and webhooks
- **Visibility**: A 15-panel dashboard, 8 reports, and scheduled delivery reports for businesses

## Outcomes

- **380,000+**: Deliveries completed on the platform since 2017
- **51%**: Of orders now arrive through the business API or partner integrations, not typed in by hand
- **99.9%+**: Of completed deliveries with an electronic proof of delivery

## What the client says

> Working with the Happen Software team has been an absolute pleasure. Our relationship started in 2017 where they were responsible for the entire overhaul of our 1Fetch app and systems. They delivered exactly what was agreed and to the exact time frames. Everything is delivered timeously and as agreed. It really is a stress-free process and they come highly recommended.
>
> Jason Psillos, 1Fetch

## Context

1Fetch is an on-demand courier company. Customers book deliveries in an app or on the web, businesses book through their own accounts and systems, and drivers are dispatched to collect and deliver.

They came to us after a first attempt at their platform didn't work out. We started again in April 2017, rebuilt the order process and account management, carried their existing customers across, and integrated the payment providers, the dispatch platform, and their accounting system. Since then we've connected partners whose orders 1Fetch now collects, delivers, and keeps up to date automatically, and the platform has stayed stable throughout.

## The challenge

- **A first build that didn't work out**: The platform had to be rebuilt on a foundation that would hold up, without losing the customers 1Fetch already had.
- **Payment before dispatch**: Cards, instant EFT, and business credit each needed to be confirmed before a driver was sent, with problems flagged quickly.
- **Orders from other systems**: Partners hold the orders in their own systems, so 1Fetch needs to pull them in, deliver them, and report every step back.

## Before and after

| Area | Without it | With the platform |
|---|---|---|
| Pricing | Prices worked out by hand for each job. | Quotes priced by zone and driving distance, with business rates, private rates, and coupons applied first. |
| Payment | Payments chased after the delivery. | Card, instant EFT, or account credit confirmed before dispatch, with unpaid orders flagged every 15 minutes. |
| Dispatch | Every job passed to drivers by hand. | Paid orders sent straight to the dispatch platform, and its driver updates drive the order status. |
| Partner orders | Orders copied over from partners' systems. | Pulled in every hour or received over the API, priced, and dispatched automatically. |
| Keeping clients informed | Status updates sent by phone and email. | Emails at key steps, partner systems updated as the driver moves, and proof of delivery sent back. |
| Accounting | Invoices and payments captured again in accounting. | Invoices, discounts, and payments posted to the accounting system automatically. |

## A delivery, end to end

1. **Quote**: The customer enters the stops. Each leg is priced by zone and the shortest driving distance, using the business's rates, the customer's own rates, or public rates, less any coupon.
2. **Pay**: They pay by saved card, instant EFT, or on account within a monthly limit. Instant EFT is checked against a signed callback and confirmed with the provider before it counts.
3. **Dispatch**: Once paid, the order goes to the dispatch platform, and the invoice and payment are queued for the accounting system.
4. **Track**: Driver updates are processed every 30 seconds and move the order from dispatched to en route. Customers and business contacts are emailed, and partners' systems are updated.
5. **Deliver**: When the driver finishes, the order is completed or marked return to sender, and a proof-of-delivery PDF is emailed to the customer and the business.
6. **Report**: Business accounts get delivery reports at the hours they choose, proof-of-delivery files by FTP overnight if they want them, and webhooks for their own systems.

## What we built

- **Zone & distance pricing**: Zones with exclusion areas, distance bands per rate, and the shortest driving route for each leg. Business, private, and public rates are tried in order, and a rate tester lets staff check a price.
- **Payments**: PayGate card payments with a saved card held as a token by the provider, Ozow instant EFT verified with the provider, and monthly account credit with limits per customer or business.
- **Rebuilt ordering**: One order process from quote to payment, dispatch, and completion, for app and web customers, business systems, and spreadsheet imports. Staff can step in to dispatch or complete an order.
- **Accounts for every customer**: Cash and account customers, business accounts with their own users, supervisors who see all of the business's orders, credit limits, branded proof of delivery, and coupons with usage rules.
- **Automatic dispatch**: Every paid order becomes a task on the driver dispatch platform. Its driver events are logged and processed in order, and orders it shows as done but 1Fetch doesn't are flagged every weekday.
- **Partner order integrations**: Orders are pulled from a partner's system every hour or pushed in by a courier partner, then priced and dispatched. Each step goes back to them, with a re-attempt and return to sender if delivery fails.
- **Accounting sync**: Invoices, discounts, and payments are queued on payment, sent to Pastel Evolution every 10 minutes, and posted automatically, with checks so nothing is sent twice.
- **Dashboard & reports**: A dashboard of 14 charts and a heatmap covering orders, revenue, customers, and platforms, and 8 reports, from sales and turnaround to delivery exceptions and outsourced drivers.

## What each team gets

### Customers

- An instant price for every delivery
- A saved card or instant EFT to pay
- Emails as the driver moves, and proof of delivery

### Business clients

- Their own users, rates, and credit on account
- An API to quote and book, with webhooks back
- Delivery reports at the hours they choose

### Partners

- Their orders collected without re-keying
- Every delivery step sent back to their system
- Proof of delivery images returned each night

### 1Fetch team

- Pricing, zones, specials, and drivers managed in one portal
- Alerts for unpaid and stuck orders
- Invoices and payments in the accounts automatically

## How it was delivered

- **2017, Rebuild**: Card payments, ordering, business accounts and an API, dispatch, and accounting, set up in production by July, with existing customers imported.
- **2017–2018, First partner**: A partner's orders brought in from late 2017 and pulled automatically every hour from 2018, with delivery updates sent back.
- **2019–2022, More ways to pay & book**: A move to .NET Core, coupons, Ozow instant EFT, and a courier partner sending orders over the API.
- **2024–2026, Modernised**: Accounting posting automated, and authentication added to client webhooks.

## Engineering

- Every dispatch event is logged before it's processed, and a completion waits until the events before it are handled, so an order isn't completed before the updates that came before it.
- Duplicate guards where it matters: partner orders already imported are skipped, an order that already has a dispatch task isn't sent again, and accounting entries are checked before posting.
- Instant EFT is approved only after the callback's signature is checked and the transaction is confirmed with the provider.
- Safety nets for the money and the drivers: unpaid orders flagged every 15 minutes, and a weekday check for orders the dispatch platform shows as done.
- Kept current with regular technology, library, and framework updates, along with ongoing performance and security improvements.

Stack: .NET, ASP.NET Core, SQL Server, PayGate, Ozow, Sage Pastel Evolution, Google Maps

## Get in touch

Picking up the pieces of a platform that didn't work out? We'll look at what you have, tell you honestly what to keep, and build the rest so it runs reliably for years. Book a free 30-minute call with one of our engineers.

Contact: https://www.happen.software/contact or sales@happen.software
