Articles

Writing

Notes on reconstructing interfaces from measurement, and on the engineering that keeps the result honest.

  1. 4 min read

    Contrast as a build gate, not a review step

    A colour rule enforced by review erodes under a deadline. Enforced by a failing build it survives — and it catches a class of defect no amount of looking at the page will find.

  2. 5 min read

    Writing the reduced-motion contract before the animation

    A reduced-motion block written after the animations is a block that has to catch up with them. Written first, it binds everything added later — and the hardest decision is what it must deliberately not switch off.

  3. 5 min read

    Server components and an honest client-JavaScript budget

    Server components make the default free, which is exactly why the interesting question becomes what earns a client boundary — and how much interactive work you can do after crossing one without ever calling setState.

  4. 5 min read

    Theming without touching a single component

    Two independent attributes on the root element give fourteen appearances from nine declarations — and the test that stops the generated CSS drifting from the registry it came from.

  5. 6 min read

    Variable font weight as a motion channel

    Animating a weight axis instead of opacity or transform gives you motion that never reflows the composition — but it bills you for a relayout on every frame, and the curve you reach for first is the wrong one.

  6. 5 min read

    Reconstruct an interface from measurement, not screenshots

    A screenshot tells you what something looked like for one frame. Measuring the live page tells you what it does — and only one of those is enough to rebuild from.

Back to Haider Shah