PHP
Production-ready PHP-FPM and PHP-CLI images for PHP 8.2–8.5 with 50+ extensions, Composer, WP-CLI and a configurable Node.js.
Each case study covers the problem, what I built and what happened after. Every number comes from the codebase or production.
Shipped to production. Licenses verify offline, so a vendor outage never stops a paying customer, and support moved from engineering to audited operator actions.
In use since May 2026: 1,027 AI-written listings and 27 upload-ready catalog exports. Cataloging moved from writing to reviewing.
Shipped in 2025. Staff upload a file and review finished lots, and the model is never allowed to invent stone counts, carats or metal purity.
v1 shipped February 2025. Sites, SSL, PHP, databases, backups and WordPress itself are run from the browser, with Stripe billing on top.
In use from 2021 to 2023. Any leaked recording traces back to one student, and course access matches how courses are sold — at a center, at home, or both.
Built in 2026 for an internal product: zero inbound ports on any machine. Commands run in order per machine and in parallel across the fleet, and every command gets an answer.
Built and ready for launch, pending the hospital's final information. Staff can run the whole site — consultants, schedules, fees and notices — from the admin, without a developer.
The site is live, with free tools and AI access. The portal is built, security-reviewed and tested by 466 checks in CI, and launches with the first client.
Production-hardened server images and tooling I run myself — published on Docker Hub and GitHub for anyone to use.
Production-ready PHP-FPM and PHP-CLI images for PHP 8.2–8.5 with 50+ extensions, Composer, WP-CLI and a configurable Node.js.
FrankenPHP with a custom-compiled Caddy (16 plugins), 50+ PHP extensions, Composer and WP-CLI — ready for Laravel, Symfony and WordPress.
Caddy with automatic HTTPS plus the plugins the official image lacks: Souin HTTP caching, OWASP Coraza WAF, rate limiting, IP-range blocking and DNS challenges.
Stock nginx plus dynamic modules it does not ship: ModSecurity 3 with OWASP CRS, Brotli, Zstandard, GeoIP2, VTS metrics, cache purge and OpenTelemetry.
Official Apache, configured: static files by default, PHP over FastCGI with one line. An -origin variant for use behind a proxy idles at about half the memory.
Manage the Caddy Souin cache from WP Admin: browse cache keys, purge by key or regex, and invalidate automatically when content changes.