i5dr0id

Work / Brails, 2026

Rebuilding a payments platform while it ran

Two Angular portals rebuilt in React 19 and a stablecoin service rewritten from NestJS to Go, on a live cross-border payments product.

@@ customer app, admin dashboard, stablecoin service @@
Angular 6 customer app
React 19, six weeks, feature parity
Angular 6 admin dashboard, 18 modules
React 19, five weeks
NestJS stablecoin service
Go (Fiber) with the complete send and receive flow

Context

Brails gives African businesses cross-border payments, multi-currency wallets and virtual cards through an API. When I joined, the platform was mid-migration: the original TypeScript and NestJS services were being rewritten in Go, and the Angular customer portal was due to be rebuilt in React. Customers were sending money through all of it the whole time.

What I built

Three migrations in six months, each on a product with paying users and a compliance team watching.

  • The customer-facing application, from Angular 6 to React 19 in six weeks with feature parity: authentication, KYC and compliance, wallets, transactions, virtual cards and accounts, beneficiaries, bulk payments, stablecoin, developer keys and webhooks.
  • The internal operations dashboard, 18 modules for the ops, compliance and finance teams, from Angular 6 to React in five weeks.
  • The stablecoin payment service, from NestJS to Go, delivering the complete send and receive flow from deposit-address generation through provider callbacks, plus its React integration.
  • USD virtual-account creation, and the KYC and compliance onboarding defects that were blocking customers.
  • Production incident investigation across fiat and stablecoin rails, traced from the UI through the Go services to provider webhooks.

How

The React rewrite started with a baseline other engineers could inherit: TypeScript, Vite, Tailwind v4 with shadcn and Radix, TanStack Query for server state, React Hook Form with Zod for forms, code-split routes, and lint, format and commit hooks wired in on day one. The Go side sat inside a platform built on GoFiber, Uber FX for dependency injection, Bun ORM, PostgreSQL and Redis, with goose migrations.

Sequencing mattered more than any single component. Work was ordered so each new Go endpoint shipped alongside the screen that consumed it, and the legacy calls were shimmed through a rewrite layer rather than cut over all at once.

Outcome

Both applications reached parity and replaced their Angular predecessors in eleven weeks combined. The stablecoin flow moved onto the Go service. I also wrote the stablecoin API documentation and the end-to-end sequence diagrams, client to API to payments service to custody provider, that the frontend and integration partners worked from.