
How I Refactored My Symfony Application with Clean Architecture and DDD
How I moved a growing Symfony platform from technical folders to bounded contexts, inward dependencies, explicit ports, and architecture checks with Deptrac.
Engineering notes
Practical notes on software engineering, backend systems, frontend architecture, deployments, and applied research.

How I moved a growing Symfony platform from technical folders to bounded contexts, inward dependencies, explicit ports, and architecture checks with Deptrac.
July 24, 2026
How to build a durable payment workflow around FlexPay using Orders, Payment Transactions, signed webhooks, idempotent fulfillment, and a migration path from a legacy billing model.
July 23, 2026
Using named domain exceptions to express rejected business rules, roll back commands, cross Symfony Messenger safely, produce RFC 9457 problem responses, and separate expected failures from real incidents.
July 23, 2026
Why reading the system clock inside business logic creates nondeterministic behavior, and how an explicit Clock port makes expiry, validity, scheduling, persistence, and time-sensitive tests predictable.
July 23, 2026
A practical testing architecture for combining fast domain tests, executable Behat application specifications, in-memory ports, deterministic time, real Symfony boundaries, and focused infrastructure tests.
July 22, 2026
A practical frontend architecture for sharing API contracts, validating responses, fetching during SSR, caching in React, forwarding authentication through a BFF, and keeping mutations synchronized with Symfony.
July 21, 2026
A complete authentication flow from a type-safe login form to Symfony Security, rotating refresh tokens, server-side web sessions, protected API requests, logout, recovery, and federated login.
July 21, 2026
Using CQRS, Doctrine DBAL, and application-owned read models to fetch exactly the data an interface needs without hydrating ORM entities.
July 21, 2026
Modeling structured domain values in PHP, persisting them as PostgreSQL JSONB through custom Doctrine types, and validating the same contract in TypeScript with Zod.
December 4, 2025
A React data-fetching pattern using TanStack Query, custom hooks, and a small REST API DSL.
November 17, 2025
A migration from offset pagination to keyset pagination with PostgreSQL, Drizzle, tRPC, and Next.js 16.
November 11, 2025
A shared UI library setup for a Bun and Turborepo monorepo using Next.js 16, React 19, Tailwind CSS v4, and shadcn/ui.