Lonn


Context
B2B SaaS for wellness centers: a staff scheduling module on the manager side (pre-payroll-style, working-time rules) and an appointment booking system on the client side. The MVP was built as a team via Le Collectif 40, and I was responsible for the backend architecture, the data model and the server-side technical choices.
My approach
My job on the server side: lay an architecture that holds, model a clean database that lets two scopes coexist (HR scheduling and client bookings) without them bleeding into each other, and expose it all through a custom Symfony BFF API. I stayed in continuous dialogue with the client, who acted as product owner, and every scope trade-off and every business rule got discussed before it was settled. I kept strict MVP discipline: cut what doesn't fit V1 rather than ship late.
- Backend architecture and data model designed to let two scopes coexist (staff scheduling and client bookings) without stepping on each other.
- A Symfony BFF API designed for a single client (the Vue front-end): aggregation, clear contracts, business-rule validation centralized server-side.
- MVP scope held: cut feature by feature to lay clean foundations, ready to be extended.
Stack & technical choices
Symfony was requested by the client, a solid framework for carrying business logic. PostgreSQL for persistence: a mature ORM and relational guarantees that pay off the moment HR data and calendar data start mixing. On the front, Vue + TypeScript, built by another team member, gave us a stable, typed API contract and a front that doesn't duplicate the logic.
Outcome & takeaways
MVP shipped. Nothing louder than that: the goal was to lay the foundations cleanly and hold the scope. For me, this was the project where the discipline of what does NOT belong in V1 sat at the heart of the brief, and where the architecture I set early on directly determined how fast we could deliver.