Case studies

The work, with the numbers attached.

A selection of recent engagements. Clients are described rather than named — most of this work sits behind an NDA, and we would rather keep it that way than trade a client's privacy for a logo on our site.

LogisticsWeb product · Internal tooling2026 · 9 weeks

Replacing a spreadsheet dispatch process with a real system

A fleet operator was allocating next-day deliveries across six shared spreadsheets. We replaced the process with a single dispatch dashboard.

2.5 hrs → 20 min
Daily dispatch prep
6 → 1
Systems of record
9 weeks
Brief to handover

Context

Every evening, two coordinators rebuilt the next day's delivery plan by hand across six shared spreadsheets. Edits overwrote each other, there was no history of who changed what, and a single mistake in a vehicle assignment was only discovered the following morning at the depot.

Approach

We mapped the existing process before writing any code, then built a single dispatch dashboard around it — vehicle and driver availability, drag-to-assign allocation, and a full audit trail. Roles were kept deliberately simple: coordinators assign, supervisors approve. We ran it in parallel with the spreadsheets for two weeks before switching over.

Outcome

Dispatch preparation dropped from roughly two and a half hours to twenty minutes. Because every change is attributed and timestamped, disputes about mis-assignments are now settled from the audit log instead of from memory. The team has run it without our involvement since handover.

Stack

Next.jsTypeScriptNode.jsPostgreSQLPrismaRailway
E-commerceBackend engineering · Performance2026 · 6 weeks

Fixing a checkout that was quietly losing orders

Payment failures on mobile networks were being written off as customer error. They were retry and reconciliation bugs.

18% → 6%
Failed payment rate
340ms → 90ms
Checkout API p95
0
Double-charge tickets since

Context

The brand assumed its 18% payment failure rate was normal for mobile traffic. It was not. Orders were being created before payment confirmation, the checkout API took 340ms at p95, and webhook events from the payment gateway were processed without idempotency — so a retried callback could double-charge or orphan an order.

Approach

We instrumented the checkout path first and let a week of real traffic tell us where orders were dying. Then we made order creation idempotent, moved payment confirmation onto reconciled webhooks with a replay-safe handler, and added a scheduled sweep that settles any order left in an ambiguous state.

Outcome

Measured failure rate fell from 18% to 6% over the following month, and the remaining failures are now genuine gateway declines rather than lost state. Checkout p95 came down to 90ms. Support stopped receiving 'I was charged but there is no order' tickets entirely.

Stack

Node.jsPostgreSQLRedisRazorpaySentryAWS
Professional servicesAI integration · Retrieval2026 · 7 weeks

A document assistant analysts actually trust

Answers to policy questions were buried in 4,200 PDFs. The hard part was not retrieval — it was citation and evaluation.

4,200
Documents indexed
84%
Correct-clause retrieval
100%
Answers carry a citation

Context

Analysts were answering client questions by manually searching an archive of roughly 4,200 policy and circular PDFs. A typical lookup took around 25 minutes. An earlier off-the-shelf chatbot trial had been abandoned because it produced confident answers the team could not verify.

Approach

We treated verifiability as the requirement, not a feature. Every answer links to the exact clause and page it came from, and the interface shows the retrieved passage next to the response. Before launch we built a 120-question evaluation set from real analyst queries and tuned chunking and retrieval against it. Per-query cost is capped, and unanswerable questions return 'not found' rather than a guess.

Outcome

Analysts get a sourced answer in under a minute instead of 25. On the held-out evaluation set the assistant retrieves the correct clause in 84% of cases and abstains rather than guessing in most of the rest — which is what earned it adoption after the previous attempt failed.

Stack

PythonFastAPIPostgreSQLpgvectorOpenAI APINext.js

Your project could be the next one here.

Tell us what you are building and where it is stuck. We will be straight with you about whether we are the right team for it.

Start a conversation