Three filters land on the storefront: category (a tree), tags (multi-select, color-coded), and price range. They differ mainly in how much screen they take from the item grid, and how well they survive on a phone. Click the one you prefer.
Same for all three
Filters combine with AND (category and tags and price). Multiple selected tags are the one
open sub-question — "has any of these tags" vs "has all of them" — I'll ask that next.
Filtering happens server-side via query params on /api/items, so the result set stays correct
no matter how many items exist.