Logo of Takinur
Express Courier

Express Courier


Tagline

SPA courier platform built on REST.

Tech Stack

PHP, Laravel, Vue, JavaScript, Mysql, TailwindCSS

Year
2024

A courier platform built to a client brief, covering order tracking, parcel scans, and run management for dispatchers. Shipped on Digital Ocean behind Nginx, with Laravel and MySQL on the backend and a Vue SPA on the front, talking to everything over a REST API.

Glimpse of the Project


Parcel Lifecycle

01 / 05
01

Book

Senders enter parcel dimensions, weight, pickup and delivery addresses. A live quote calculates price across service tiers (same-day, next-day, economy).

Laravel · Vue SPA

tap a step to explore →

Case Study


The problem

A courier business needed one system to run the whole parcel lifecycle — booking and live quoting, dispatch and run management for its couriers, and a public tracking page for the people waiting on a delivery. It was a client brief, so the constraint was a real budget and a single modest server, not unlimited infrastructure.

What I built

A single-page courier platform: a Laravel and MySQL backend behind a REST API, a Vue SPA on the front, deployed on Digital Ocean behind Nginx. Senders get a live quote across service tiers; an admin dashboard assigns couriers by zone and load; every scan updates parcel state; couriers capture proof of delivery; and completed runs roll up into per-account invoices.

The hardest decision

The interesting call was how to make tracking feel live. Websockets give true push updates but add a persistent-connection layer to host, scale and keep alive. On a single Digital Ocean box serving this traffic, I chose REST plus polling for the public tracking URL — it's simpler to run, degrades gracefully, and the tradeoff is only a slightly staler ETA, which nobody refreshing a tracking page actually notices.

Outcome & what I'd do differently

Polling was the pragmatic fit for the client's scale and budget, and the platform shipped against the brief. If scan volume grew to the point where polling became wasteful, the clean next step is server-sent events — one-directional push that fits the tracking use case without the full weight of websockets.

Home Page

Home Page

Admin Dashboard

Admin Dashboard

About Page

About Page

Site Setting

Site Setting

next project
Driverless Car