<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/feed/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
                        <id>https://freek.dev/feed</id>
                                <link href="https://freek.dev/feed" rel="self"></link>
                                <title><![CDATA[freek.dev - all blogposts]]></title>
                    
                                <subtitle>All blogposts on freek.dev</subtitle>
                                                    <updated>2026-09-16T14:30:30+02:00</updated>
                        <entry>
            <title><![CDATA[What's New in PHP 8.6]]></title>
            <link rel="alternate" href="https://freek.dev/3192-whats-new-in-php-86" />
            <id>https://freek.dev/3192</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>A concise overview of what's coming in PHP 8.6, including partial function application, clamp(), the new Duration class, and several smaller language and standard library improvements.</p>


<a href='https://laravel-news.com/php-8-6'>Read more</a>]]>
            </summary>
                                    <updated>2026-09-16T14:30:30+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Logarithmic auto-scaling for Laravel Horizon]]></title>
            <link rel="alternate" href="https://freek.dev/3191-logarithmic-auto-scaling-for-laravel-horizon" />
            <id>https://freek.dev/3191</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>A thoughtful write-up on adding logarithmic auto-scaling to Laravel Horizon. It shows how log-based weighting keeps huge queue spikes from starving smaller realtime queues while still giving large backlogs enough workers.</p>


<a href='https://gummibeer.dev/blog/2026/logarithmic-auto-scaling-laravel-horizon'>Read more</a>]]>
            </summary>
                                    <updated>2026-09-12T14:30:30+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Eloquent Performance and Database Design: Evidence Before Eager Loading]]></title>
            <link rel="alternate" href="https://freek.dev/3190-eloquent-performance-and-database-design-evidence-before-eager-loading" />
            <id>https://freek.dev/3190</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>A deep dive into Eloquent performance, from detecting N+1 queries to choosing aggregates, indexes, query plans, pagination, chunking, and transaction boundaries for a growing team dashboard.</p>


<a href='https://wendelladriel.com/blog/eloquent-performance-and-database-design-evidence-before-eager-loading'>Read more</a>]]>
            </summary>
                                    <updated>2026-09-11T14:30:27+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[A Series of Unfortunate Jobs]]></title>
            <link rel="alternate" href="https://freek.dev/3189-a-series-of-unfortunate-jobs" />
            <id>https://freek.dev/3189</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Laravel queues are great out of the box, until they bite. Over the years I’ve collected a few gotchas the hard way. Let me save you the headache.</p>


<a href='https://oussama-mater.tech/laravel-queue-gotchas'>Read more</a>]]>
            </summary>
                                    <updated>2026-09-10T14:06:27+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Run AI in the Browser: A Practical Guide to Transformers.js]]></title>
            <link rel="alternate" href="https://freek.dev/3188-run-ai-in-the-browser-a-practical-guide-to-transformersjs" />
            <id>https://freek.dev/3188</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Transformers.js lets you run AI models directly in the browser without a backend, API keys, or an internet connection after the model is cached. The article explores how it works, which models are available, and the trade-offs of client-side AI compared to traditional AI providers.</p>


<a href='https://tighten.com/insights/run-ai-in-the-browser-a-practical-guide-to-transformers-js/'>Read more</a>]]>
            </summary>
                                    <updated>2026-09-09T16:50:26+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Using AI as a deterministic translation tool in Laravel]]></title>
            <link rel="alternate" href="https://freek.dev/3186-using-ai-as-a-deterministic-translation-tool-in-laravel" />
            <id>https://freek.dev/3186</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Split a task into reasoning and execution to get deterministic behaviour out of a non-deterministic model.</p>


<a href='https://koomai.net/posts/using-ai-as-a-deterministic-translation-tool-in-laravel/'>Read more</a>]]>
            </summary>
                                    <updated>2026-09-07T14:53:24+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Digital Sovereignty Is Written in PHP]]></title>
            <link rel="alternate" href="https://freek.dev/3185-digital-sovereignty-is-written-in-php" />
            <id>https://freek.dev/3185</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>An interesting article on how PHP is used by the government.</p>


<a href='https://thephp.foundation/blog/2026/09/02/digital-sovereignty-is-written-in-php/'>Read more</a>]]>
            </summary>
                                    <updated>2026-09-04T14:30:28+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Build Your Own AI-Powered Slack Bot with the Laravel AI SDK]]></title>
            <link rel="alternate" href="https://freek.dev/3184-build-your-own-ai-powered-slack-bot-with-the-laravel-ai-sdk" />
            <id>https://freek.dev/3184</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>In this article, we’ll build an AI-powered Slack bot with the Laravel AI SDK. Unlike tools such as Claude Tag, it can switch AI providers, answer questions, execute tasks, and retrieve information from a knowledge base you control.</p>


<a href='https://tighten.com/insights/build-your-own-ai-powered-slack-bot-with-the-laravel-ai-sdk/'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-31T14:59:25+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Is AI going to steal my job as a design engineer?]]></title>
            <link rel="alternate" href="https://freek.dev/3183-is-ai-going-to-steal-my-job-as-a-design-engineer" />
            <id>https://freek.dev/3183</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Tom Wilson reflects on what AI is changing for design engineers, and where human judgment still matters. He argues that agents can take over more of the scaffolding work, while product taste, restraint, and polished visual craft remain the real edge.</p>


<a href='https://twilson.net/writing/ai-design-engineer'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-25T14:30:28+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Modular Monoliths: Creating Real Boundaries Before Reaching for Microservices]]></title>
            <link rel="alternate" href="https://freek.dev/3182-modular-monoliths-creating-real-boundaries-before-reaching-for-microservices" />
            <id>https://freek.dev/3182</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>A deep dive into modular monoliths, from module APIs and database ownership to cross-module communication, architecture tests, incremental migration, and the signals that justify microservices.</p>


<a href='https://wendelladriel.com/blog/modular-monoliths-creating-real-boundaries-before-reaching-for-microservices'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-20T15:48:25+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Immutability in PHP Beyond readonly]]></title>
            <link rel="alternate" href="https://freek.dev/3181-immutability-in-php-beyond-readonly" />
            <id>https://freek.dev/3181</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>A deep dive into immutability in PHP, from readonly properties and interior mutability to immutable value objects, collections, dates, cloning, boundaries, and testing.</p>


<a href='https://wendelladriel.com/blog/immutability-in-php-beyond-readonly'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-17T14:12:30+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Flare now uses OAuth for MCP, the CLI, and API]]></title>
            <link rel="alternate" href="https://freek.dev/3180-flare-now-uses-oauth-for-mcp-the-cli-and-api" />
            <id>https://freek.dev/3180</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>We explain how Flare now uses OAuth to connect MCP clients, the CLI, and the API with scoped permissions instead of broad long-lived tokens. The new flow makes setup faster, adds read-only and project-level access control, and gives you one place to manage every connection.</p>


<a href='https://flareapp.io/blog/flare-now-uses-oauth-for-mcp-clients-the-cli-and-the-api'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-15T12:30:29+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Can we make default Tailwind a more accessible choice?]]></title>
            <link rel="alternate" href="https://freek.dev/3179-can-we-make-default-tailwind-a-more-accessible-choice" />
            <id>https://freek.dev/3179</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>A sharp look at Tailwind's default rem-based breakpoints, and the accessibility tradeoff they make. It explains how browser font-size preferences can shift layouts, why that can help some users, and why px breakpoints are still a defensible choice.</p>


<a href='https://spatie.be/blog/can-we-make-default-tailwind-a-more-accessible-choice'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-14T12:30:33+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Why we removed AI solutions from Flare]]></title>
            <link rel="alternate" href="https://freek.dev/3178-why-we-removed-ai-solutions-from-flare" />
            <id>https://freek.dev/3178</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>We explain why Flare's old AI-generated solutions no longer fit the way developers debug with modern coding agents. The replacement is a better workflow built around the MCP server, CLI, Copy for AI prompts, and agent-friendly docs.</p>


<a href='https://flareapp.io/blog/why-we-removed-ai-solutions-from-flare'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-13T12:30:30+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[`exit()` may silently break your parallel tests]]></title>
            <link rel="alternate" href="https://freek.dev/3177-exit-may-silently-break-your-parallel-tests" />
            <id>https://freek.dev/3177</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Michael explains why exit() can make parallel test workers crash without useful diagnostics, and why verbose flags do not help when the process dies outside PHPUnit's control. The fix is simple: throw an exception instead, so the failure is reported normally with a stack trace.</p>


<a href='https://dyrynda.com.au/blog/exit-may-silently-break-your-parallel-tests'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-12T12:30:31+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Amped up]]></title>
            <link rel="alternate" href="https://freek.dev/3176-amped-up" />
            <id>https://freek.dev/3176</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Sebastian explains why Amp became his default coding harness, and why user experience now matters more to him than model churn. He also shares the AGENTS.md tweaks that reduced overzealous verification during day-to-day coding.</p>


<a href='https://sebastiandedeyne.com/amped-up/'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-11T12:30:28+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[sbx: Sandboxed Claude, complete with PHP and tools]]></title>
            <link rel="alternate" href="https://freek.dev/3175-sbx-sandboxed-claude-complete-with-php-and-tools" />
            <id>https://freek.dev/3175</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>A practical walkthrough for running Claude Code inside Docker's new sbx sandbox, with a custom PHP setup and extra tools for open source work. Benjamin also explains why sandboxing AI coding agents is the sensible default.</p>


<a href='https://www.beberlei.de/post/sbx-sandboxed-claude-complete-with-php-and-tools'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-10T12:30:04+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[What's new in PHP 8.6]]></title>
            <link rel="alternate" href="https://freek.dev/3174-whats-new-in-php-86" />
            <id>https://freek.dev/3174</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Brent surveys the most notable additions coming in PHP 8.6, including partial function application, the new polling API, readonly property defaults, and several smaller improvements and deprecations.</p>


<a href='https://stitcher.io/blog/new-in-php-86'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-05T14:14:26+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prevent cognitive debt by manually retyping LLM-generated code]]></title>
            <link rel="alternate" href="https://freek.dev/3173-prevent-cognitive-debt-by-manually-retyping-llm-generated-code" />
            <id>https://freek.dev/3173</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>Ankur Sethi argues that manually retyping LLM-generated code is a practical way to avoid cognitive debt. It slows you down, but helps you understand the code, catch bad suggestions, and keep a strong mental model of your codebase.</p>


<a href='https://ankursethi.com/blog/prevent-cognitive-debt-by-manually-retyping-llm-generated-code/'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-04T14:56:26+02:00</updated>
        </entry>
            <entry>
            <title><![CDATA[We Became Editors-in-Chief, and Nobody Trained Us]]></title>
            <link rel="alternate" href="https://freek.dev/3172-we-became-editors-in-chief-and-nobody-trained-us" />
            <id>https://freek.dev/3172</id>
            <author>
                <name><![CDATA[Freek Van der Herten]]></name>
                <email><![CDATA[freek@spatie.be]]></email>

            </author>
            <summary type="html">
                <![CDATA[<p>An essay on how AI-assisted development turns engineers into full-time reviewers. We spend our days evaluating AI-generated diffs instead of writing code, and that shift carries a new cognitive fatigue and may widen the senior/junior gap.</p>


<a href='https://albertoarena.it/posts/we-became-editors-in-chief/'>Read more</a>]]>
            </summary>
                                    <updated>2026-08-03T16:56:25+02:00</updated>
        </entry>
    </feed>
