Active filters are visually distinct and individually removable
Why it matters
When active filters have no visible representation, users forget which constraints are in play. They see 3 results, assume the directory is empty, and leave — never realizing a price cap or category filter is silently excluding hundreds of listings. When filters lack individual remove buttons, the only escape is a full reset, which destroys the user's other selections and forces them to rebuild. Both failure modes compound: invisible filters produce abandonment, and all-or-nothing removal punishes exploration.
Severity rationale
Critical because invisible or non-removable filters trap users in unexpected result sets and erase confidence in the filtering system.
Remediation
Render each active filter as a labeled chip with an inline remove button, positioned above the result grid so it scans at a glance. See components/ActiveFilters.tsx:
{activeFilters.map(([key, value]) => (
<button
key={key}
onClick={() => onRemoveFilter(key)}
aria-label={`Remove ${key} filter`}
className="bg-blue-100 px-3 py-1 rounded-full"
>
{key}: {value} ×
</button>
))}
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Search & Discovery UX Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from directory-search-discovery·automated