Decisions
Not case studies. The arguments behind the choices — what the options were, what I gave up, and what I would change now. Written in the format I use at work.
A theme is a compiled config, not a colour
Why the storefront generator takes a nine-axis config file instead of a brand colour, and the accessibility rule that had to be built into the compiler.
One component tree, two directions
Persian and English from the same components, and a build gate that makes the silent version of the bug impossible.
Choosing a host that cannot revoke my access
I started on Cloudflare and abandoned it on evidence. Working from Tehran makes availability an architectural constraint, not an ops detail.
Rolling i18n by hand instead of installing it
Thirty lines of typed dictionary instead of next-intl, why the obvious typing is wrong, and the honest case for the library.
Build gates instead of unit tests
What a handful of .mjs scripts catch that a test suite does not, what they miss, and why I would not defend this everywhere.