A transactional notification service with NestJS and Brevo
How to structure a dedicated NestJS notification service, sync versioned HTML templates to the Brevo API, and decouple delivery through RabbitMQ.
- Engineering
- Integrations
- Architecture
The journal documents delivery, architecture, cloud, AI and SaaS product topics.
How to structure a dedicated NestJS notification service, sync versioned HTML templates to the Brevo API, and decouple delivery through RabbitMQ.
How we built Cercly's AWS infrastructure with Terraform — VPC, EC2, RDS, ECR, Route53, ACM, OIDC — so the entire production environment can be recreated with a single apply.
A reading of Cercly's SaaS architecture focused on application boundaries: shared design system, separate frontends, dedicated BFFs, business APIs and shared infrastructure.
How we connected GitLab CI to AWS via OIDC, with a tight trust policy, one role for all projects, and the ACLSizePerRole limit we almost hit.
Why we deploy to EC2 through AWS Systems Manager instead of direct SSH, what that really simplifies, and what it does not replace.
A multi-service provisioning implementation that cleanly separates business orchestration, asynchronous execution and tenant activation in a real SaaS architecture.
How to hold multiple tenants in the same PostgreSQL database with a Platform entity, a PlatformAware trait and a per-request Doctrine filter.
How we built an invitation and login-code flow with hashing, expiration, lockout and IP-level guardrails.
Why a well-placed BFF can act both as a safer web-session boundary and as a data-shaping layer for the frontend.
Why we split the customer portal and the operator console into two Next.js apps, and what that separation removed from the codebase.
When to use RabbitMQ in a SaaS platform, which flows should go through it, and how it helps decouple provisioning, notifications and selected business workflows without event-driving the whole system.
A look at the technical choices behind Cercly — from the dev environment to production, across microservices, mobile, and AI-assisted delivery.
Why we removed jose from our Next.js stack, and the Web Crypto code that replaced it without breaking once since.
A few simple principles to accelerate delivery without creating technical debt that blocks the next iterations.
A solid architecture is not the most ambitious-looking one, but the one that stays readable when the context changes.