Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Implements search and filter interfaces for both frontend (React/TypeScript) and backend (Python) with debouncing, query management, and database integration. Use when adding search functionality, building filter UIs, implementing faceted search, or optimizing search performance.
.claude/skills/ancoleman-implementing-search-filter/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 20% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 76% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 20% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 63% | 0% |
Implement search and filter interfaces with comprehensive frontend components and backend query optimization.
This skill provides production-ready patterns for implementing search and filtering functionality across the full stack. It covers React/TypeScript components for the frontend (search inputs, filter UIs, autocomplete) and Python patterns for the backend (SQLAlchemy queries, Elasticsearch integration, API design). The skill emphasizes performance optimization, accessibility, and user experience.
Search Input with Debouncing
references/search-input-patterns.mdAutocomplete/Typeahead
references/autocomplete-patterns.mdFilter UI Components
references/filter-ui-patterns.mdDatabase Query Building
references/database-querying.mdElasticsearch Integration
references/elasticsearch-integration.mdAPI Design
references/api-design.mdDebouncing Implementation
debounce from lodash or custom implementationscripts/debounce_calculator.jsQuery Parameter Management
references/query-parameter-management.mdQuery Optimization
scripts/generate_filter_query.pyValidation & Security
scripts/validate_search_params.pyrole="search" for search regionsaria-live for result updatesPrimary: Downshift (Autocomplete)
npm install downshiftAlternative: React Select
Python/SQLAlchemy
Python/Django
Elasticsearch (Python)
references/search-input-patterns.md - Input implementationsreferences/autocomplete-patterns.md - Typeahead patternsreferences/filter-ui-patterns.md - Filter componentsreferences/database-querying.md - SQL query patternsreferences/elasticsearch-integration.md - Elasticsearch setupreferences/api-design.md - API endpoint patternsreferences/performance-optimization.md - Performance tipsreferences/library-comparison.md - Library evaluationscripts/generate_filter_query.py - Build SQL/ES queriesscripts/validate_search_params.py - Validate inputsscripts/debounce_calculator.js - Calculate debounce timingexamples/product-search.tsx - E-commerce searchexamples/autocomplete-search.tsx - Autocomplete implementationexamples/sqlalchemy_search.py - SQLAlchemy patternsexamples/fastapi_search.py - FastAPI search endpointexamples/django_filter_backend.py - Django filtersassets/filter-config-schema.json - Filter configurationassets/search-api-spec.json - OpenAPI specification| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 27,729 | 27,175 | -2% | 1 | 1 | 0% | 6,205 | 7,110 | +15% | 0 | 0 | — |
case-02 | fail→fail | 29,075 | 26,853 | -8% | 1 | 1 | 0% | 6,189 | 7,532 | +22% | 0 | 0 | — |
case-03 | pass→pass | 21,841 | 18,234 | -17% | 1 | 1 | 0% | 4,081 | 4,899 | +20% | 0 | 0 | — |
case-04 | pass→pass | 20,568 | 23,789 | +16% | 1 | 1 | 0% | 3,555 | 6,256 | +76% | 0 | 0 | — |
case-05 | pass→pass | 11,945 | 6,214 | -48% | 1 | 1 | 0% | 2,026 | 2,436 | +20% | 0 | 0 | — |
case-06 | pass→pass | 8,921 | 5,572 | -38% | 1 | 1 | 0% | 1,339 | 2,186 | +63% | 0 | 0 | — |
case-07 | pass→pass | 9,170 | 5,412 | -41% | 1 | 1 | 0% | 1,397 | 2,194 | +57% | 0 | 0 | — |
case-08 | pass→pass | 6,946 | 3,784 | -46% | 1 | 1 | 0% | 1,150 | 1,849 | +61% | 0 | 0 | — |
case-09 | pass→pass | 7,267 | 5,125 | -29% | 1 | 1 | 0% | 1,228 | 2,113 | +72% | 0 | 0 | — |
case-10 | pass→pass | 4,932 | 2,395 | -51% | 1 | 1 | 0% | 734 | 1,677 | +128% | 0 | 0 | — |
case-11 | pass→pass | 7,167 | 5,649 | -21% | 1 | 1 | 0% | 1,058 | 2,192 | +107% | 0 | 0 | — |
case-12 | pass→pass | 7,213 | 8,511 | +18% | 1 | 1 | 0% | 1,080 | 2,881 | +167% | 0 | 0 | — |
case-13 | pass→pass | 18,418 | 17,891 | -3% | 1 | 1 | 0% | 2,893 | 4,478 | +55% | 0 | 0 | — |
case-14 | pass→pass | 9,013 | 11,012 | +22% | 1 | 1 | 0% | 1,780 | 3,320 | +87% | 0 | 0 | — |
case-15 | pass→pass | 12,492 | 10,484 | -16% | 1 | 1 | 0% | 1,894 | 3,107 | +64% | 0 | 0 | — |
case-16 | pass→pass | 9,716 | 5,264 | -46% | 1 | 1 | 0% | 1,670 | 2,194 | +31% | 0 | 0 | — |
case-17 | pass→pass | 8,063 | 5,135 | -36% | 1 | 1 | 0% | 1,199 | 2,127 | +77% | 0 | 0 | — |
case-18 | pass→pass | 6,258 | 6,304 | +1% | 1 | 1 | 0% | 1,043 | 2,345 | +125% | 0 | 0 | — |
case-19 | pass→pass | 9,909 | 7,938 | -20% | 1 | 1 | 0% | 1,452 | 2,687 | +85% | 0 | 0 | — |
case-20 | pass→pass | 3,613 | 5,342 | +48% | 1 | 1 | 0% | 595 | 2,193 | +269% | 0 | 0 | — |
case-21 | pass→pass | 13,038 | 15,989 | +23% | 1 | 1 | 0% | 2,472 | 4,603 | +86% | 0 | 0 | — |
case-22 | pass→pass | 9,642 | 9,050 | -6% | 1 | 1 | 0% | 2,001 | 3,116 | +56% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +5 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.