SD-Sy7 — Application Architecture Overview
Date: 2026-05-25 Stack: Symfony 8.0 · PHP 8.2+ · Doctrine ORM 3.x · MariaDB · Twig · Symfony UX
1. What is SD-Sy7?
SD-Sy7 (codename SeriousDesign) is a monolithic Symfony web application that bundles several domain modules behind a single deployment unit. It serves as both a public-facing website and an internal management platform, covering project management, event ticketing, content authoring, personal-development tracking, and more.
2. High-Level Architecture
graph TB
subgraph Client ["Client Layer"]
Browser["Browser / PWA"]
end
subgraph Symfony ["Symfony 8.0 Application"]
direction TB
Router["Router<br/><i>i18n prefixes (en|de|es)</i>"]
Security["Security Firewall<br/><i>form_login · CSRF · remember_me</i>"]
Controllers["Controllers"]
Twig["Twig Templates<br/><i>+ UX Components · Turbo · Stimulus</i>"]
Messenger["Messenger Bus"]
Mailer["Mailer"]
end
subgraph Domains ["Domain Modules"]
direction LR
PM["Project Management<br/><i>Project · Task · Milestone</i>"]
EM["Event Management<br/><i>Event · Reservation · Ticket</i>"]
CM["Content Management<br/><i>Block · GridBlock · SimpleBlock</i>"]
PD["Personal Development<br/><i>Habit · HabitRecord</i>"]
SEC["Security & Users<br/><i>User · Roles · Profiles</i>"]
BLOG["Blog<br/><i>Markdown Reader</i>"]
ADMIN["Admin Panel"]
API["REST API<br/><i>Milestone · Task endpoints</i>"]
end
subgraph Data ["Data Layer"]
Doctrine["Doctrine ORM 3.x"]
MariaDB[("MariaDB")]
Migrations["Migrations"]
end
subgraph Infra ["Infrastructure"]
Docker["Docker Compose"]
GitLabCI["GitLab CI/CD"]
Prometheus["Prometheus Metrics"]
end
Browser --> Router
Router --> Security
Security --> Controllers
Controllers --> Domains
Controllers --> Twig
Twig --> Browser
Controllers --> Messenger
Controllers --> Mailer
Domains --> Doctrine
Doctrine --> MariaDB
Doctrine --> Migrations
Symfony --> Docker
Symfony --> GitLabCI
Symfony --> Prometheus
3. Domain Modules
| Module | Entities | Purpose |
|---|---|---|
| Project Management | Project, Task, Milestone, TaskExecution |
Kanban-style project & task tracking with milestones |
| Event Management | Event, Reservation, Ticket, ReservationType |
Event ticketing, QR-based validation, reservation workflows |
| Content Management | Block, GridBlock, SimpleBlock |
CMS-style editable content blocks for page composition |
| Personal Development | Habit, HabitRecord |
Daily habit tracking with status history |
| Security & Users | User, PersonalProfile, ProfessionalProfile |
Authentication, role-based access, user profiles |
| Blog | — (file-based Markdown) | Renders Markdown files from docs/blog/ as blog posts |
| Admin | — | Administrative dashboard for user & content management |
| API | — | REST endpoints for Milestone and Task resources |
4. Technology Choices
| Concern | Tool | Notes |
|---|---|---|
| Framework | Symfony 8.0 | Latest LTS-style components |
| ORM | Doctrine ORM 3.x + Migrations | MariaDB via Docker (compose.yaml) |
| Frontend | Twig + Symfony UX | Stimulus, Turbo Drive, Twig Components |
| CSS | Sass (via symfonycasts/sass-bundle) |
Compiled through Asset Mapper |
| QR Codes | endroid/qr-code 6.x |
Event ticket validation |
| Markdown | league/commonmark |
Blog post rendering |
| Metrics | promphp/prometheus_client_php |
Application-level metrics |
| Fixtures | Zenstruck Foundry | Test & dev seed data |
| CI/CD | GitLab CI (.gitlab-ci.yml) |
Automated pipeline |
| Containerization | Docker Compose | MariaDB service |
| Code Quality | PHPStan, PHP-CS-Fixer, PHPUnit | Static analysis, formatting, testing |
5. Request Lifecycle
sequenceDiagram
participant C as Client
participant R as Router
participant S as Security
participant Ctrl as Controller
participant Dom as Domain / Service
participant D as Doctrine ORM
participant DB as MariaDB
participant T as Twig
C->>R: HTTP Request
R->>R: Match route (i18n prefix)
R->>S: Authenticate & authorize
S->>Ctrl: Dispatch to Controller
Ctrl->>Dom: Domain operation
Dom->>D: Persist / Query
D->>DB: SQL
DB-->>D: Result
D-->>Dom: Entity / Collection
Dom-->>Ctrl: Domain result
Ctrl->>T: Render template
T-->>C: HTTP Response (HTML / JSON)
6. Directory Layout (Key Paths)
├── config/ # Bundle configs, routes, services
├── migrations/ # Doctrine migrations
├── public/ # Web root, service worker, uploads
├── src/
│ ├── Command/ # CLI commands (per domain)
│ ├── Controller/ # Controllers (grouped by domain)
│ ├── Entity/ # Doctrine entities (grouped by domain)
│ ├── Form/ # Symfony form types
│ ├── Repository/ # Doctrine repositories
│ ├── Factory/ # Foundry factories
│ ├── Twig/ # Twig extensions & subscribers
│ ├── Traits/ # Reusable entity traits
│ └── Enum/ # PHP 8.1+ enums
├── templates/ # Twig templates (grouped by domain)
├── assets/ # Frontend assets (images, SCSS)
├── tests/ # PHPUnit tests
├── docs/ # Documentation & blog Markdown files
└── compose.yaml # Docker services (MariaDB)
7. Internationalization
The application supports three locales routed via URL prefixes:
| Locale | Prefix | Default |
|---|---|---|
| English | / |
✅ |
| Spanish | /es |
|
| German | /de |
Locale resolution is handled at the routing level in config/routes.yaml and propagated through the LocaleSubscriber.
8. Security Model
- Authentication: Form-based login with CSRF protection and "remember me" (31-day lifetime).
- Authorization: Role-based access control (
UserRolesenum) with firewall rules inconfig/packages/security.yaml. - User impersonation: Enabled via
switch_userfor admin debugging. - Session: Lazy-started, stored server-side.
This document provides a snapshot of the architecture as of May 2026. For implementation details, refer to the source code under src/ and the configuration in config/.