03Polyglot financial workflowsPersonal project
E-Invoice Platform (Nx Monorepo)
Transactional Outbox & Kafka Event Streaming
Enterprise invoicing with NestJS, Nx, Apache Kafka event streaming, polyglot persistence, and gRPC internal communication.
View source on GitHub
NxNestJSKafkaPostgreSQLMongoDBDocker
Nx Monorepo
Kafka Topics
Transactional Outbox
Polyglot DB
The engineering problem
Core Challenge
Maintaining strict financial auditability while allowing concurrent invoice queries.
Architecture Solution
Outbox Pattern with Kafka change events populating an immutable MongoDB audit log.
Resilience Guardrail
Transactional outbox ensures atomic DB write and Kafka dispatch.
Service topology & IPC protocols
Frontend BFF
Aggregates billing & invoice state for UI
Invoice Core
Tax calculation, legal validation, PostgreSQL ACID
Transactional Outbox
Polls outbox table and dispatches to Kafka
Immutable Audit Log
Append-only compliance audit trail in MongoDB
- BFF — aggregates queries for dashboards
- Invoice Core — relational state & tax engine in PostgreSQL
- Audit — append-only immutable ledger in MongoDB
- Payment Dispatcher — Kafka consumer for multi-gateway transfers
- Shared Kernel — common DTOs and proto definitions
Canonical event / payload contract
application/json{
"topic": "finance.invoice.issued",
"partition": 2,
"offset": 441029,
"key": "inv_882901",
"value": {
"invoiceId": "inv_882901",
"customerTaxId": "TRN-991209-BD",
"amount": 14500.00,
"currency": "BDT",
"status": "ISSUED",
"checksum": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
}Resilience & high availability
Transactional Outbox Pattern: Eliminates dual-write inconsistencies between PostgreSQL entity creation and Kafka messaging.
Kafka Topic Partitioning: Invoices partitioned by tenant ID guarantees strict in-order processing.
Nx Monorepo Caching: Shared DTO and Protobuf libraries built with computation caching.
Immutable Audit Trail: Write-only MongoDB replica ensures non-repudiation for financial audits.
Nx affected builds with shared libsKafka topic partitionsTransactional Outbox pattern