01 · The challenge
What needed solving
A freight operator was tracking packages across spreadsheets and an email thread per shipment. Clients had no self-serve visibility into where their cargo was, invoices were emailed PDFs that often went missing, and the office had no audit trail when a package went astray.
02 · Our approach
How we framed the work
We started with a discovery sprint to map the user journey, business goals and real constraints. From there we wrote a fixed-scope plan: clear milestones, weekly review gates on a staging URL, and a written exit criterion for every phase. The web development space rewards teams that ship — not teams that plan — so we biased the engagement towards working software from week two onward.
03 · The solution
What we built
We built a Laravel platform with three role-aware surfaces: admins manage every shipment, employees handle day-to-day status updates, and clients see only their own packages. Each Package has a PackageStatusHistory log written on every state change, so reconstructing what happened to a shipment is one query. ShippingInvoice + ShippingInvoiceItem power line-item invoicing with a download/view endpoint, and a MissingPackageReport workflow lets clients flag lost cargo with a structured form rather than an email.
04 · The results
What changed for the client.
Clients self-serve shipment status — support tickets for "where is my package?" dropped sharply
Every status change recorded with timestamp and actor — full audit trail per package
Invoices generated, stored and re-downloadable on demand — no more lost PDF attachments
Tech stack
Want a similar outcome for your business? We'd love to hear about it.