3 min read
Fintech Lending Platform

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

LayerTechnology
Backend APIJava 21, Quarkus 3.9.3, Hibernate ORM Panache, Maven
BackofficeAngular 15, Angular Material, Bootstrap 5, Tailwind CSS
Mobile appFlutter 3.24.5 / Dart
Admin consoleVaadin Flow 25, Spring Boot 4
DatabaseAWS RDS MySQL (eu-south-1)
AuthAWS Cognito (User Pool + Identity Pool, OIDC + RBAC)
MessagingAWS SQS FIFO + EventBridge
ServerlessAWS Lambda (Java + Python)
CDN / HostingS3 + CloudFront
NotificationsSES (email), SNS (SMS), FCM (push)
AI ChatbotAmazon Lex v2 + Bedrock Knowledge Base
AnalyticsAWS QuickSight
IaCAWS CloudFormation
CI/CDBuildkite
MonitoringOpenTelemetry + 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