Accessible combobox from scratch
Marek Dvořák · May 22, 2026 · 3 min read
We've been quietly rebuilding the way our content is delivered, and the change has been more interesting than we expected. The numbers are nice — TTFB is down, LCP is well under target, hydration is barely a blip — but the more useful story is what we had to give up to get there.
The first lesson was that almost everything we used to ship to the client was, in retrospect, decoration. Real interactivity lives in a handful of components. Everything else can be HTML and CSS, served at the edge, and forgotten about.
We started keeping a short list of choices that surprised us. Streaming the heavy data instead of blocking on it. Reaching for a CSS variable before a prop. Letting the URL hold filter state instead of a store. None of these are clever. All of them paid off.
If you're considering a similar move, the advice we'd give is the same advice we wish someone had pushed harder on us: measure first, set a budget, and put the budget in CI. A goal that isn't enforced is a suggestion.
We'll go deeper on the migration mechanics in a follow-up. For now, the headline is that the boring choices were the right ones, and we should have made them sooner.