All workStop 2

Netcoins

Crypto exchange · iOS and Android · Canada

Netcoins is a Canadian crypto exchange. It was one of Speer's clients, and my part was sign-up (onboarding) and the asset transfer screens, all in React Native.

Role
Owned sign-up and asset transfers
Years
2021–2025
Platforms
iOS, Android
Stack
React Native · TypeScript · Node.js · PostgreSQL · Redis
Published
Updated
Home page of netcoins.comNetcoins app home screen with portfolio value and balances, as shown on netcoins.com
netcoins.com, the public website for the exchange.

Context

Sign-up is the first thing a new user sees. Asset transfers are where their money moves.

Constraint

Real money made me a lot more careful about retries.

Picture a phone on a bad connection: the server finishes the transfer, the response gets lost on the way back, and the app, which has no idea, sends the whole thing again.

The problem

On top of that, the old sign-up and transfer screens were slow to load.

And there was no idempotency key, so the server had no way to tell that second request apart from a brand new transfer.

What changed

We rebuilt both flows.

Every transfer request got an idempotency key. When a key shows up that the server has already seen, it returns the first result instead of moving money again.

AppServerPOST /transferIdempotency-KeyResponse lostRetry with the same keySame key, so the first result comes back
DiagramThe same transfer request, sent twice. The idempotency key lets the server spot the retry.

Result

A retry can't send money twice.

After the rebuild, registrations went up and load time went down, around 20 to 30 percent each.