Thinking, in public
Field notes on design, engineering and growth — written by the people who ship the work. No thought leadership, just lessons with receipts.
The annual report as a web moment
The annual report is the year's biggest brand surface, usually wasted as a PDF. Structure the story, keep the data honest, ship it as a web moment.
Animation is engineering: shipping motion at 60fps
Motion at 60fps is an engineering discipline: compositor-only properties, FLIP for layout changes, when canvas or WebGL earn their weight, and testing.
HTML emails in 2026: engineering for a hostile medium
Table layouts without despair, the dark-mode inversion lottery, bulletproof buttons, image-off rendering, and a testing matrix a small team can actually run.
Rolling your own search in 2026: cheaper and better than you think
Search is a product, not a plugin. When we self-host Meilisearch or Typesense instead of renting the big names, how we tune typo tolerance, and the UX that forgives.
The TypeScript strictness ratchet: stricter every sprint, never a big bang
Strict mode on a legacy codebase is a migration disguised as a flag. The ratchet approach: incremental flags, scoped configs, codemods and type-debt metrics.
Podcast growth: show notes, transcripts and episode pages that rank
Turn a podcast into a search asset: episode pages with real titles, full transcripts, chapter markers, guest cross-links, and a distribution loop without paid.
Weekly demos: the habit that runs our projects
Weekly demos as a project operating system: the format that forces progress, recording etiquette, async viewing, demo-driven scope discovery and braver clients.
Light, dark, light: section banding as rhythm
How to use alternating light and dark sections as editorial rhythm: surface budgets, seam design, spacing across bands, and fitting a night section into a paper site.
Skeleton screens that don't flash and lie
Skeleton UI done honestly: match the shape of the answer, gate the flash, respect reduced motion, and know when a spinner or optimistic UI beats a skeleton entirely.
Feature discovery: design for the day after launch
Shipping a feature is half the job. Announcement surfaces that respect focus, contextual education, suppression discipline, targeting and how to measure discovery lift.
When the AI says no: moderation UX
Every generative AI feature eventually refuses a user, and most refusals are dead ends. Designing blocked, revised and appeal states that preserve dignity.
Reading agency contracts: IP, liability and the licence traps
A plain-English tour of the contract clauses that matter in creative engagements: IP assignment vs licence, portfolio rights, liability caps, kill fees, warranty windows.