Back

Loading…

Documentation

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 (UserRoles enum) with firewall rules in config/packages/security.yaml.
  • User impersonation: Enabled via switch_user for 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/.

Contents