Blog
My blog on web development, AI, digital practice and everything that keeps me building for the web — from more than two decades of experience.
This is where I write about what I run into in everyday web work — technology, AI, tools and methods. The topics will broaden over time; it starts with a series on SEO and GEO. Below you'll find all posts, newest first.
Latest posts
-
Installing and setting up zsh: from apt to a lean .zshrc
Install zsh, make it your default shell and set it up: lean without a framework or with Oh My Zsh, with plugins, prompt, startup times and uninstall.
-
Node2Shell and the question that follows: how to install, manage and update Node.js
The Brotli flaw in Node.js explained briefly, the parallel to PHP2Shell — and every way to install and update Node.js, from NodeSource to Docker.
-
PHP2Shell: What you need to do now — and why static sites stay calm
Two critical PHP flaws, an attack without login, websites taken offline: what is behind PHP2Shell, a step-by-step guide, a checklist and the lessons for architecture.
-
Updates for deactivated plugins: how my WordPress plugins update each other
WordPress doesn't run deactivated plugins, so it doesn't run their updater either. How updater 1.5.0 solves this for my plugin collection: registry, leader election, checksum gate — using JPKCom Harden & Trim as the example.
-
Speeding Up an Eleventy Build: Measure First, Then Optimise
An Eleventy build of about 2,150 files, cut from 4:00 to just over 1:30 minutes — with three small changes and a dropped HTML minify, without changing the content of the output. How I measured, which brakes showed up in the profile, and why incremental builds were not the answer.
-
Pagefind in practice: full-text search without a server, database or subscription
Pagefind from setup to indexing: filters, multilingual sites, accessibility, performance, costs — with measurements from two projects and clear limits.
-
Oxygen 6.2: The WordPress Builder Your AI Agent Operates
Oxygen 6.2 opens the builder to AI agents: an MCP server, the Abilities API, templates, design system and interactions on request. What is in it, what the changelog reveals, and where I would be careful.
-
Deno Joins Cloudflare — and the Runtime Has One Year Left
The Deno team is moving to Cloudflare, Deno Deploy closes in six months, the runtime gets one more year of fixes. What exactly was announced, who is affected and what you should check now.
-
Making-of: JPKCom Desktop — My Desktop in the Browser, Small and Open
Making-of JPKCom Desktop: why I built my own desktop for the browser — small, fast, accessible, secure, and open source under the MIT license.
-
Sustainable websites: fewer moving parts, less consumption
Static sites, small web servers like Static Web Server, caching and static export for WordPress: ways to save power, hardware, maintenance and money.
-
Main content, effort, invented authors: Google's quality documentation from October 2026
Google expanded its helpful content documentation: main content, four quality attributes, invented authors. What is new and what was carried over.
-
The htmx Series: HTML over the Wire, Placed in Context, Measured, Tested
Overview of my three-part htmx series: context against Unpoly and native tools, visibility for crawlers and AI, accessibility. With a live demo.
-
htmx and Accessibility: What Gets Lost When HTML Is Swapped
I went through four builds of one demo with the keyboard: where the focus lands after an htmx swap and what you have to handle yourself.
-
What Crawlers and AI See of htmx Content: A Measurement
I put check marks into an htmx demo and measured what curl, a headless browser and an AI assistant get to see. What stays visible and what does not.
-
htmx in Context: HTML over the Wire Instead of JSON, and When That Is the Better Choice
I built the same event calendar with htmx, with Unpoly and with no library at all: code, measurements, pitfalls and an honest guide to choosing.
-
Redesign by AI: Why JPKCom DB Deliberately Looks AI-Made
Redesign by AI: how I rebuilt JPKCom DB with Claude Code — Dracula for dark mode, my own light palette, tested contrast and a deliberately AI look.
-
BGH Ruling VI ZR 144/23: When Your Shop Sends Data to Third Parties
Germany's Federal Court of Justice allows injunctions against data transfers to third parties. What it decided, what is open and what a test shop really sends.
-
Anthropic and Bun: The Runtime Living Inside Your Claude Code Binary
Anthropic bought Bun, Claude Code ships as a Bun executable — and Bun 1.4 was ported to Rust by an AI in eleven days. I opened up the binary on my own machine to check how much of that holds up.
-
piplet: When Program and Data Live in the Same File
WordPress' piplet stores its notes behind __halt_compiler() inside its own PHP file. What the source teaches about atomic writes, inode races, validating before parsing and optimistic concurrency — and which of it belongs in your own projects.
-
Sveltia CMS for 11ty: The Editorial Interface the Generator Lacks
A Git-based CMS as one HTML file and a script tag: what Sveltia CMS delivers for an 11ty blog, how to self-host it without a CDN — and why two pages of its own documentation disagree about file paths.
Archive
2026
- Installing and setting up zsh: from apt to a lean .zshrc
- Node2Shell and the question that follows: how to install, manage and update Node.js
- PHP2Shell: What you need to do now — and why static sites stay calm
- Updates for deactivated plugins: how my WordPress plugins update each other
- Speeding Up an Eleventy Build: Measure First, Then Optimise
- Pagefind in practice: full-text search without a server, database or subscription
- Oxygen 6.2: The WordPress Builder Your AI Agent Operates
- Deno Joins Cloudflare — and the Runtime Has One Year Left
- Making-of: JPKCom Desktop — My Desktop in the Browser, Small and Open
- Sustainable websites: fewer moving parts, less consumption
- Main content, effort, invented authors: Google's quality documentation from October 2026
- The htmx Series: HTML over the Wire, Placed in Context, Measured, Tested
- htmx and Accessibility: What Gets Lost When HTML Is Swapped
- What Crawlers and AI See of htmx Content: A Measurement
- htmx in Context: HTML over the Wire Instead of JSON, and When That Is the Better Choice
- Redesign by AI: Why JPKCom DB Deliberately Looks AI-Made
- BGH Ruling VI ZR 144/23: When Your Shop Sends Data to Third Parties
- Anthropic and Bun: The Runtime Living Inside Your Claude Code Binary
- piplet: When Program and Data Live in the Same File
- Sveltia CMS for 11ty: The Editorial Interface the Generator Lacks
- Out of WordPress, Into the Repository: @11ty/import in Practice
- Why 11ty: Six Years Static — and Why I'm Staying for Build Awesome Too
- 15 September 2026: Cloudflare Changes the Crawler Defaults
- HTML Landmarks in Practice: One Structure for Screen Readers, Search and AI
- CSS @layer in Practice: Cascade Layers Instead of Specificity Wars
- DESIGN.md: The Design System as a File the AI Can Read Too
- Retention Periods: How Long You May Really Keep Applicant and Contact Data
- Header Sizes: How Big Should a Website Header Be?
- Author pages without external signals: when they start to pay off
- The SEO and GEO Series: from the Fundamentals to AI Visibility
- Working Securely with Node.js and npm: My Setup Against Supply-Chain Attacks
- Making-of: Shipping and Auto-Updating Your Own WordPress Plugins with GitHub Actions
- Configuring Claude Code: From Defaults to Engineering Partner
- Who Checks the Checker? Adversarial Fact-Fidelity for AI Text
- Claude Code in a Container: Podman, Docker and Shared Setups
- Making-of: My SEO and GEO Tool
- The Quarkdown Series: Markdown with Superpowers, in Eleven Parts
- Content Signals & C2PA: Controlling AI Usage
- Quarkdown: Tips & Tricks from Practice
- Inside Quarkdown: The Compilation Pipeline in Six Stages
- Core Web Vitals & Performance
- Quarkdown & AI: The Agent Skill and Why Markdown Is the Bridge
- Measuring GEO — and the Outlook on Agents
- Quarkdown in Practice: CLI, PDF Export & Deployment
- Quarkdown: Presentations from Markdown — Slides, Fragments, Speaker Notes
- Quarkdown for Science: Formulae, Bibliography, Cross-References
- Quarkdown: From Data to Tables and Diagrams
- Quarkdown: Arranging Content — Stacks, Containers, Boxes & Grids
- Multimodal & Search Everywhere
- Quarkdown: One Source, Four Documents — Types, Themes & Page Setup
- Quarkdown: Markdown That Computes — Functions, Variables, Scripting
- Quarkdown: When Markdown Learns Typesetting
- E-E-A-T & Brand Authority
- Structured Data & Technical GEO
- Link Strategy: Internal and External
- Multi-Turn & Query Fan-Out
- Writing for AI: The GEO Writing Playbook
- Google's AI Optimization Guide, in Context
- On-Page & Content: What Makes Pages Rank
- GEO: Visibility in AI Answers
- Technical SEO: The Foundation
- SEO in 2026: What Actually Matters