RSSAmplifier

Blog

susi.dev

Personal site and blog of Susi

susi.devRSS feed ↗48 posts

Latest posts

Same Content, Different CMS: A Talk from TYPO3 Developer Days 2026

I built the same website — same content, same editorial tasks — in five different content management systems (TYPO3, Strapi, Pimcore, Storyblok, Payload) and gave a talk about it at TYPO3 Developer Days 2026. Slides and live demos are public; here is the writeup.

Shippy vs. Deployer vs. Capistrano

All three deploy zero-downtime releases with the same releases/current/shared symlink pattern — Capistrano invented it, Deployer and Shippy both cite it as their inspiration. The real differences are the runtime each one needs to deploy, the config format, and what ships built in beyond the deploy itself.

Continuous Backups and Local Dev from Production with Shippy

shippy backup produces a ZIP with a database dump and shared files; shippy gitlab:upload pushes it to a package registry. Wired into a scheduled GitLab CI pipeline that becomes an automated nightly off-server backup — and the same ZIP restores straight into DDEV for local development against real production data.

Deploying TYPO3 and Pimcore with Shippy

Shippy is a single Go binary that deploys Composer-based PHP projects over SSH with zero-downtime, atomic releases. Real .shippy.yaml configs for TYPO3 v14 and Pimcore, the eight-step deploy process, and the bootstrap gotchas that only show up on a genuinely empty server.

E2E Tests for a Next.js Blog with Playwright

Set up Playwright for a Next.js site with automatic dev server management, and why its accessibility-tree-based locators mean your tests double as accessibility checks.

GitLab CI with DDEV: The DDEV Executor

Run GitLab CI/CD jobs directly inside DDEV environments — the same setup you use locally, now in your pipeline.

Local (PHP) Development with HTTPS, Traefik, mkcert and Docker

Discover Traefik and mkcert setup for HTTPS and local development. Configure Traefik, generate SSL certs, and manage (PHP) projects efficiently.

Sentry & TYPO3

Integrate Sentry with TYPO3 for real-time error tracking and performance monitoring: installation, configuration, and best practices.

Add Navigation Icons to TYPO3

Navigation icons can be a great addition to your TYPO3 website, providing a visual representation of different pages in the navigation menu.

Setting Up Persistent Local Volumes on Docker Desktop Kubernetes (WSL2 or Mac)

Set up persistent local volumes on Docker Desktop’s Kubernetes (WSL2 or Mac). Create PV/PVC, bind to a path, and keep data across pod restarts.

Use GitLab TYPO3 Project Template

GitLab provides a TYPO3 project template. Learn how to start a new project from it, run it locally with Docker, and leverage built-in CI.

Change document root of DDEV based TYPO3

How to change the docroot of a TYPO3 composer-based install while using DDEV — switch from public to html and adjust DDEV settings.

Installing / Developing Shopware 6 with DDEV

Complete guide to set up Shopware 6 on DDEV: installation, Elasticsearch, storefront/administration build & watch, HTTPS/ports, and useful tips.

TYPO3 CLI/Symfony Command, Extbase Data Import & Validation

Use a TYPO3 Symfony Console command to import data, validate entities via Extbase, and persist them with your Extbase repository.

Import / Structure Symfony Service Definition YAML Files (e.g. in TYPO3)

Import definitions from separate Symfony Dependency Injection YAML files to keep services.yaml small and maintainable (works well in TYPO3 projects).

TYPO3, Symfony Encore, Webpack & Tailwind CSS

Build a TYPO3 website with Tailwind CSS and Symfony Encore/Webpack: install, configure, and integrate assets in Fluid templates.

TYPO3 Backend Module Essentials

TYPO3 Backend Module Registration — how to register a custom TYPO3 backend module, render it with Fluid templates and register custom icons or CSS.

DDEV Xdebug Troubleshooting

Fixing Xdebug step debugging in DDEV when the client can’t connect on port 9003, especially on WSL2 and PHPStorm.

TYPO3: Autolanguage detection with PSR-15

Implement automatic language detection in TYPO3 using a PSR-15 middleware that redirects users based on Accept-Language or custom logic.

Locale-aware formatting in Fluid

Format dates, numbers, and currencies locale-aware in TYPO3 Fluid templates.

Fully integrate DDEV and PhpStorm (incl. unit tests with coverage) — Update 2021

Run tests with coverage and debug inside DDEV from PhpStorm: interpreters, path mappings, Xdebug, and PHPUnit config.

Compile PHP8 on Windows WSL2 Ubuntu

Build (and alternatively install) PHP 8 on WSL2 Ubuntu: prerequisites, configure flags, make install, switching versions, and troubleshooting.

PHP Performance Over Time

A look at PHP performance evolution across versions based on common micro-benchmarks and real-world tasks.

PHP 8 JIT Benchmarks (Symfony context)

Exploring PHP 8’s JIT impact in a Symfony-style workload: expectations vs. reality.

Generate Code Coverage with native PHP Debugger (no Xdebug required)

Use phpdbg to generate PHPUnit coverage without Xdebug – faster startup, simple CI usage, and easy IDE integration.

TYPO3: Using image crop variants with focus and cover areas

Configure and use TYPO3 image crop variants (focus/cover areas) in TCA and Fluid to deliver correctly cropped/responsive images.

TYPO3: Extending the configuration module

Extend the TYPO3 Configuration backend module to expose custom settings, readers, or debug info for your extensions.

Run TYPO3 Tests with PHP8

Run TYPO3 core/extension tests with PHP 8 locally: requirements, Composer constraints, and invoking the test runner.

TYPO3 TCA Tree with non-database items

Provide a TCA tree (renderType=selectTree) backed by a custom data provider (non‑DB source) for configuration-like selections.

TYPO3 <3 Symfony: dump() + dd()

Use Symfony VarDumper’s dump()/dd() effectively in TYPO3 for quick, readable debugging in CLI and backend contexts.

Useful Commands

Handy Bash and SQL snippets I reach for regularly: search/replace, one‑liners, and maintenance helpers.

Prometheus + Grafana + Loki with docker-compose

Spin up a local observability stack (Prometheus for metrics, Loki for logs, Grafana for dashboards) using docker-compose with minimal configs.

PSR-15 Middleware: Add custom header in TYPO3

Small PSR‑15 middleware example for TYPO3: register a middleware that appends a custom HTTP response header.

Create Date Table in Microsoft Power BI

Create a reusable custom date table in Power BI using Power Query (M) with fiscal year support and handy helper columns.

Mock HTTP API Responses with Guzzle (PSR-18/PSR-7)

Mock HTTP responses and verify requests in unit tests using Guzzle’s MockHandler and History middleware with PSR-18/PSR-7 clients.

Promtail Pipeline for Caddy Logs

Ingest Caddy access logs with Promtail: configure scrape job, parse logfmt/json, extract labels and fields, and forward to Loki/Grafana.

TYPO3: Migrate Fluid pagination widget to paginator API

TYPO3 v10 deprecated and v11 removed Fluid widgets. Replace the Fluid pagination widget with the native Paginator API introduced in TYPO3 10.2.

Supervisor / "Pseudo Cron Jobs" in DDEV

Use the built-in supervisord in DDEV to run long-running workers (e.g. Symfony Messenger) and emulate cron-like intervals for TYPO3 Scheduler without extra services.

Composer 2 performance tests – Shopware & TYPO3

Measuring Composer 2 vs. Composer 1.10 on real projects (Shopware 6 and TYPO3) — setup, commands, and the impact on day‑to‑day DX.

A quick look at hCaptcha - I am human!

Overview of hCaptcha, key settings, integrations (Laravel, Symfony), and how to use it in TYPO3 via an EXT:form element.

Integrating PHPStan in PhpStorm / PHPStan Pro

Install and configure PHPStan for your project and wire it into PhpStorm – including baselines, framework stubs, and running inside Docker/DDEV.

TYPO3 test coverage in under 2 minutes with PhpStorm + phpdbg

Generate fast code coverage for TYPO3 (or any PHP project) using phpdbg — run from PhpStorm or CLI without Xdebug, with tips for setup and troubleshooting.

Twig: Migrate transchoice to trans with ICU messages

How to migrate from Twig's deprecated transchoice to trans using ICU messages: rename files, rewrite messages, pass variables, and register ICU resources.

Fully integrate DDEV and PhpStorm – including Unit Tests with Coverage

Configure PhpStorm to run everything inside DDEV: CLI/Composer, PHPUnit with coverage, debugging (Xdebug), and quality tools – fully integrated.

Workaround: Working Swagger Docs for Store API in Shopware 6

Enable the Swagger UI for Shopware 6 Store API in dev/test despite CSP blocks by adjusting DI parameters; plus tips for mocking with Prism.

My 2020 Dev Environment

A snapshot of my 2020 development environment: IDEs, terminals, tooling, and quality-of-life tweaks.

Prism, CKEditor, TYPO3

Add syntax highlighting with Prism.js to TYPO3/CKEditor: include assets, configure CKEditor, and render highlighted code blocks.

TYPO3, Bootstrap 4 & Webpack

Wire Bootstrap 4 into a TYPO3 site package and bundle assets with Webpack: project structure, configs, and Fluid integration.