Building a full stack SaaS as lead tech
A look at the technical choices behind Cercly — from the dev environment to production, across microservices, mobile, and AI-assisted delivery.
- Architecture
- Engineering
- DevOps
- SaaS
Owning an entire technical stack — from design to production — is as much an exercise in coordination as it is in technical skill. Cercly, our SaaS platform for managing associations, is a concrete illustration of that.
Stack choices
The core business layer is built on Sylius in headless mode, exposed through API Platform. Sylius provides a solid foundation for e-commerce resources (memberships, payments, catalog) without starting from scratch. API Platform structures the REST layer with native typing and documentation. Symfony holds it all together: dependency injection, Messenger for async processing, FrankenPHP as the application server.
The operator plane is handled separately with NestJS — modular architecture, strong typing, independent deployment cycle. Between frontends and APIs, dedicated NestJS BFFs serve each interface. This pattern isolates each client from API changes, centralises session management, and keeps frontends lean.
Interfaces are built with Next.js App Router — a public portal, an association dashboard, an operator dashboard, each with its own release cycle. An iOS/Android app with Expo completes the picture. All interfaces share a common design system built on TailwindCSS, ensuring visual consistency without duplication.
Event-driven where it matters
Some parts of the system — notifications, Mollie payments, cross-domain synchronisation — go through RabbitMQ. The choice is deliberately targeted: not everything is event-driven, only what needs to be decoupled and resilient. Everything else stays synchronous and readable.
Infrastructure as part of the product
The local development environment runs on Docker Compose with Traefik, per-service .local domains, and a Makefile that clones every repo and starts the whole environment with a single command. Zero friction to onboard.
Staging and production are managed with GitOps: Terraform for AWS infrastructure, GitLab CI per repo — lint, unit and e2e tests (PHPUnit, Behat, Jest, Playwright), Docker build, ECR push, SSM deployment. Every merge on the relevant branch triggers the full chain. Production access never goes through direct SSH.
AI as an execution lever
Claude and ChatGPT are integrated into the daily development loop — not to replace architectural decisions, but to accelerate execution once those decisions are made. Boilerplate generation, debugging, spec writing, configuration review. On certain tasks, the gain is real and measurable.
The real challenge is not mastering each technology individually. It is keeping the whole stack coherent over time, as every layer evolves at its own pace.