Portfolio

Blog

Notes on CSS, React, TypeScript and building with AI — short, practical, and written after shipping.

how-tokenizers-work.md
AI2026-09-11 · 8 min

How tokenizers work (with a playground)

Models never see your text — they see integers. Here's how text becomes tokens, why costs and context limits are counted this way, and a small in-browser playground to feel it.

Read
blinking-terminal-favicon.md
Web2026-08-29 · 7 min

Blinking Terminal

This site's favicon is a tiny terminal prompt with a blinking cursor. Here's how to animate a favicon reliably with a canvas, two frames, and a timer.

Read
css-container-queries-in-practice.md
CSS2026-06-18 · 6 min

Container queries changed how I build components

Media queries describe the viewport. Components live in containers. Here is how container queries removed a whole class of layout hacks.

Read
react-server-state-vs-ui-state.md
React2026-04-02 · 5 min

Server state is not UI state

Most tangled React codebases I have inherited share one root cause: server data living in component state.

Read
typescript-types-as-guardrails.md
TypeScript2026-02-14 · 4 min

Types as guardrails, not decoration

A type that mirrors your object shape adds nothing. A type that makes the wrong state unrepresentable pays for itself.

Read
ai-assistants-need-a-narrow-brief.md
AI2026-01-27 · 5 min

Shipping an AI assistant with a narrow brief

The Clippy on this site answers questions about one resume and refuses everything else. Scope was the whole design.

Read