Relay.
A seven-second wait, gone.
White-label and under NDA — anonymized. The work, stack, and outcomes are real; only the client's name is masked.
An older app, written in another language, was slow exactly where it hurt: every request ran synchronously, so users watched a spinner for around seven seconds before anything came back. The client wanted to move into the TypeScript world — and, more than that, to make it fast.
We rebuilt it in Next.js around an asynchronous core. Instead of doing the work while the user waits, the API accepts the request, stores what it needs, and responds immediately — while a background job picks up the task and works through it independently. The UI polls and updates itself as results land, so a user can fire a request and close the tab; the processing carries on without them. The hard parts were the shift itself — turning a synchronous pipeline into a reliable background one — and wiring authentication into the client's existing database rather than starting clean.
The seven-second wait is gone; responses are instant. Processing is fully decoupled from the interface — it runs to completion whether or not anyone is watching. The result is a markedly more stable system that no longer makes people wait on work that doesn't need them.
An omnichannel Pay-by-Link payments platform — grown from a single-client tool into a product handling thousands of transactions a day, now on its fifth, ground-up-rebuilt version.