All Posts
8 articles
Rebasing Stacked Branches Without the Squash-Merge Pain
A dependent branch, a squashed parent, and the Git flag most developers never reach for until it saves them.
The Dev Server That Didn't Trust Me — Unlearning a PHP Reflex on the Way to Next.js
A diagram that wouldn't render, a server log that held the answer from the start, and the PHP reflex that cost two hours before anyone read it.
pnpm dev --webpack — Why a Content Layer Forces You to Ditch Turbopack
A freshly scaffolded Next.js starter that refuses to start — and the build flag that's invisible unless you already know you need it.
http://undefined/api/login — When Next.js Environment Variables Are Undefined in the Browser
In PHP, $_ENV is available everywhere. In Next.js, the server and browser are separate builds — a variable without the NEXT_PUBLIC_ prefix becomes undefined in the client, and nothing tells you.
Your Route Parameters Are a Promise Now — the PHP Mental Model That Breaks in Next.js 16
In Symfony, $request->attributes->get('slug') is synchronous. In Next.js 16, params is a Promise. Forget the await and your page silently fails.
return $this->redirectToRoute vs redirect() — Why a PHP Reflex Cancels Your Navigation in Next.js
In PHP, a redirect is a return value. In Next.js, it's an exception. Mix the two in a try/catch and the redirect silently disappears.
The Tenant You Suspended Is Still Running Jobs
A status field changed. A boolean next to it didn't. The HTTP layer enforced the difference — nothing else did.
The Doctrine Filter That Only Breaks on Sub-Requests
A tenant-scoping filter that works perfectly under load, in every test, on every page — until one template embeds another controller.