A full-cycle fintech platform for employee loans: companies configure campaigns, employees apply, investors fund — the platform handles matching, credit scoring, digital signing and payment disbursement.
Stack
| Layer | Technology |
|---|---|
| Backend API | Java 21, Quarkus 3.9.3, Hibernate ORM Panache, Maven |
| Backoffice | Angular 15, Angular Material, Bootstrap 5, Tailwind CSS |
| Mobile app | Flutter 3.24.5 / Dart |
| Admin console | Vaadin Flow 25, Spring Boot 4 |
| Database | AWS RDS MySQL (eu-south-1) |
| Auth | AWS Cognito (User Pool + Identity Pool, OIDC + RBAC) |
| Messaging | AWS SQS FIFO + EventBridge |
| Serverless | AWS Lambda (Java + Python) |
| CDN / Hosting | S3 + CloudFront |
| Notifications | SES (email), SNS (SMS), FCM (push) |
| AI Chatbot | Amazon Lex v2 + Bedrock Knowledge Base |
| Analytics | AWS QuickSight |
| IaC | AWS CloudFormation |
| CI/CD | Buildkite |
| Monitoring | OpenTelemetry + Sentry |
Architecture
Six independent Quarkus microservices (auth, users, customers, borrows, lenders, chatbot) share a layered library stack of nine Maven modules — from commons and model up through business logic, notifications, audit and digital signing. All services sit behind an Apache reverse proxy on EC2.
Infrastructure spans three AWS regions: eu-south-1 (Milan) for the core platform, eu-west-1 (Ireland) for the AI chatbot workloads, and us-east-1 for ACM certificates required by CloudFront. Every environment (dev / test / prod) is provisioned from the same CloudFormation templates.
Key decisions
- Quarkus over Spring Boot — fast startup, native Panache active-record ORM, minimal footprint per container
- 100% Spot instances with CPU-based ASG — significant cost reduction with no impact on availability for this workload profile
- SQS FIFO audit pipeline — every API call is asynchronously logged to a dedicated Lambda consumer with 365-day retention in production, without adding latency to the request path
- Multi-region by design — Bedrock Knowledge Base availability constraints required routing chatbot traffic to eu-west-1 while keeping all financial data in eu-south-1
- Nine shared Maven libraries — enforces a strict dependency hierarchy (commons → model → repository → … → api-commons) to avoid circular dependencies across six independently deployable services