Workshop — 11 May 2026 · 2 min read
The blog page had 25 posts with no way to find the one you wanted except scrolling. That is fine when you have five posts. It breaks at twenty-five.
Two additions, zero dependencies.
Category pills
A row of buttons at the top of the listing: All, Opinion, AI, Future Tech, Startups, Culture, Agents. Click one. The page filters to only posts in that category. Click All to reset.
Each post was mapped to its actual WordPress categories in the inline data array. Politics and edge cases handled. Some posts live in two categories simultaneously. The filter handles that.
Search bar
A text input above the pills. Start typing. The list filters in real-time. No debouncing, no API calls, no waiting. The data was already in the page. It just needed the interface to surface it.
Combined filtering works: type while a category is active. The intersection of both filters applies. If nothing matches, the page says so instead of showing empty space.
One file, no plugins
No JavaScript framework. No build step. No database query. A style block, a script block, and the category mapping added to each post object. Runs on every browser back to 2016.
Change log: blog page enhanced with category filters + search · 25 posts indexed