
SecurePay — Multi-Currency Digital Wallet
A microservices digital wallet — React Native app on a FastAPI backend, with live-rate cross-currency transfers and real-time fraud screening.
The Client
SecurePay is a from-scratch exploration of what a real fintech wallet backend needs: email verification, multi-currency balances, live-rate conversion, and fraud screening — the parts of a payments product that matter most once real money moves.
The Brief
Consumer wallet apps need to move money instantly while still screening for fraud and handling currency conversion correctly — three concerns with very different performance and failure characteristics that are easy to tangle together in one codebase.
What Shipped
Split the backend into six services by responsibility rather than by database table: a gateway that rate-limits and routes, user and wallet services for account state, a transaction service that handles atomic cross-currency transfers, a fraud service that scores transfers synchronously before they settle, and a notification service that reacts to completed-transfer events asynchronously over RabbitMQ so a slow email provider never blocks a transfer from completing.
How it was built
Each service owns its responsibility and failure mode: fraud screening is a synchronous, fail-closed call on the critical path (a timeout holds the transfer for review rather than letting it through unscreened), while notifications are fully decoupled via a message queue since a user shouldn't wait on an email to send. All services share one Postgres instance with separate schemas — deliberately not one database per service — since true per-service databases weren't justified at MVP scale.
Deciding what actually deserved its own service, rather than splitting by database table out of habit, was the real design work — the test used was whether a piece had a distinct failure mode that shouldn't be able to take down the others.
Results & reach
A working microservices wallet demonstrating fintech-specific patterns: fail-closed fraud screening on the critical path, event-driven notifications off it, and multi-currency ledger correctness — the architecture concerns that matter once a wallet handles real transfers.
Screens
Home dashboard — multi-currency balance, quick actions, and recent activity.

Sign-in — email/password auth in front of the wallet.
