Linkeum Wallet

Shipped a production fintech wallet in 30 days with a 2-engineer team — multi-currency, KYC, 2FA, real-time notifications. Built on Nest.js + Next.js Server Actions over a Turborepo monorepo.

Client
Tropipay (subsidiary)
Role
Full Stack Engineer
Year
2026
Timeline
30 days, blank repo to production
Nest.js Next.js Turborepo PostgreSQL Server Actions JWT 2FA
Linkeum Wallet

Problem

Tropipay needed to ship a production-grade multi-currency wallet for a new subsidiary under a hard deadline: thirty days from kickoff to first live transaction. The product had to support USD, EUR, and crypto operations, with a regulated KYC onboarding flow and the operational reliability that financial events demand. Two engineers were available, including me, plus a project manager.

The challenge wasn’t picking a stack. It was deciding what to NOT build inside the deadline — and what shape the system needed so that the things we did ship wouldn’t be torn down later.

Approach

We chose a Turborepo monorepo with a Nest.js backend and a Next.js frontend, sharing TypeScript types between the two. The decision that mattered most wasn’t the framework — it was deciding to move the real-time notification surface to Next.js Server Actions with optimistic UI, instead of standing up a full WebSocket infrastructure under the deadline.

That choice was non-obvious: most teams default to Socket.io for “real-time” out of habit. For our scope — financial events that the user is already watching for — Server Actions with optimistic updates and revalidation gave us a working surface in a week and zero operational burden afterward. WebSockets would have cost us two days of setup and a year of maintenance.

Loading diagram…
Notification surface via Next.js Server Actions — no WebSocket layer needed

The KYC onboarding was a multi-step form with conditional branches per identity-document type. We built it as a state machine in the frontend (XState) backed by a single resumable session entity in PostgreSQL, so a user dropping off at step 4 could resume at step 4, not start over.

Outcome

Shipped on day 28, two days ahead of deadline. The notification surface has run in production for months with zero pages. The KYC drop-off rate landed below the team’s pre-launch estimate, and the onboarding state machine has absorbed three feature additions without breaking change.

The architectural decision around Server Actions has held up: we never needed to revisit it. That’s the test of a good architectural call — not whether it’s clever, but whether it stays out of the way after launch.

Technologies used

Nest.js Next.js Turborepo PostgreSQL Server Actions JWT 2FA
Visuals

Screens

Wallet list showing personal EUR and USDC balancesSend money menu with three transfer types: internal, bank, and cryptoBank transfer form with currency selector, amount, description, and optional referenceMovement history with date range picker overlayUser profile with two-factor authentication section
Keep exploring

More work