Writing
Essays on building with AI agents and shipping design.
Writing
Essays on building with AI agents and shipping design.
Designing for AI uncertainty
The same AI response, three ways. Confident, calibrated, hedged. Why the framing is the product, and the five signals that carry weight.
Skeleton states that know what’s coming
Generic, layout-matched, and optimistic loading for the same card. The skeleton is a contract with the user and what breaks when you get it wrong.
Drag and drop that doesn’t feel cheap
A pointer-events reorder list with lift, make-room, settle, and full keyboard support. Why the HTML5 drag API is a trap.
Empty states as a design problem
First-time, sparse, populated. The empty state is the most important screen in the app. How to design backward from zero.
Tables at 10,000 rows, where performance is UX
A live virtualized table with 10k rows. Filter, sort, scroll, all under one frame. Why naive tables die at scale and what virtualization unlocks.
What a streaming response feels like
Three live AI-response modes side by side: all-at-once, chunked by sentence, token by token. Same text, same delay, completely different products.
Designing animated charts
Three live chart demos and the design thinking behind each: when the data is live, when it’s historical, and when the context itself changes.
Designing charts that work when colour fails
Animated demos of colour-vision deficiency and stacked visual channels. How I argued for accessibility as the design system default at Peak.
Building a WhatsApp chat demo for a site that lives in WhatsApp
Six design-engineer decisions for recreating WhatsApp’s chat feel: exact palette, bubble tails, typing rhythm, pacing as script, cards-in-bubbles, loop.
I’m a designer who ships with AI agents. Here’s how.
My workflow for going from Figma to production using Windsurf, Claude Code, and context engineering.
How I set up a SECURITY.md when building with AI agents
A template for keeping AI-assisted codebases safe by default.
OpenWatch: building an AI-powered security intelligence platform for Nigeria
Real-time incident extraction, semantic deduplication, and daily intelligence briefs. From raw news to actionable signal.
The biggest UX win on Filmflux wasn’t UI. It was caching.
How a three-layer cache turned a database-heavy app into something that just feels fast.
I assumed users would search for movie titles. I was wrong.
How I built a hybrid search system that understands intent, not just keywords.