Problem
Financial institutions needed a white-label backend covering the full client lifecycle — onboarding, KYC, investing, transactions, reporting — behind secure, well-documented APIs, integrating with core banking systems.
What I built
A modular NestJS backend exposing domain services (onboarding, KYC, portfolios, transactions, reports) plus BFF layers tailored for mobile and web clients. Banking integrations were isolated behind adapters so partner-specific quirks never leaked into core domains.
Architecture / technical decisions
- BFF per surface: mobile and web get purpose-built aggregation layers.
- Adapters for banking: each integration behind a contract, swappable and independently testable.
- Polyglot persistence: PostgreSQL for relational domains, MongoDB for flexible documents, Oracle for bank-side integration, Redis for caching/locks.
- Async workflows: RabbitMQ + background workers for long-running and event-driven processes.
- Observability: Swagger/OpenAPI contracts, Sentry, SigNoz tracing.
Result / impact
A reusable platform powering multiple financial-institution deployments with consistent security and reporting.
Lessons learned
In fintech, contracts and observability are features. Clear API contracts and end-to-end tracing shortened every incident and every integration.
