Skip to content
2 min read Keyson

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.

Keep reading

A few related articles to extend the topic and keep the internal linking strong.

7 min

RabbitMQ in a SaaS platform: where to use it, and why

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.

  • Integrations
  • Engineering
  • Architecture
Read the note