Cumulative Layout Shift measures visual instability — how much the page content moves around while loading. Google uses it as a Core Web Vital, and a poor CLS score (above 0.25) directly affects rankings. The target is 0.1 or below at the 75th percentile. This article goes through every major cause with production-ready code fixes, covering images, web fonts, dynamic content, ads, and Drupal-specific patterns.
Pre-built Emacs configurations like Doom Emacs and Spacemacs are impressive. They give you a working, polished setup in minutes. But they are also someone else's opinion about how Emacs should work, and when something breaks — or when you want to understand what is actually happening — you are left reading hundreds of files written by strangers.
Getting Xdebug 3 working through a Docker/Nginx stack is the kind of task that takes an afternoon if you don't know the networking pitfalls. This guide cuts straight to a working configuration, explains every setting, and covers both PhpStorm and Emacs (DAP Mode) as IDE targets.
The Drupal Entity API is the backbone of every non-trivial Drupal project. Nodes, users, taxonomy terms, and media items are all content entities. When you need structured data that does not map neatly to a Node — say, a service ticket, a product, an event log entry — you build a custom content entity. In Drupal 11 with PHP attributes replacing annotations, the developer experience is cleaner and more IDE-friendly than ever.
Drupal has an excellent security track record at the core level, but production breaches consistently come from misconfigurations, outdated contributed modules, overly permissive file system settings, and missing server-level controls. This checklist covers every layer: Drupal application, file system, database, Nginx/PHP-FPM, and monitoring. Apply these in order; each section builds on the last.
HTTP/2 has been the default for production Nginx deployments for years. HTTP/3, built on QUIC, is now a first-class Nginx feature as of version 1.25.0 — available in the official Nginx mainline and stable packages without custom builds. This guide covers enabling both protocols correctly, including TLS requirements, firewall rules, verification, and the gotchas that catch people out.
PHP 8.4, released November 21 2024, ships a feature that immediately earns its keep in any domain-model-heavy codebase: asymmetric property visibility. You can now declare a property's read scope and write scope independently, in a single declaration — no boilerplate getters, no magic __set guards, no readonly trade-offs.
This article covers the full syntax, every valid modifier combination, the interaction with readonly and property hooks, and a set of patterns drawn from real Drupal and PHP application code.
PHPStan is now used by 36% of PHP projects — a jump driven by modern frameworks, Drupal core's own adoption, and the realisation that type errors caught at analysis time cost nothing compared to type errors caught in production. This guide walks through a practical PHPStan setup from zero, including Drupal-specific extensions, baseline management, and CI integration.
PHP-FPM (FastCGI Process Manager) is the standard way to run PHP behind Nginx. Its defaults are conservative and will not serve a production Drupal or PHP application efficiently. This guide explains how PHP-FPM's process models work, how to calculate appropriate pool sizes, and the configuration directives that make the difference between a server that performs and one that melts under load.
Magit is not a thin wrapper around Git. It is a complete reimagining of the Git workflow inside a text editor, and it is almost universally cited as the single Emacs package that converts sceptics. After one week with Magit, most developers find the command-line Git UX intolerable by comparison.
This guide covers installation, the core status/staging workflow, branching, interactive rebasing, stashing, bisect, and a set of keybindings worth committing to muscle memory. It assumes Emacs 29+ and Git 2.40+.