Internal operations platform
UK
Multi-Carrier Dispatch Platform
Four UK carriers, one dispatch screen, print-ready labels in bulk.
A comprehensive ASP.NET Core web application that integrates multiple UK shipping carriers (RoyalMail, Amazon, Evri, One World) into a unified platform for streamlined shipping label generation, tracking, and management.
- UK carriers integrated
- 4
- Dispatch screen
- 1
- Whole picking list, one action
- Bulk
- Build time
- 3 months
One dispatch screen
Royal Mail · Amazon · Evri · One World
01Summary
An ASP.NET Core platform that puts Royal Mail, Amazon Shipping, Evri and One World behind a single dispatch screen. Staff generate print-ready labels for a whole picking list at once, follow live tracking against each order, and search the full shipment history — instead of logging into four separate carrier portals to send the same day's orders.
- One screen, four carriers
- Bulk label runs
- Live tracking on every order

02The Problem
Before the platform, sending one day's orders meant:
Logging into four separate carrier portals to send the same day's orders.
Creating labels one order at a time, even when the picking list ran to a hundred.
Tracking left inside each courier's own portal, far from the order it belonged to.
Answering "where is it" calls with no single searchable history of what had been sent.
Excel files moving in and out of the business by hand, with nothing to import them into.
03My Role & Scope
End-to-end development, from architecture to deployment and ongoing production support.
- Carrier integrationsRoyal Mail, Amazon Shipping, Evri and One World behind one common interface, so each API's quirks stay inside its own adapter.
- Label generationA print-ready PDF per order with the carrier's own barcode and service level, and bulk runs across a whole picking list.
- Tracking & historyLive tracking pulled back from each carrier and shown against the order; shipment history that stays searchable after dispatch.
- Excel import & exportOrders and manifests in and out of spreadsheets with ClosedXML and EPPlus, because the surrounding business runs on Excel.
- Payments & emailStripe card payments for postage top-ups and MailKit transactional email at dispatch, exception and delivery.
- Accounts & rolesRole-based accounts separating warehouse staff from administrators.
04Architecture
ASP.NET Core 9 with Entity Framework Core over SQL Server; Serilog structured logging across every carrier call, Stripe.NET for payments and Cloudinary for image storage.
Orders in
Dispatch screen
Carrier interface
Documents
After dispatch
05Key Features
Everything the platform does, in one place.
- Single dispatch screenEvery carrier's orders in one place, so staff stop switching between four portals.
- Print-ready labelsA PDF per order with the carrier's barcode and service level already applied.
- Bulk label runsA picking list of a hundred orders is one action rather than a hundred.
- Live trackingTracking pulled back from each carrier and shown against the order it belongs to.
- Searchable historyOrders and shipments stay findable after dispatch, for the "where is it" call.
- Excel in & outImport orders and export manifests as spreadsheets.
- Transactional emailCustomers and staff hear about dispatch, exceptions and delivery at the right moment.
- Card top-upsPostage balance topped up by card through Stripe.
06Engineering challenges & how I solved them
The problems that decided whether the platform was usable on a real dispatch floor.
Carrier APIs disagree about almost everything+
Symptom: Address formats, service codes, what counts as an error and how often the API is available all differ from carrier to carrier.
Investigation: Letting those differences reach the rest of the application would mean every screen had to know which carrier it was talking to.
Fix: Put each carrier behind one common interface, so the differences stay inside its adapter — and a fifth carrier is an addition rather than a rewrite.
One carrier going down cannot stop the day's dispatch+
Symptom: A carrier being unavailable at four in the afternoon would otherwise block every order in the batch.
Fix: Built the failure handling around the happy path so a failing carrier affects only its own parcels, and the rest of the day's dispatch carries on.
A rejected label has to explain itself+
Symptom: Carrier rejections arrive as codes that mean nothing to a packer.
Fix: Rejections say plainly which field the carrier objected to, so a packer can fix it without calling anyone.
Four third-party APIs in the request path+
Investigation: "Which call failed, and with what payload?" is a question that gets asked often when four external services sit behind one screen.
Fix: Serilog structured logging on every carrier call, so the answer is a search rather than a guess.
Label layouts that are quick to change+
Fix: Labels are rendered with PuppeteerSharp from HTML and CSS templates, which are far quicker to adjust than a binary report designer.
Case study
Carrier APIs disagree about almost everything
Problem
Address formats, service codes, what counts as an error and how often the API is available all differ from carrier to carrier.
Investigation
Letting those differences reach the rest of the application would mean every screen had to know which carrier it was talking to.
Solution
Put each carrier behind one common interface, so the differences stay inside its adapter — and a fifth carrier is an addition rather than a rewrite.
07Impact
What changed for the dispatch team.
- UK carriers integrated
- 4
- Dispatch screen
- 1
- Whole picking list, one action
- Bulk
- Build time
- 3 months
- Four carrier portals replaced by one dispatch screen.
- A hundred-order picking list labelled in one action.
- Tracking and history kept against the order instead of in each courier's portal.
- A carrier outage no longer stops the rest of the day's dispatch.
- Rejected labels fixed on the spot by packers, without escalation.
ASP.NET Core 9EF CoreSQL ServerCarrier API integrationPDF generationPuppeteerSharpExcel import/exportStripeMailKitSerilogRBAC
Have a similar project?
Let's build something great together.
From shipping platforms to custom business tools — I can help turn your idea into reality.
- Free consultation
- Clear roadmap
- On-time delivery

