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.
Illustration systems that don't go stale
One-off illustration ages like milk. Here's how we build illustration languages as systems: primitives, composition rules, generators and maintenance models that survive.
From shelf to screen: packaging-to-web consistency
Shoppers meet your brand on shelf and screen in the same week. Keeping them aligned: claims parity, photography, and the audits that catch drift.
Playwright suites that survive the redesign
How to write browser tests against intent, not pixels: accessible locators, honest page objects, visual diff quotas, and keeping the whole suite under ten minutes.
Baseline 2026: what the platform finally gives you
A working guide to web Platform Baseline in 2026: what you can ship without polyfills, how to read compat data, and a sane adoption policy for teams.
Name your events before you buy the analytics tool
Event naming decides whether your data answers questions in year three. The taxonomy anatomy we design before any tool evaluation: verbs, properties, screens, migration.
Newsletters as a growth engine, not an afterthought
The newsletter is the only growth asset you own outright. How to design the promise, architect the issue, build referral loops, and do the cadence math honestly.
Cancellation flows that leave the door open
Offboarding is a trust surface: retention offers without traps, exit surveys that yield signal, data-export dignity, and win-back timing that works.
Command palettes: the 200-millisecond product tour
A command palette done well is a 200-millisecond product tour. Ranking heuristics, forgiving fuzzy match, keyboard ergonomics, and when a palette is a crutch.
Bundles and kits: designing the build-your-own moment
The bundle builder as interface design: shelf metaphors, fill visuals, flat pricing, coupled inventory — and when a kit makes the product disappear.
Design tokens that survive contact with engineering
Most token pipelines rot within a year. Here's the architecture we use at Brassfern to keep design decisions flowing from Figma to production without drift.
Lifecycle email is a product: building programmes, not campaigns
Lifecycle email is a product, not a campaign calendar: state-based programmes, plain-text craft, deliverability engineering, and metrics beyond open rates.
Error boundaries: designing UI that fails gracefully
Error boundaries are a product decision, not a try/catch. Granularity, fallbacks that save user work, retry semantics and reporting that actually gets read.