Build Log

Field notes from systems in production.

Engineering articles from the systems I build and run: architecture, Arabic interfaces, performance, security and infrastructure. Every number in them was measured.

8 articlesRSS feed

Latest

Every article

  1. 08

    372 tests passed. No sale could reach the ledger.

    How I keep a 322,000-line accounting system correct on my own: one save gate, append-only money, a hash-chained audit trail, real-database tests, and the audit that caught what they missed.

    Architecture
  2. 07

    Arabic on a thermal printer, and the five bytes that ate a roll

    Why ESC/POS printers mangle Arabic, how to print it as a 1-bit image at the head's exact width, and the geometry bug that turned a 12 cm receipt into a roll on the floor.

    Arabic interfaces
  3. 06

    Why idempotency keys didn't stop 105 resends of one receipt

    Offline-first billing for electricity stations: one id from the phone to the receipt, why bill totals must never be added, an outbox that knows what to retry, and the 500 that looped.

    Architecture
  4. 05

    Security that survives my own bugs: six layers and their configs

    Six layers in production, each built for the day the one above it fails: forced row-level security, logins that cannot bypass it, sealed containers, phone certificates, weekly restores.

    Security
  5. 04

    The final payment should be the easy one. How I run client projects

    How I run client projects so the client pays, trusts me and comes back: a written proposal with phases, every phase live on their server, tests they can read, and a handover pack.

    Working with clients
  6. 03

    200 animations kept my main thread 98% busy at rest. None had to go

    One animation the GPU can't run makes the browser redo the whole page every frame. The five that did it to my site, the trace field that names them, and the fixes: 98% to 18%.

    Performance
  7. 02

    Per-letter text effects break Arabic. Intl.Segmenter won't save you

    One span per letter split «لا» in my headline and doubled its gold sweep. Why grapheme clusters can't fix it, why words can, and a decode component that works in both scripts.

    Arabic interfaces
  8. 01

    One rename to deploy, 9 ms to roll back, 8 traps to dodge

    My deploy kit for a static site on a small VPS: a folder per release, one atomic rename to go live, a 9 ms rollback, a read-only Caddy box, and 8 traps I found by testing it.

    Infrastructure