Notes on building real systems
Plain, practical writing on websites, platforms, and automation for businesses in Saudi Arabia.
Approvals inside Teams with item-level permissions
An employee request system succeeds or fails on one detail: can an employee see other people's requests? Here is how it is set, and why you should not break permissions across thousands of items.
NotesSend-on-behalf from a shared mailbox: the setup that works
Having staff send from the company's official address rather than their own is a recurring requirement. This is the correct setup, and the permission distinction that trips people up.
ProjectsWhen to choose edge computing and when not to
The edge is not a faster server, it is a different execution model with different constraints. These are the constraints I actually hit, and when they work in your favour.
ProjectsDo not marry your architecture to one model provider
I ran the same agent system on two different model families. The goal was not saving cost, it was proving the design does not collapse if the provider changes.
ProjectsHuman approval before anything reaches the customer
The decision that most affected client trust in an automated system was not technical: everything going out passes a person first. This is how I built it so it does not become a bottleneck.
ProjectsA circuit breaker for the AI gateway
When the model gateway stops responding, a naive system keeps retrying, slowing everything and burning quota. A breaker stops early and recovers gradually.
ProjectsA validator that rejects any output without a source
The only approach that worked for me against hallucination in a production system was not prompt engineering. It was a layer that rejects any item without a traceable source.
ProjectsMulti-agent systems in production: split by responsibility, not by task
Most agent systems are split by task, which produces a layer of complexity with no benefit. The split that worked for me was by responsibility: who owns the decision, and who owns the channel.
ProjectsA private offer page instead of an attachment: what you gain
A private link tells you what an attachment cannot: whether it was opened, when, and how often. That turns your follow-up from a guess into a decision.
ProjectsTurning a vague client request into an executable scope
"I want a website" is not a plan. This is how I turn an open request into a written scope the client approves and the system records, so the argument ends before it starts.
NotesWhy is hreflang missing from a Next.js site when it is actually there?
I nearly reported a fault that did not exist. Searching a built page for hreflang finds nothing, because React writes the attribute with a capital letter in the source.
NotesWhy does GA4 return 403, and what separates disabled from denied?
Two completely different situations return the same status code and need two different fixes in two different places. The difference is in the message body, not the code.
ProjectsVisual testing that measures the DOM instead of comparing screenshots
Every guide suggests comparing screenshots. I tried it and left it, and built a check that measures the elements instead. The result: no baseline images to maintain, no flaky tests, and it catches failures screenshots cannot.
ProjectsA signed contract locks, and editing it returns it to draft
The most dangerous state in any contract system is not forgery. It is the text changing after the client agreed to it, without the client knowing. This is the rule that prevents it.
ProjectsAn audit trail the application cannot rewrite
An audit log protected by application code falls with the first bug. Moving the protection into the database took three lines, and the guarantee now survives the application being entirely wrong.
ProjectsA complete business system on Cloudflare D1: five services, one database
From a visitor opening a page to a signed contract and a scheduled instalment, across five services sharing one SQLite database at the edge. The architecture, what I chose, what I rejected, and what it cost.
NotesThe Systems Engineer Mindset: Understand the Real Problem Before You Build
Before you build any solution, ask yourself: did you understand the real problem, or did you build on assumptions? A real story that changed how I approach understanding and solving problems.