Backend & web applications
eBank · multi-tenant banking SaaS
A multi-tenant banking SaaS platform: each organization manages its customers, accounts, simulated transfers and permissions, strictly isolated from the others. Spring Boot, React and MySQL, with a transactional transfer engine, automated tests and deployment on AWS.
- In active development
- Individual project
- roles, from client to platform admin
- 4
- controlled steps per transfer
- 9
- transaction for debit and credit
- 1
- separate layers, from React to AWS
- 6
01Starting point
Context & mission
The problem
In a financial application, bugs do not show up on screen: they are a wrong balance, a transfer counted twice, or one organization reading another’s data. These are exactly the risks demo banking projects usually ignore.
The mission
Design a banking simulation platform as a real SaaS product: organization isolation, transfers that stay consistent under concurrency, server-side security, tests that check business invariants, then containerization, CI and cloud deployment. No real payments, no real banking network.
My role
A personal project I evolve step by step: domain modelling, business rules, security, testing, containerization, CI/CD and AWS infrastructure.
02Execution
What I did
Multi-tenant architecture
Data isolated per organization: customers, accounts, transactions and admin resources are only reachable inside their tenant. Four roles (platform admin, organization admin, agent, client), with authorization enforced in the backend.
Transfer engine
Server-side validation of amount, status, ownership and balance; atomic debit and credit in a single transaction; concurrency control against inconsistent balances; idempotency against duplicate requests; explicit rollback on failure.
Ledger and integrity
Consistent debit and credit entries for every transfer, persisted in the same transaction; completed records protected from modification; reconciliation checks between balances and recorded movements.
Security
Stateless JWT authentication, hashed passwords, RBAC with Spring Security, server-side ownership and tenant checks, request validation, consistent API errors, environment-based secrets and an audit trail of sensitive operations.
SaaS administration
Organization and user management, subscription plans and usage quotas enforced by the backend, subscription statuses and simulated billing. Platform administration is kept separate from organization permissions.
React interface
Dedicated views for customers, agents and administrators; account dashboards and paginated history; transfer forms with validation and confirmation; search, filters, loading, empty and error states; protected navigation.
Testing strategy
Unit tests for business rules, API and security tests, database integration with Testcontainers, regression tests for rollback and duplicates, concurrency tests on shared accounts, front-end and end-to-end tests, all run in CI.
DevOps & AWS
Docker and Docker Compose for reproducible environments; GitHub Actions for tests, builds and deployment, with short-lived AWS credentials through GitHub OIDC; infrastructure described as code.
03Design
Architecture
A modular monolith, split by business responsibility rather than into needless services: identity, organizations, customers, accounts, transfers, ledger, subscriptions and audit. Presentation, API, domain, persistence, security and infrastructure layers stay separate. The MySQL model uses relational constraints, indexes, precise decimal types for money and versioned migrations.
- PresentationReact · routes · forms
- REST APIControllers · DTOs · validation
- DomainRules · transfers · subscriptions
- PersistenceJPA · Hibernate · MySQL
- SecuritySpring Security · JWT · tenant isolation
- InfrastructureDocker · Nginx · CI/CD · AWS
- Access checkJWT · permissions · tenant
- ValidationAmount · status · currency · balance
- IdempotencyNo double processing
- TransactionConcurrency control
- Debit · credit+ ledger entries
- CommitOtherwise full rollback
- CloudFront + S3React front end · CDN
- ECS FargateContainerized Spring Boot API
- RDS for MySQLManaged database
- IAMLeast privilege
- Secrets ManagerSensitive configuration
- CloudWatchLogs · alerts
- Certificate ManagerTLS
- Terraform / CloudFormationInfrastructure as Code
- GitHub ActionsCI/CD · OIDC
04Impact
Results
- A complete engineering project: front end, backend architecture, relational model, authentication, authorization, transactions, testing, containerization and cloud deployment.
- Business invariants protected by code and by tests: consistent balances, traceable transfers, isolated organizations.
- An openly educational simulation: no real payments, no real banking network.
05Wrap-up
Takeaways
What this project provesThat I can reason about business-critical workflows, design reliable REST APIs, enforce security boundaries, guarantee data integrity and take an application all the way to the cloud, with tests at every step.
06Technology
Full stack
- Java 17
- Spring Boot 3.2
- Spring Security
- Spring Data JPA
- Hibernate
- JWT
- Bean Validation
- MySQL 8
- React 19
- React Router
- Axios
- JUnit 5
- Mockito
- MockMvc
- Testcontainers
- Vitest
- React Testing Library
- Playwright
- Docker
- Docker Compose
- Nginx
- GitHub Actions
- AWS ECS Fargate
- Amazon RDS
- Amazon S3
- CloudFront
- AWS IAM
- Secrets Manager
- CloudWatch
- Terraform