Architecture

Modular monolith with ports and adapters

Domain-driven design with clear module boundaries, anti-corruption layers and cloud-native deployment — built for auditability, scale and operational clarity.

Domain Modules

Clean boundaries, clear responsibilities

Each domain module owns its data, exposes clear interfaces and communicates through well-defined ports.

Identity

Authentication, JWT tokens, session management and user identity.

Customer

Customer profile management, data model and lifecycle.

KYC

Know Your Customer workflows, verification states and compliance review.

Accounts

Account creation, management and lifecycle with core banking integration.

Payments

Payment initiation, lifecycle management and settlement tracking.

Beneficiaries

Beneficiary management for INTERNAL, SEPA and SWIFT payment types.

Ledger Orchestration

Transaction recording, ledger operations and reconciliation foundation.

Audit

Immutable audit event logging with JSONB context and correlation tracking.

FX

Foreign exchange quotes, confirmations and execution with rate provider abstraction.

Payment Lifecycle

SEPA payment lifecycle with full state tracking

Every payment transitions through well-defined states — from creation through screening, submission and settlement — with audit events at each transition.

CREATED
SCREENING
ACCEPTED
SUBMITTED
SETTLED
REJECTED
RETURNED
CANCELLED

Payment rails: INTERNAL, SEPA, SWIFT — each with rail-specific lifecycle extensions.

Anti-Corruption Layer

Clean domain isolation through adapter ports

Core banking integration is isolated behind a well-defined port boundary. The dolfin pay domain model remains clean and independent.

// Port interface
interface CoreBankingPort {
createAccount(cmd: CreateAccountCommand): AccountResult
getBalance(accountId: String): BalanceResult
postTransaction(cmd: TransactionCommand): TransactionResult
}
// Adapter implementation
class FineractAdapter : CoreBankingPort {
// Translates domain commands to Fineract REST API calls
// Maps external errors to domain exceptions
// Retry with backoff for transient failures
}
Deployment Topology

Cloud-native on Google Cloud Platform

Designed for GCP Cloud Run with managed PostgreSQL, secret management and CI/CD.

GCP Cloud RunCloud SQL (PostgreSQL 16)Secret ManagerArtifact RegistryCloud Buildeurope-west1

Want to understand the architecture in depth?

Book an architecture walkthrough with our engineering team.