Private client · August 2026 – now · Sole developer
Shipment exception platform
An online parts retailer could see that a package had shipped, but not where it was or that it had stopped moving. I built the system that watches every parcel every day, finds the ones that have gone wrong, and puts them in one short list for the customer service team before the customer has to ask.
- Role
- Sole developer: design, build, deploy, operate
- Stack
- Node, TypeScript, Fastify, server-rendered HTML
- Data
- PostgreSQL, Drizzle ORM, pg-boss job queue
- Hosting
- Self-managed Linux VM, backups every 15 minutes
- 10,000+parcels tracked
- 110,000+carrier scan events
- 1,700+automated tests
- 7 weeksfrom first commit to live
The problem
The retailer's fulfilment and store systems record that a label was printed and a box left the building. After that, the only way to learn a parcel was lost, sitting at a depot or refused was for the customer to write in. By then the customer was already unhappy, and the team had to look the parcel up by hand across several systems.
What I built
- Ingestion. Fulfilment webhooks with an hourly catch-up sweep, daily polling of three major carriers' tracking APIs, and a nightly reconciliation with the storefront so no order is missed.
- An event store. Every scan and update is appended, never overwritten. Carrier status codes are normalised into one vocabulary, pinned by tests against real payloads.
- Exception rules. Lost, stalled, overdue, refused, held, never collected and voided labels, each derived at read time, so changing a rule changes history consistently.
- A staff work board. A prioritised list with casework (claim, note, snooze, resolve, undo) and a per-parcel page that pulls shipper, store and carrier data into one view, with a ready-to-send email draft built from staff-editable templates. It works on a phone with no JavaScript.
- Learning from every case. Each resolution is recorded with its reason, so the team can see what goes wrong, with which carrier and how often, and the "how late is late" thresholds can be tuned from evidence instead of guesses.
- Customer self-service. A tracking page found by tracking number, order number or email, with limits against enumeration, single sign-on from the storefront with signed tokens, and forms for reporting a problem or requesting a return.
- Safe roll-out. Customer notifications run in "shadow mode" behind feature flags: every decision is logged and nothing is sent until the team is ready. Email templates are editable by staff.
A walk through it
A typical morning: open the board, pick the most serious row, and work it from the parcel page without opening the fulfilment system, the store admin or the carrier's site.
What the customer sees, in the store's own branding, and the staff board on a phone.
What it deliberately does not do
- No automatic customer emails yet. Every customer email is a draft a person reviews. Automatic notifications are built and run in shadow mode, so their volume and accuracy can be judged before anyone switches them on.
- No scraping. It uses the carriers' official tracking APIs only.
- No copies of other systems. Refunds and return authorisations stay in the store and fulfilment systems; the platform links to them rather than duplicating them.
Hard parts
- Messy carrier data. The same event arrives in different shapes from different carriers and sometimes out of order. Deriving status at read time made late or corrected scans safe instead of a source of bugs.
- Running it alone. One command deploys in about 30 seconds and rolls back by commit. The system checks its own health and alerts once on failure and once on recovery, not every five minutes.
- Protecting customer data. Staff sign in with the company's identity provider. Screenshots used for training are scrubbed of customer details automatically.
Outcome
The platform went live in October 2026. Of more than a thousand parcels in transit on a typical day, the board shows the 15 to 20 that need a person. In the first full measurement, 99.7% of parcels shipped in the previous week showed customers a useful tracking page, and the system reports how many "where is my order" contacts that page prevents.
The client's name and data are confidential. The screens on this page are the real application running on my machine against invented data, with a made-up store name and logo; the figures are rounded.