Back to work
Case Study — 06

Parcel booking and tracking system for Cross Border Logistics

Cross Border Logistics — a shipping company in Dar Es Salaam handling international vehicle, air, and sea freight — had no digital system for parcel booking or shipment tracking. Customers had no way to follow their cargo. Everything was managed manually. They needed a working system fast.

Node.jsMongoDBEJSLogisticsTracking
Backend developer — freelance
Solo — freelance engagement
3 weeks to delivery
Tight freelance timeline with no existing codebase to build on
View live site
The problem

The business was handling import freight across multiple shipping modes — air, sea, vehicle — with no centralised record of where a parcel was at any point. Customers called in to ask for updates. Staff looked things up manually. The ask was straightforward: a booking flow where parcels could be registered and a tracking interface where customers could follow their shipment status without contacting the office.

The tradeoff I made

I chose server-side rendering with EJS over a separate frontend framework. A React frontend with a dedicated API would have been more flexible and easier to extend later, but it was more than the project needed and would not have been deliverable in three weeks as a solo freelancer. EJS rendered the tracking views directly from the server — simpler stack, fewer moving parts, delivered on time.

Deliverable within scope over future flexibility.

Outcomes
1
End-to-end parcel booking and tracking system delivered — from registration to live status updates — replacing a fully manual process
3 wks
Delivered on time as a solo freelance engagement with no prior codebase
3
Shipping modes supported — air, sea, and vehicle freight — each with its own tracking flow
What I would do differently

Looking back, this is a legacy codebase by today's standard. I would rebuild it with a modular architecture — separating route handlers, business logic, and data access properly — and add authentication hardening and input sanitisation that the original version handled too loosely. The system worked for the scope it was built for, but it was not designed to grow. A cleaner foundation from the start would have made that growth possible without a rewrite.