In Praise of --dry-run
Henrik Warne makes a good case for adding a --dry-run mode to commands that change state. It gives you a fast, safe way to verify configuration, inspect behavior, and test workflows without side effects. Read more
Henrik Warne makes a good case for adding a --dry-run mode to commands that change state. It gives you a fast, safe way to verify configuration, inspect behavior, and test workflows without side effects. Read more
This article frames AI as a tool to support, not replace, developers, emphasizing the importance of staying in control of how and when it’s used. It encourages a thoughtful approach where developers leverage AI for efficiency while maintaining ownership of decisions and outcomes. Read more
How to implement calendar-month metered billing on Paddle using zero-value subscriptions, one-time charges, and a homemade invoice grace period. Read more
Ruben explains the full rewrite behind TypeScript Transformer 3 and why the new architecture makes the package much more flexible. The post covers the new transformer pipeline, AST-based output, improved type parsing via PHPStan, and a watch mode for faster development. Read more
In this interview, I talk about Laravel, application monitoring, and how AI is changing the way developers work.
Hafiz compares Scotty with Laravel Envoy and explains why Spatie's new deploy tool is a nicer fit for SSH-based deployments. He walks through the plain bash format, improved terminal output, migration path, and zero-downtime deployment workflow. Read more
We turned our internal coding guidelines into reusable AI skills, so coding assistants can follow the same conventions their team uses. The package works with Laravel Boost and the broader skills.sh ecosystem, and ships with skills for Laravel PHP, JavaScript, version control, and security. Read more
Validate nested array inputs in Laravel form requests without the N+1. Prefetch lookup data in prepareForValidation and check items in memory. Read more
A comprehensive look at how new CSS features are replacing JavaScript libraries. Anchor positioning, the Popover API, scroll-driven animations, view transitions, customizable selects, and more. The article estimates around 322 kB of JavaScript that can potentially be replaced by native CSS. Read more
A clear walkthrough of how PHP closures implicitly capture $this, even when they don't use it, and how that can prevent objects from being garbage collected. Also covers what PHP 8.6 will change with automatic static inference. Read more
Over the past few months we've been building There There at Spatie, a support tool shaped by the two decades we've spent running our own customer support. The goal is simple: the helpdesk we always wished we had. We care about using AI in a particular way. It should help support agents write better replies, not substitute for them. The human stays in charge of the conversation, and the model does the unglamorous work of drafting, rephrasing, and suggesting links. There There is in private beta…
A few months ago we started building There There, a helpdesk we're making at Spatie. The premise is simple. After two decades of running customer support for our open source work and our SaaS apps, we wanted the tool we always wished existed. One thing we care about in particular is using AI to help humans craft better responses, not to replace them. The agent stays in charge of the conversation. The model just helps them reply faster and a little sharper. There There is in private beta right…
A lovely analogy about software craft. Same ingredients, same features, but the invisible process behind the decisions is what separates "this works" from "this feels right." Read more
Ryan Chandler shares his honest journey from unease to acceptance with AI coding tools. A thoughtful reflection on how your value as a software engineer is not in writing every line, but knowing which lines should exist at all. Read more