The notebook
Blog.
notes from real projects
Practical writing on Laravel, AI engineering, token costs, SaaS architecture, and the technology decisions that make software cheaper to run and easier to grow.
All posts
113 posts
09 Nov 2025
Performance & Scale
When a queue backlog grows faster than it drains
A client doubled their queue workers twice and the backlog kept growing. The fix was arithmetic, not hardware — finding the real throughput ceiling and raising it.
→
02 Nov 2025
Performance & Scale
Reading a slow query log without guessing
Most performance work starts with a guess. Mine starts with the slow query log — how I configure it, digest it, and decide what to fix first on a Laravel application.
→
28 Oct 2025
Performance & Scale
Eager loading is not a silver bullet
Eager loading fixes N+1 queries, but with() can also make pages slower and hungrier. Where it backfires — with real numbers — and what to reach for instead.
→
21 Oct 2025
Performance & Scale
Your infrastructure bill is a query problem
Before you pay for a bigger server, read your query log. Most Laravel hosting bills are inflated by N+1 queries and missing indexes — and the fix is permanent, not monthly.
→
14 Oct 2025
Performance & Scale
What a Laravel performance audit actually looks for
A Laravel performance audit is not guesswork — it is a checklist run in the order it pays off. Here is mine: measure first, queries second, caching third, infrastructure last.
→
10 Oct 2025
Performance & Scale
How I found 3,930 wasted queries in a single page load
One dashboard page was issuing 3,982 database queries. Fifty-two of them were doing real work. This is the investigation, step by step, so you can run it on your own Laravel app.
→
03 Oct 2025
Security & Compliance
Answering "can another customer see our data?" architecturally
Enterprise buyers always ask whether another customer can see their data. A policy answer loses the deal; an architecture answer wins it. Here is the difference, from a platform that shipped.
→
26 Sep 2025
Security & Compliance
Where tenant-scoped file storage actually goes wrong
Your tenant isolation is airtight in the database and full of holes on disk. The five file-storage leaks I keep finding in multi-tenant codebases, and what replaces them.
→
22 Sep 2025
SaaS & Product
Migrating 200 tenant databases without downtime
Database-per-tenant means every schema change runs 200 times, and some of those runs will fail. The playbook I use to migrate a whole tenant fleet with the product still up.
→
15 Sep 2025
SaaS & Product
Giving every tenant their own cPanel account
Most SaaS isolation is a WHERE clause. On one platform I went further: every tenant gets its own cPanel account — filesystem, database, domain, the lot. Here is why, and how.
→
08 Sep 2025
SaaS & Product
One database per tenant: what it costs and what it buys
I run a SaaS where every tenant has its own database. The isolation is real and so is the operational tax. Here is the honest ledger of what the architecture costs and buys.
→
04 Sep 2025
Laravel & PHP
Syncing national company registries: PRH and YTJ in practice
I built a continuous sync against Finland's PRH and YTJ registries that enriches company records without clobbering user data. Here is what the docs never tell you.
→