Blog
Long-form engineering notes on Laravel. No listicles.
Laravel and Sage. Which Sage, Though?
Sage is a family of products with almost nothing in common at the API layer. Working out which one a client runs, and where it runs, decides the architecture before a line is written.
September 23, 2026 · 6 min read
Stripe in Laravel. Model the Payment, Not the API Call.
A payment is a state machine with two money-moving events, not a boolean on an order. What that means for your schema, where Cashier stops helping, and the columns you need on day one.
September 23, 2026 · 5 min read
Connecting Laravel to Xero Without Losing the Tenant
Xero rotates its refresh token on every refresh, which turns two concurrent workers into a permanently disconnected organisation. That failure, and the four others that follow it.
September 23, 2026 · 8 min read
Payment Webhooks Arrive Late, Twice, and Out of Order
The redirect back from a payment page is not confirmation. Neither is a single webhook. What a payment provider actually promises about delivery, and how to build something correct on top of it.
September 23, 2026 · 5 min read
Joomla vs Laravel: When Content Structure Is Not Enough
Joomla does things out of the box that WordPress needs plugins for, and access control is one of them. The boundary is where the work stops being content and starts being transactions.
September 22, 2026 · 3 min read
OpenCart vs Laravel: You Already Own a PHP Application
This is not a choice between a hosted product and a custom build. OpenCart runs on your own server, in your own PHP. The question is narrower, and it is about where your business rules live.
September 22, 2026 · 4 min read
Shopify vs Laravel: Where the Order Model Breaks
Shopify is a product you rent, and it is the right answer for most stores. The boundary is not catalogue size or traffic. It is the moment your order stops being a simple order.
September 22, 2026 · 4 min read
WordPress vs Laravel: Which One Your Project Actually Is
One is a content product with an application escape hatch. The other is an application framework with no content product. The question is which of the two you are building.
September 22, 2026 · 4 min read
Authorisation Is Not Authentication in Laravel
Laravel's auth scaffolding answers who you are. Who may do what is yours to write, and the tests that prove it are the ones nobody writes - the ones asserting the wrong person is refused.
September 21, 2026 · 5 min read
Blade, Livewire or Inertia: Deciding Once, Properly
Three ways to build a Laravel frontend, each with a different bet about where state lives. Picking by preference is how an application ends up with all three and a rule for none.
September 21, 2026 · 4 min read
Deploying Laravel Yourself, Without the Two-Minute Outage
A managed platform, a provisioning service or a plain server - and the four things that decide whether a deploy is invisible, none of which are the hosting choice.
September 21, 2026 · 4 min read
The File Upload That Becomes a Shell
Validating the mime type does not tell you what a file is, and storing uploads under the document root means the server will happily execute whatever was validated incorrectly.
September 21, 2026 · 5 min read
Laravel vs Django: What Actually Differs
Two mature, batteries-included frameworks with similar ambitions in different languages. The real distinctions are the admin, the async story, the background work and where your team already is.
September 21, 2026 · 4 min read
Laravel or Node for an API: Pick by Workload
Both will serve JSON well. What separates them is the shape of the work - how much waiting, how many open connections, how much of the surrounding machinery you want to own.
September 21, 2026 · 3 min read
Laravel vs Rails: The Comparison Has Changed
Laravel borrowed Rails' convictions and then diverged. Fifteen years on the differences are the queue story, the typing, the hosting economics and the size of the hiring pool.
September 21, 2026 · 4 min read
Laravel vs Symfony: Choosing Between Them, and What It Costs
The same language, the same underlying components, and two genuinely different bets about who decides. The choice is about how much of the architecture you want handed to you.
September 21, 2026 · 5 min read
What a Managed Postgres Changes for Laravel
Serverless Postgres is priced and shaped for request-per-connection workloads. Laravel holds long-lived connections in its queue workers, and that mismatch is where the surprises are.
September 21, 2026 · 5 min read
Money, Dates and the Decisions You Cannot Undo
Two data types decide more of an application's future than the framework does. Both are chosen in the first week, usually without anyone noticing a decision was being made.
September 21, 2026 · 5 min read
MySQL or Postgres for Laravel: What Actually Differs
Eloquent hides most of the distance between them, and then a handful of features do not travel. Here is which ones, and which of them you would notice a year in.
September 21, 2026 · 4 min read
Sanctum vs Passport: Most Teams Pick the Expensive One
Passport implements OAuth2, which is the right answer for third-party clients and an expensive mistake for your own frontend. The decision turns on one question about who the consumer is.
September 21, 2026 · 4 min read
Soft Deletes Are Not Deletes, and That Is the Problem
The trait is one line and it changes what every unique constraint, every foreign key and every erasure request in the application means. Most codebases adopt it without deciding any of that.
September 21, 2026 · 4 min read
Laravel Ships SQLite by Default. When Is That Actually Fine?
The default changed and a lot of applications went to production on it without anyone deciding to. The cases where that is correct are real and narrower than the default implies.
September 21, 2026 · 4 min read
When Laravel Is the Wrong Choice
Laravel is a good default and a bad universal. Six situations where it is the wrong tool, written by people who sell Laravel work and would rather not sell it to you twice.
September 21, 2026 · 4 min read
Why Your Test Suite Takes Eleven Minutes
A slow suite is a suite people skip. The time is almost never in the assertions - it is in rebuilding the database, hashing passwords, and reaching the network without meaning to.
September 21, 2026 · 4 min read
You Inherited a Laravel Codebase. Read It in This Order.
The first instinct is to open the controllers. The faster route into an unfamiliar application is the schema, the queue and the deploy - in that order, before anybody asks for an estimate.
September 20, 2026 · 4 min read
Octane Speeds Laravel Up by Breaking an Assumption
Every request in a normal Laravel application starts from nothing. Octane keeps the application in memory between requests, which is where the speed comes from and where the bugs come from too.
September 20, 2026 · 4 min read
The Migration That Took the Site Down
Adding a column is free. Adding one with a default, or an index, or changing a type, takes a lock - and on a table large enough, the lock outlasts the request timeout while the deploy reports success.
September 20, 2026 · 5 min read
When Caching Makes a Laravel Application Slower
Caching is the first thing reached for and the last thing measured. Four patterns that add latency instead of removing it, and the question worth asking before any of them.
September 19, 2026 · 5 min read
What It Actually Costs to Be Three Laravel Versions Behind
Nobody decides to fall behind. It happens one skipped release at a time, and the bill arrives as a security patch you cannot apply and a quote four times what it should have been.
September 19, 2026 · 4 min read
Your Queue Workers Are Running Last Week's Code
A worker is a long-lived PHP process that loaded your application once and never looked again. Deploys do not reach it, and the bugs that causes are fixed in the repository and still in production.
September 19, 2026 · 4 min read
Your Laravel Jobs Will Run Twice. Design For It.
At-least-once delivery means every queued job is eventually executed more than once. What that breaks, why retries are not the only cause, and how to make a job safe without a check-then-act race.
September 17, 2026 · 6 min read
N+1 Queries in Laravel: Find Them Before Production Does
The N+1 is the most common performance fault in Laravel and the easiest to reintroduce. Where it hides, how to make it fail a test rather than a page, and when eager loading is wrong.
September 17, 2026 · 5 min read
Tell us what you are building.
A repository, a slow query log, or three sentences about what keeps breaking. What comes back is an engineer's opinion, not a brochure.
