@wazir-dev/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,601 @@
|
|
|
1
|
+
# Search and Filter Patterns
|
|
2
|
+
|
|
3
|
+
> **Module Type:** Pattern
|
|
4
|
+
> **Domain:** UI/UX Design Systems
|
|
5
|
+
> **Last Updated:** 2026-03-07
|
|
6
|
+
> **Sources:** Algolia, Baymard Institute, Nielsen Norman Group, W3C WAI-ARIA, Apple HIG, Material Design, Smashing Magazine
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Quick Reference Checklist
|
|
11
|
+
|
|
12
|
+
### Search Essentials
|
|
13
|
+
- [ ] Search bar is prominent, full-width or near-full-width, with placeholder text
|
|
14
|
+
- [ ] Autocomplete provides 6-8 query suggestions + 4-6 result previews
|
|
15
|
+
- [ ] Typo tolerance and fuzzy matching are enabled
|
|
16
|
+
- [ ] Recent searches are persisted and displayed on focus
|
|
17
|
+
- [ ] Clear button (x) appears when input has content
|
|
18
|
+
- [ ] Search results display a count ("42 results for 'widget'")
|
|
19
|
+
- [ ] No-results state offers actionable alternatives, not a dead end
|
|
20
|
+
- [ ] Search is case-insensitive
|
|
21
|
+
- [ ] Keyboard shortcut (Cmd+K or /) triggers search focus
|
|
22
|
+
- [ ] Loading indicator appears for searches exceeding 200ms
|
|
23
|
+
|
|
24
|
+
### Filter Essentials
|
|
25
|
+
- [ ] Applied filters are visible as removable chips above results
|
|
26
|
+
- [ ] "Clear all" button is always accessible
|
|
27
|
+
- [ ] Filter counts show number of matching results per option
|
|
28
|
+
- [ ] Filters update results within 200ms (instant) or use "Apply" button (batch)
|
|
29
|
+
- [ ] Filters persist across navigation (back button, page refresh)
|
|
30
|
+
- [ ] Zero-result filter options are disabled or hidden, not clickable
|
|
31
|
+
- [ ] Mobile filters open in a full-screen modal or bottom sheet
|
|
32
|
+
- [ ] Sort is separate from filter, not conflated
|
|
33
|
+
- [ ] URL reflects active filters for shareability
|
|
34
|
+
- [ ] Saved search/filter presets are available for repeat workflows
|
|
35
|
+
|
|
36
|
+
### Accessibility Essentials
|
|
37
|
+
- [ ] Search input uses `role="search"` or is inside `<search>` landmark
|
|
38
|
+
- [ ] Autocomplete uses `role="combobox"` with `aria-expanded`, `aria-controls`
|
|
39
|
+
- [ ] Active suggestion uses `aria-activedescendant`
|
|
40
|
+
- [ ] Result count changes announced via `aria-live="polite"` region
|
|
41
|
+
- [ ] Filter groups use `role="group"` with `aria-labelledby`
|
|
42
|
+
- [ ] All interactions are keyboard-operable (Tab, Enter, Escape, Arrow keys)
|
|
43
|
+
- [ ] Focus is trapped inside modal filters; Escape closes and restores focus
|
|
44
|
+
- [ ] Color is not the only indicator for active filters
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 1. Pattern Anatomy
|
|
49
|
+
|
|
50
|
+
### 1.1 Search Types
|
|
51
|
+
|
|
52
|
+
#### Global Search
|
|
53
|
+
A single, persistent input querying across all content types. Lives in the top navigation bar, always visible or one click away. Searches across all entities (pages, users, files, settings), returns grouped results by category. Algolia: search box should "visually stand out, be full-width, and include a placeholder." Standard placement: upper-right or top-center. Baymard: search users convert at 1.8x the rate of browse-only users.
|
|
54
|
+
|
|
55
|
+
**When to use:** Diverse content types, large datasets, or when users cannot predict where content lives.
|
|
56
|
+
|
|
57
|
+
#### Scoped Search
|
|
58
|
+
Search constrained to a specific section, category, or entity type. Shows scope indicator ("in: #design-team"), may offer scope switching. Apple HIG: "Favor improving search results over including a scope bar."
|
|
59
|
+
|
|
60
|
+
**When to use:** Users already in a clear context expecting confined results (e.g., within a Slack channel, a GitHub repo).
|
|
61
|
+
|
|
62
|
+
#### Command Palette (Cmd+K)
|
|
63
|
+
Modal search for both content and actions -- not just finding things but doing things. Triggered via keyboard shortcut (Cmd+K, Cmd+E, Ctrl+P). Centered overlay with input and scrollable list. Supports fuzzy matching, context-aware suggestions, and shows keyboard shortcuts alongside commands for education.
|
|
64
|
+
|
|
65
|
+
| App | Shortcut | Scope |
|
|
66
|
+
|-----|----------|-------|
|
|
67
|
+
| Linear | Cmd+K | Issues, projects, actions, settings |
|
|
68
|
+
| Notion | Cmd+K | Pages, actions, recently visited |
|
|
69
|
+
| Figma | Cmd+P | Commands, plugins, menu items |
|
|
70
|
+
| VS Code | Cmd+Shift+P | All commands, settings, files |
|
|
71
|
+
| Superhuman | Cmd+K | Email actions, navigation, compose |
|
|
72
|
+
| Slack | Cmd+K | Channels, DMs, navigation |
|
|
73
|
+
| GitHub | Cmd+K | Repos, files, commands, users |
|
|
74
|
+
|
|
75
|
+
**Design principles (Superhuman):** Bind shortcut at top level; toggle on same shortcut; provide context-aware suggestions; use fuzzy search; show recent/frequent commands first.
|
|
76
|
+
|
|
77
|
+
#### Inline Search
|
|
78
|
+
Embedded within a content area, filtering visible items in real time without navigating away. Results update character-by-character (debounced 150-300ms). No separate results page -- non-matching items disappear or dim. Client-side filtering for small datasets.
|
|
79
|
+
|
|
80
|
+
**When to use:** Tables, dropdown lists, settings panels, or bounded lists under ~1,000 items.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
### 1.2 Filter Types
|
|
85
|
+
|
|
86
|
+
#### Faceted Filters
|
|
87
|
+
Multi-dimensional filtering across independent categories. OR logic within a group, AND logic across groups. Each option shows result count. 5-7 facets per page (Baymard). "Show more" or search-within-filter for large facets. Collapsible groups, most-used expanded by default. 10% higher conversion vs. traditional filtering. Response times under 200ms.
|
|
88
|
+
|
|
89
|
+
**NNG:** "Develop filter categories and values that are appropriate, predictable, free of jargon, and prioritized."
|
|
90
|
+
|
|
91
|
+
#### Toggle Filters
|
|
92
|
+
Binary on/off for boolean attributes ("In stock," "Free shipping," "Verified"). Immediate effect, compact footprint in a horizontal bar. Keep to 3-5 maximum.
|
|
93
|
+
|
|
94
|
+
#### Range Sliders
|
|
95
|
+
Dual-handle slider for min/max (price, rating, size). Pair with numeric text inputs for precision and accessibility. Histogram overlay showing distribution. Debounced 300-500ms. Use `role="slider"` with `aria-valuemin`, `aria-valuemax`, `aria-valuenow`, `aria-valuetext`. Always provide companion text inputs for keyboard/screen reader users.
|
|
96
|
+
|
|
97
|
+
#### Date Range Filters
|
|
98
|
+
Calendar picker for custom ranges plus preset shortcuts ("Today," "Last 7 days," "Last 30 days," "This quarter," "Custom"). Support relative vs. absolute dates. Clear start/end display in filter chip.
|
|
99
|
+
|
|
100
|
+
#### Tag-Based Filters
|
|
101
|
+
Typeahead input for selecting/creating tags. Render as removable, color-coded chips. Multi-select with OR logic. Combine with other filter types. Best for user-generated categories and non-hierarchical attributes.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
### 1.3 Sort Patterns
|
|
106
|
+
|
|
107
|
+
Sort is separate from filtering but co-located. Common options: Relevance (default for search), Newest/Oldest, Price Low-High/High-Low, Popularity, Rating, Alphabetical, Distance. Sort is single-select (dropdown or segmented control, not checkboxes). Show active criterion: "Sorted by: Relevance." Never conflate sort with filter.
|
|
108
|
+
|
|
109
|
+
### 1.4 Saved Searches
|
|
110
|
+
|
|
111
|
+
- **Named saved searches:** User saves query + filters with a custom name
|
|
112
|
+
- **Recent searches:** Auto-stores last 5-10 queries, shown on focus
|
|
113
|
+
- **Filter presets:** System-defined combinations ("Budget-friendly," "New arrivals")
|
|
114
|
+
- **URL-based persistence:** State encoded in URL for bookmarking and sharing
|
|
115
|
+
|
|
116
|
+
Smashing Magazine: "Allowing users to save a query for reuse is recommended when users regularly perform a series of filters."
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 2. Best-in-Class Examples
|
|
121
|
+
|
|
122
|
+
### 2.1 Algolia (Search Infrastructure)
|
|
123
|
+
Sub-50ms InstantSearch with character-by-character updates. Autocomplete shows 6-8 query suggestions + 4-6 result previews. Federated search groups results by type (products, articles, FAQs). Built-in typo tolerance. Highlights matching portions of suggestions.
|
|
124
|
+
|
|
125
|
+
**Takeaway:** Show results before the user finishes typing. Reduces search abandonment by 30%+.
|
|
126
|
+
|
|
127
|
+
### 2.2 Airbnb (Travel Marketplace)
|
|
128
|
+
Progressive disclosure: destination, then dates, then guests. Map-integrated results update with filters. Price histogram on range filter. Contextual filters change by listing type. Personalized suggestions from past behavior.
|
|
129
|
+
|
|
130
|
+
**Takeaway:** Guide users through filters in order of impact rather than presenting all simultaneously.
|
|
131
|
+
|
|
132
|
+
### 2.3 Amazon (E-Commerce)
|
|
133
|
+
Left sidebar faceted navigation with category hierarchy. Result counts on every filter option. Autocomplete with product thumbnails and category suggestions. Department scoping narrows subsequent filters. Breadcrumb trail for backtracking.
|
|
134
|
+
|
|
135
|
+
**Takeaway:** For large catalogs, use hierarchical categories alongside flat filters. Always show result counts per option.
|
|
136
|
+
|
|
137
|
+
### 2.4 Linear (Project Management)
|
|
138
|
+
Cmd+K palette with fuzzy search across issues, projects, views, actions. Visual filter builder with boolean logic ("Status is In Progress AND Assignee is me"). Filters persist in saved, shareable views. Fully keyboard-driven. "Group by" and "Sort by" separated from filters.
|
|
139
|
+
|
|
140
|
+
**Takeaway:** Provide both preset filters and a composable filter builder. Make filters persistent and URL-shareable.
|
|
141
|
+
|
|
142
|
+
### 2.5 Notion (Knowledge Management)
|
|
143
|
+
Cmd+K across all pages and content. Shows page hierarchy for context. Database views support saved filter/sort combos. Inline "/" palette for block-level actions. Recent pages on search focus.
|
|
144
|
+
|
|
145
|
+
**Takeaway:** Separate navigation search (Cmd+K) from action search (/) when your app has both content and editing dimensions.
|
|
146
|
+
|
|
147
|
+
### 2.6 Spotify (Music Streaming)
|
|
148
|
+
AI-powered autocomplete after 2-3 characters. Results in horizontal carousels by type: Artists, Songs, Albums, Playlists, Podcasts. Genre/mood browsing as alternative. Visual results with album art. Recent searches prominent on focus.
|
|
149
|
+
|
|
150
|
+
**Takeaway:** For multi-type content, group results by category with visual thumbnails for scan speed.
|
|
151
|
+
|
|
152
|
+
### 2.7 Figma (Design Tool)
|
|
153
|
+
Cmd+P for Quick Actions (commands, plugins). Ctrl+F for in-canvas search. Asset panel search for components/styles. Multi-scope search: canvas content, design assets, and application commands each optimized.
|
|
154
|
+
|
|
155
|
+
**Takeaway:** Complex tools benefit from multiple purpose-built search interfaces rather than one universal search.
|
|
156
|
+
|
|
157
|
+
### 2.8 GitHub (Developer Platform)
|
|
158
|
+
Cmd+K palette with scoped search (repo, org, global). Advanced syntax: `is:open author:@me label:bug`. Code search with regex. Saved queries. Context-aware scope narrowing. Filter sidebar with facets.
|
|
159
|
+
|
|
160
|
+
**Takeaway:** Support structured query language for power users alongside GUI filters for discoverability.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 3. User Flow Mapping
|
|
165
|
+
|
|
166
|
+
### 3.1 Search Flow
|
|
167
|
+
|
|
168
|
+
1. **Focus** -- Show recent searches / popular queries / empty state
|
|
169
|
+
2. **Type** -- Debounce 150-300ms, send query
|
|
170
|
+
3. **Suggest** -- Display autocomplete: 6-8 query suggestions, 4-6 result previews, category suggestions
|
|
171
|
+
4. **Select** -- User picks suggestion (navigate to item) OR presses Enter (full results page)
|
|
172
|
+
5. **Refine** -- Results page with filters, sort, count; user iterates
|
|
173
|
+
|
|
174
|
+
### 3.2 Filter Flow
|
|
175
|
+
|
|
176
|
+
**Instant path:** Select filter -> debounce 200ms -> update results + count -> show filter chip
|
|
177
|
+
**Batch path:** Select multiple filters -> tap "Show N results" -> update results -> close modal (mobile)
|
|
178
|
+
**Remove:** Click "x" on chip or "Clear all" -> update results
|
|
179
|
+
|
|
180
|
+
### 3.3 Edge Cases
|
|
181
|
+
|
|
182
|
+
#### Typos and Misspellings
|
|
183
|
+
Fuzzy matching with Levenshtein distance <= 2. Show "Did you mean: [corrected]?" or auto-correct with "Showing results for [corrected]. Search instead for [original]?" Baymard: 58% of e-commerce sites fail on abbreviation/symbol searches.
|
|
184
|
+
|
|
185
|
+
#### Empty Results
|
|
186
|
+
Never show a blank page. Provide: spelling corrections, related/popular searches, broadened search (remove least impactful filter), recently viewed items. Specific copy: "No results for 'kiwi framwork'. Try 'kiwi framework' or browse [Popular Categories]."
|
|
187
|
+
|
|
188
|
+
#### Slow Search (> 500ms)
|
|
189
|
+
Skeleton/shimmer loading state immediately. Progress indicator at 500ms. "Taking longer than usual" message at 3s with cancel option. Cache frequent queries. Prefetch likely autocomplete selections.
|
|
190
|
+
|
|
191
|
+
#### Very Long Result Sets (1,000+ results)
|
|
192
|
+
Pagination or infinite scroll with count ("Showing 1-20 of 4,382"). Encourage refinement: "Too many results? Try adding filters." Virtual scrolling for 200+ visible items. Group results by category.
|
|
193
|
+
|
|
194
|
+
#### Special Characters and Operators
|
|
195
|
+
Strip/escape special characters by default. Support quoted phrases ("exact match") and operators (AND, OR, NOT) for advanced users. Document syntax in a help tooltip.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 4. Micro-Interactions
|
|
200
|
+
|
|
201
|
+
### 4.1 Search Expand Animation
|
|
202
|
+
Icon expands into full input field. Duration: 200-300ms, ease-out. Icon slides left, width animates from 0 to target. Placeholder fades in after expansion (50ms delay). Focus set automatically. On mobile: full-screen SearchView with back arrow replacing search icon. Avoid pushing nav elements off-screen -- use overlay.
|
|
203
|
+
|
|
204
|
+
### 4.2 Autocomplete Dropdown
|
|
205
|
+
Slides down or fades in (150ms, ease-out). Rows highlight on hover/keyboard. Matching text bolded or color-highlighted. Category headers in muted style. Max height 400-500px with internal scroll. Shadow for visual separation. Keys: Arrow Down/Up navigate, Enter selects, Escape closes, Tab accepts inline completion.
|
|
206
|
+
|
|
207
|
+
### 4.3 Filter Chip Addition/Removal
|
|
208
|
+
**Add:** Chip scales 0-100% (150ms, spring). Existing chips slide right. Brief highlight flash.
|
|
209
|
+
**Remove:** Chip scales 100-0% (120ms, ease-in). Remaining chips slide left. Results update simultaneously.
|
|
210
|
+
**Anatomy:** Category + value label ("Color: Blue"), "x" button (min 44x44px touch target), distinct background.
|
|
211
|
+
|
|
212
|
+
### 4.4 Result Highlighting
|
|
213
|
+
Matched text gets background highlight (yellow/amber at 30% opacity) or bold treatment. Highlight each matched term independently for multi-word queries. In autocomplete: user input normal weight, suggested completion bold (Algolia pattern).
|
|
214
|
+
|
|
215
|
+
### 4.5 Result Count Animation
|
|
216
|
+
Ticker effect: old number scrolls up, new scrolls down (300-500ms). Large changes use ticker, small changes use crossfade. Show "updating..." if query exceeds 200ms.
|
|
217
|
+
|
|
218
|
+
### 4.6 Filter Panel Open/Close
|
|
219
|
+
**Desktop:** Sidebar slides in from left (250ms, ease-out), content area adjusts, icon rotates.
|
|
220
|
+
**Mobile:** Bottom sheet slides up (300ms, spring) or modal fades in. Backdrop overlay (200ms). "Show N results" fixed at bottom. Swipe-to-dismiss with velocity threshold.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 5. Anti-Patterns
|
|
225
|
+
|
|
226
|
+
### 5.1 No Autocomplete
|
|
227
|
+
**Problem:** Forcing users to type complete queries and press Enter before seeing any results. Users must guess the exact terminology.
|
|
228
|
+
**Impact:** Increases search abandonment by 30%+ (Algolia). Users who misspell or use different terminology get zero results.
|
|
229
|
+
**Fix:** Implement search-as-you-type with query suggestions and result previews. Even basic prefix matching is better than nothing.
|
|
230
|
+
|
|
231
|
+
### 5.2 Search Without a Clear Button
|
|
232
|
+
**Problem:** No visible "x" button to clear the search input. Users must manually select all text and delete it.
|
|
233
|
+
**Impact:** Adds friction to every search iteration. Particularly painful on mobile where text selection is clumsy.
|
|
234
|
+
**Fix:** Show a clear (x) button inside the input whenever it contains text. On clear, return to the default view (not a blank results page).
|
|
235
|
+
|
|
236
|
+
### 5.3 Filters That Reset on Navigation
|
|
237
|
+
**Problem:** User applies filters, clicks into a result, presses back, and all filters are gone.
|
|
238
|
+
**Impact:** Users must reapply 3-5 filters every time they drill into a result. This is one of the most complained-about UX issues in e-commerce (Baymard).
|
|
239
|
+
**Fix:** Persist filter state in the URL (query parameters) and/or session storage. Filters must survive back-button navigation.
|
|
240
|
+
|
|
241
|
+
### 5.4 No Search Result Count
|
|
242
|
+
**Problem:** Showing results without telling the user how many there are.
|
|
243
|
+
**Impact:** Users cannot gauge whether to refine their search or browse results. No feedback on filter effectiveness.
|
|
244
|
+
**Fix:** Always display the total result count: "42 results for 'wireless keyboard'." Update the count in real time as filters change.
|
|
245
|
+
|
|
246
|
+
### 5.5 Case-Sensitive Search
|
|
247
|
+
**Problem:** "iPhone" returns results but "iphone" returns nothing.
|
|
248
|
+
**Impact:** Users never expect case sensitivity in a UI search. This looks like a bug.
|
|
249
|
+
**Fix:** Normalize search queries to lowercase before matching. Case-sensitive search should only exist in developer tools with an explicit toggle.
|
|
250
|
+
|
|
251
|
+
### 5.6 No Recent Searches
|
|
252
|
+
**Problem:** Search input shows nothing on focus. Users must remember and retype previous queries.
|
|
253
|
+
**Impact:** Frequent users waste time re-entering the same searches. New users miss the opportunity to see what is searchable.
|
|
254
|
+
**Fix:** Display the last 5-10 searches on input focus (before typing). Include a "Clear history" option for privacy.
|
|
255
|
+
|
|
256
|
+
### 5.7 Filter Options That Yield Zero Results
|
|
257
|
+
**Problem:** User selects a filter combination and gets "No results found." The filter options themselves should have prevented this.
|
|
258
|
+
**Impact:** Users lose trust in the filter system. They cannot predict which combinations work.
|
|
259
|
+
**Fix:** Show result counts next to every filter option. Disable or visually dim options that would produce zero results given the current filter state. Dynamically update counts as filters change.
|
|
260
|
+
|
|
261
|
+
### 5.8 Search Icon Without Visible Input
|
|
262
|
+
**Problem:** Hiding the search bar behind a magnifying glass icon with no visible text input.
|
|
263
|
+
**Impact:** NNG found that replacing a search link with a visible search box increased search usage by 91%. Hidden search signals that search is a secondary feature.
|
|
264
|
+
**Fix:** On desktop, always show the search input field. On mobile, the icon-to-input pattern is acceptable if it expands on tap with a smooth animation.
|
|
265
|
+
|
|
266
|
+
### 5.9 No Typo Tolerance
|
|
267
|
+
**Problem:** "recieve" returns no results instead of showing results for "receive."
|
|
268
|
+
**Impact:** Users blame themselves or the product. Search feels broken.
|
|
269
|
+
**Fix:** Implement fuzzy matching with Levenshtein distance. Show "Did you mean: receive?" for ambiguous corrections. Auto-correct obvious single-character errors.
|
|
270
|
+
|
|
271
|
+
### 5.10 Conflating Search and Filter
|
|
272
|
+
**Problem:** Putting search functionality inside the filter panel, or making users choose between searching OR filtering rather than combining both.
|
|
273
|
+
**Impact:** Users who search cannot filter results. Users who filter cannot search within filtered results.
|
|
274
|
+
**Fix:** Search and filter should be independent, composable operations. A user should be able to search for "blue dress" and then filter by size, price, and brand.
|
|
275
|
+
|
|
276
|
+
### 5.11 Auto-Submitting on Every Keystroke Without Debounce
|
|
277
|
+
**Problem:** Firing a search request on every single keystroke, causing flickering results, high server load, and race conditions.
|
|
278
|
+
**Impact:** Results flash and change faster than users can read. Network requests may return out of order, showing stale results.
|
|
279
|
+
**Fix:** Debounce input by 150-300ms. Cancel in-flight requests when a new query is issued. Use request sequencing to prevent stale results.
|
|
280
|
+
|
|
281
|
+
### 5.12 Full-Page Reload on Filter Change
|
|
282
|
+
**Problem:** Every filter selection causes a full page reload, scrolling users back to the top.
|
|
283
|
+
**Impact:** Users lose their scroll position and context. Filter exploration becomes painfully slow.
|
|
284
|
+
**Fix:** Use AJAX/fetch to update results without a full page reload. Maintain scroll position. If a full reload is necessary, scroll to the results section, not the top of the page.
|
|
285
|
+
|
|
286
|
+
### 5.13 Hiding Active Filter State
|
|
287
|
+
**Problem:** Filters are applied but there is no visible indication of which filters are active.
|
|
288
|
+
**Impact:** Users do not understand why results seem limited. They may not realize they have active filters from a previous session.
|
|
289
|
+
**Fix:** Display active filters as chips above results. Highlight active filter controls in the sidebar. Show "N filters active" badge on the mobile filter button.
|
|
290
|
+
|
|
291
|
+
### 5.14 Using Jargon in Filter Labels
|
|
292
|
+
**Problem:** Filter labels use internal terminology ("SKU type," "Taxonomy Level 2") instead of user language.
|
|
293
|
+
**Impact:** Users do not understand what the filters mean. They avoid using them entirely.
|
|
294
|
+
**Fix:** Use plain language tested with real users. NNG: "Users should immediately understand what the facets represent when skimming the options."
|
|
295
|
+
|
|
296
|
+
### 5.15 Pagination Resetting on Filter Change
|
|
297
|
+
**Problem:** User is on page 5 of results, applies a filter, and stays on "page 5" of the now-smaller result set (which may be empty or near-empty).
|
|
298
|
+
**Impact:** User sees no results or irrelevant results after filtering, even though matches exist.
|
|
299
|
+
**Fix:** Reset to page 1 whenever any filter is applied or removed. Preserve pagination state only across sort changes.
|
|
300
|
+
|
|
301
|
+
### 5.16 No Keyboard Shortcut for Search
|
|
302
|
+
**Problem:** Users must click the search bar with a mouse. No keyboard shortcut to focus it.
|
|
303
|
+
**Impact:** Keyboard-first users and power users are slowed down. Accessibility is diminished.
|
|
304
|
+
**Fix:** Implement "/" or "Cmd+K" to focus the search input. Show the shortcut hint inside the placeholder text or as a badge on the search bar (e.g., "Search... Cmd+K").
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 6. Accessibility
|
|
309
|
+
|
|
310
|
+
### 6.1 Search Landmark Role
|
|
311
|
+
|
|
312
|
+
```html
|
|
313
|
+
<search>
|
|
314
|
+
<form role="search" aria-label="Site search">
|
|
315
|
+
<label for="site-search" class="visually-hidden">Search</label>
|
|
316
|
+
<input id="site-search" type="search" placeholder="Search..." autocomplete="off" />
|
|
317
|
+
<button type="submit" aria-label="Submit search">
|
|
318
|
+
<svg aria-hidden="true"><!-- icon --></svg>
|
|
319
|
+
</button>
|
|
320
|
+
</form>
|
|
321
|
+
</search>
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Use `role="search"` or `<search>` landmark. Provide `<label>` (visible or visually hidden). Use `type="search"` for native clear button. Multiple search forms need unique `aria-label` values.
|
|
325
|
+
|
|
326
|
+
### 6.2 Autocomplete ARIA Patterns (Combobox)
|
|
327
|
+
|
|
328
|
+
```html
|
|
329
|
+
<div role="combobox" aria-expanded="true" aria-haspopup="listbox" aria-owns="search-results">
|
|
330
|
+
<input type="search" aria-autocomplete="list" aria-controls="search-results"
|
|
331
|
+
aria-activedescendant="result-3" />
|
|
332
|
+
</div>
|
|
333
|
+
<ul id="search-results" role="listbox" aria-label="Search suggestions">
|
|
334
|
+
<li id="result-1" role="option">Suggestion 1</li>
|
|
335
|
+
<li id="result-3" role="option" aria-selected="true">Suggestion 3</li>
|
|
336
|
+
</ul>
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
**Required attributes:** `role="combobox"` on container, `aria-expanded` (true/false), `aria-haspopup="listbox"`, `aria-controls` pointing to popup ID, `aria-activedescendant` pointing to focused option, `aria-autocomplete` ("list", "inline", or "both"), `role="listbox"` on popup, `role="option"` on each suggestion, `aria-selected` on active option.
|
|
340
|
+
|
|
341
|
+
**Autocomplete variants (W3C WAI):** `"none"` = popup of predefined values; `"list"` = filtered suggestions; `"inline"` = completion text in input; `"both"` = inline + popup list.
|
|
342
|
+
|
|
343
|
+
### 6.3 Filter Checkbox Groups
|
|
344
|
+
|
|
345
|
+
```html
|
|
346
|
+
<fieldset>
|
|
347
|
+
<legend>Brand</legend>
|
|
348
|
+
<label><input type="checkbox" name="brand" value="apple" /> Apple (42)</label>
|
|
349
|
+
<label><input type="checkbox" name="brand" value="samsung" /> Samsung (38)</label>
|
|
350
|
+
</fieldset>
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Group filters with `<fieldset>`/`<legend>` or `role="group"` with `aria-labelledby`. Each option needs a visible `<label>`. Disabled options use `aria-disabled="true"` with explanation. State changes announced via label text.
|
|
354
|
+
|
|
355
|
+
### 6.4 Result Count Announcements
|
|
356
|
+
|
|
357
|
+
```html
|
|
358
|
+
<div aria-live="polite" aria-atomic="true" class="visually-hidden">
|
|
359
|
+
42 results found for "wireless keyboard"
|
|
360
|
+
</div>
|
|
361
|
+
<p class="results-count">42 results for "wireless keyboard"</p>
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Use `aria-live="polite"` + `aria-atomic="true"` on a visually hidden region to announce count changes without interrupting speech. Keep concise: "42 results" not verbose sentences. Debounce during rapid filter changes (500ms). Announce no-results with guidance.
|
|
365
|
+
|
|
366
|
+
### 6.5 Keyboard Navigation
|
|
367
|
+
|
|
368
|
+
| Context | Key | Action |
|
|
369
|
+
|---------|-----|--------|
|
|
370
|
+
| Search input | Enter | Submit / select suggestion |
|
|
371
|
+
| Search input | Escape | Clear or close dropdown |
|
|
372
|
+
| Search input | Down/Up Arrow | Navigate suggestions |
|
|
373
|
+
| Search input | Tab | Next focusable element |
|
|
374
|
+
| Results list | Enter | Open focused result |
|
|
375
|
+
| Results list | Escape | Return to search input |
|
|
376
|
+
| Results list | Home/End | First/last result |
|
|
377
|
+
| Filters | Space | Toggle checkbox |
|
|
378
|
+
| Filters | Enter | Activate button / expand group |
|
|
379
|
+
| Filters | Escape | Close modal, restore focus |
|
|
380
|
+
| Filters | Arrow keys | Navigate radio group |
|
|
381
|
+
|
|
382
|
+
### 6.6 Focus Management
|
|
383
|
+
|
|
384
|
+
- Search overlay open: focus to input. Dropdown close: focus stays on input.
|
|
385
|
+
- Filter modal open: focus to first interactive element. Modal close: focus returns to trigger.
|
|
386
|
+
- Trap focus within modal filter panels (Tab must not escape to background).
|
|
387
|
+
- Provide skip link past filter controls to results.
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## 7. Cross-Platform Adaptation
|
|
392
|
+
|
|
393
|
+
### 7.1 iOS
|
|
394
|
+
|
|
395
|
+
Search bar embedded in navigation bar via `UISearchController`, hidden under title by default. Pull down to reveal. Tapping expands, dims background, shows Cancel button. Optional scope bar (segmented control) below for categories. Two styles: prominent (tinted background) and minimal (blends with interface). Supports search tokens (typed filter chips in the search bar).
|
|
396
|
+
|
|
397
|
+
**Filters:** Horizontal scrollable chips below search bar. Tap chip for contextual menu. Bottom sheet (medium/large detents) for complex panels. "Done"/"Apply" to confirm.
|
|
398
|
+
|
|
399
|
+
### 7.2 Android (Material Design 3)
|
|
400
|
+
|
|
401
|
+
Two components: SearchBar (persistent, collapsed, rounded text field) and SearchView (expanded, full-screen). Tapping bar morphs to view with container transform animation. Leading icon transitions: search icon to back arrow. Full screen on phones, overlay on tablets. Supports voice input.
|
|
402
|
+
|
|
403
|
+
**Filters:** Horizontal scrollable Material Chips. ModalBottomSheet for complex panels. "Show results" button with count at bottom.
|
|
404
|
+
|
|
405
|
+
### 7.3 Web
|
|
406
|
+
|
|
407
|
+
**Command palette:** Centered modal (500-600px), dark backdrop, input + scrollable list, keyboard-first, grouped by category, fuzzy search with highlighting.
|
|
408
|
+
|
|
409
|
+
**Faceted sidebar:** Persistent left sidebar (220-280px), collapsible groups, "Show more" for 5-7+ options, sticky independent scroll, chips above results grid.
|
|
410
|
+
|
|
411
|
+
**Responsive behavior:**
|
|
412
|
+
| Breakpoint | Search | Filters |
|
|
413
|
+
|------------|--------|---------|
|
|
414
|
+
| Desktop (> 1024px) | Visible search bar in header | Persistent sidebar + chip row |
|
|
415
|
+
| Tablet (768-1024px) | Visible bar, may shrink | Collapsible sidebar or top bar chips |
|
|
416
|
+
| Mobile (< 768px) | Icon expanding to overlay | Button opening full-screen modal |
|
|
417
|
+
|
|
418
|
+
**URL state:** Encode query + filters in URL params (`?q=keyboard&brand=apple&price=50-200`). Support back/forward navigation and deep linking.
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## 8. Decision Tree
|
|
423
|
+
|
|
424
|
+
### 8.1 Global Search vs. Scoped Search
|
|
425
|
+
|
|
426
|
+
| Condition | Recommendation |
|
|
427
|
+
|-----------|---------------|
|
|
428
|
+
| Multiple content types, user looks across all | GLOBAL SEARCH with category tabs in results |
|
|
429
|
+
| Multiple types, user always in clear context | SCOPED SEARCH with "Search everywhere" option |
|
|
430
|
+
| Multiple types, context varies | GLOBAL SEARCH with scope selector |
|
|
431
|
+
| Single content type | SCOPED SEARCH (implicit scope) |
|
|
432
|
+
|
|
433
|
+
**Rule of thumb:** Default to global search unless users consistently work in a single scope.
|
|
434
|
+
|
|
435
|
+
### 8.2 Instant Filters vs. Apply Button
|
|
436
|
+
|
|
437
|
+
| Condition | Recommendation |
|
|
438
|
+
|-----------|---------------|
|
|
439
|
+
| Fast queries (< 200ms), 1-3 filters | INSTANT FILTERS |
|
|
440
|
+
| Fast queries, 4+ filters | INSTANT FILTERS with undo support |
|
|
441
|
+
| Slow queries (> 500ms), desktop | INSTANT with debounce + skeleton loading |
|
|
442
|
+
| Slow queries, mobile | APPLY BUTTON ("Show 42 results") |
|
|
443
|
+
|
|
444
|
+
**Rule of thumb:** Instant on desktop when performance allows. Apply button on mobile to prevent reflows.
|
|
445
|
+
|
|
446
|
+
### 8.3 Command Palette vs. Search Bar
|
|
447
|
+
|
|
448
|
+
| Condition | Recommendation |
|
|
449
|
+
|-----------|---------------|
|
|
450
|
+
| Power users, many commands/actions | COMMAND PALETTE (Cmd+K) + search bar for content |
|
|
451
|
+
| Power users, few actions | SEARCH BAR with Cmd+K focus shortcut |
|
|
452
|
+
| General consumers | SEARCH BAR (prominent, visible). Palette optional. |
|
|
453
|
+
|
|
454
|
+
**Rule of thumb:** Palettes are essential for productivity tools (Linear, Figma, VS Code). Consumer products use a visible search bar as primary.
|
|
455
|
+
|
|
456
|
+
### 8.4 Faceted Sidebar vs. Horizontal Filter Bar
|
|
457
|
+
|
|
458
|
+
| Dimensions | Desktop | Mobile |
|
|
459
|
+
|------------|---------|--------|
|
|
460
|
+
| 1-4 | Horizontal filter bar (chips/dropdowns) | Horizontal chips or dropdown |
|
|
461
|
+
| 5-10 | Faceted sidebar | Full-screen modal |
|
|
462
|
+
| 10+ | Sidebar with collapsible groups + search-within-filter | Multi-step modal |
|
|
463
|
+
|
|
464
|
+
### 8.5 Search Results Page vs. Inline Results
|
|
465
|
+
|
|
466
|
+
| Expected results | Recommendation |
|
|
467
|
+
|-----------------|---------------|
|
|
468
|
+
| < 50, comparison needed | INLINE RESULTS (filter current view) |
|
|
469
|
+
| < 50, no comparison | Either approach |
|
|
470
|
+
| 50-1,000 | RESULTS PAGE with pagination/infinite scroll |
|
|
471
|
+
| 1,000+ | RESULTS PAGE with mandatory filters, encourage narrowing |
|
|
472
|
+
|
|
473
|
+
---
|
|
474
|
+
|
|
475
|
+
## Implementation Reference
|
|
476
|
+
|
|
477
|
+
### Debounce Timing Guidelines
|
|
478
|
+
|
|
479
|
+
| Interaction | Debounce | Rationale |
|
|
480
|
+
|-------------|----------|-----------|
|
|
481
|
+
| Search-as-you-type query | 150-300ms | Balance between responsiveness and server load |
|
|
482
|
+
| Filter checkbox toggle | 0-200ms | Instant feels best; debounce if queries are slow |
|
|
483
|
+
| Range slider drag | 300-500ms | Wait for user to finish adjusting |
|
|
484
|
+
| Sort selection | 0ms | Immediate -- single action, clear intent |
|
|
485
|
+
| Clear all filters | 0ms | Immediate -- destructive action, user expects reset |
|
|
486
|
+
|
|
487
|
+
### Result Count Display Formats
|
|
488
|
+
|
|
489
|
+
| Context | Format | Example |
|
|
490
|
+
|---------|--------|---------|
|
|
491
|
+
| Search results | "{count} results for '{query}'" | "42 results for 'wireless keyboard'" |
|
|
492
|
+
| Filtered list | "{count} {items}" | "42 products" |
|
|
493
|
+
| Filter option | "{label} ({count})" | "Apple (42)" |
|
|
494
|
+
| Mobile apply button | "Show {count} results" | "Show 42 results" |
|
|
495
|
+
| Empty results | "No results for '{query}'" | "No results for 'xyzzy'" |
|
|
496
|
+
| Loading | "Searching..." or skeleton | -- |
|
|
497
|
+
|
|
498
|
+
### URL Parameter Conventions
|
|
499
|
+
|
|
500
|
+
```
|
|
501
|
+
# Single-value filter
|
|
502
|
+
?brand=apple
|
|
503
|
+
|
|
504
|
+
# Multi-value filter (OR logic within group)
|
|
505
|
+
?brand=apple,samsung,sony
|
|
506
|
+
|
|
507
|
+
# Range filter
|
|
508
|
+
?price=50-200
|
|
509
|
+
|
|
510
|
+
# Search query
|
|
511
|
+
?q=wireless+keyboard
|
|
512
|
+
|
|
513
|
+
# Sort
|
|
514
|
+
?sort=price_asc
|
|
515
|
+
|
|
516
|
+
# Pagination
|
|
517
|
+
?page=2&per_page=20
|
|
518
|
+
|
|
519
|
+
# Combined
|
|
520
|
+
/products?q=keyboard&brand=apple,logitech&price=50-200&sort=rating&page=1
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Performance Targets
|
|
524
|
+
|
|
525
|
+
| Metric | Target | Degraded | Unacceptable |
|
|
526
|
+
|--------|--------|----------|--------------|
|
|
527
|
+
| Autocomplete response | < 100ms | 100-300ms | > 500ms |
|
|
528
|
+
| Search results load | < 200ms | 200-500ms | > 1000ms |
|
|
529
|
+
| Filter update | < 200ms | 200-500ms | > 1000ms |
|
|
530
|
+
| Keyboard shortcut response | < 50ms | 50-100ms | > 200ms |
|
|
531
|
+
| Animation frame rate | 60fps | 30fps | < 30fps |
|
|
532
|
+
|
|
533
|
+
### Search Analytics to Track
|
|
534
|
+
|
|
535
|
+
| Metric | What it reveals |
|
|
536
|
+
|--------|----------------|
|
|
537
|
+
| Search exit rate | % of users who leave after searching -- indicates poor result quality |
|
|
538
|
+
| Zero-result rate | % of queries returning no results -- surface content gaps or typo issues |
|
|
539
|
+
| Click-through position | Which result position users click -- validates ranking quality |
|
|
540
|
+
| Query refinement rate | % of users who modify their query -- may indicate poor initial results |
|
|
541
|
+
| Filter usage rate | Which filters are most/least used -- inform filter prioritization |
|
|
542
|
+
| Time to first click | How long users scan before clicking -- lower is better |
|
|
543
|
+
| Autocomplete acceptance rate | % of users selecting a suggestion -- validates suggestion quality |
|
|
544
|
+
| Search-to-conversion rate | % of searchers who complete a goal -- the ultimate success metric |
|
|
545
|
+
|
|
546
|
+
### Common Search Query Patterns to Support
|
|
547
|
+
|
|
548
|
+
| Pattern | Example | Implementation |
|
|
549
|
+
|---------|---------|---------------|
|
|
550
|
+
| Natural language | "blue dress under $50" | Parse intent, map to filters |
|
|
551
|
+
| Category + attribute | "laptops 16gb ram" | Detect category, extract attributes |
|
|
552
|
+
| Exact phrase | "air jordan 1 retro" | Quoted phrase matching |
|
|
553
|
+
| Negation | "headphones -wireless" | Exclude term from results |
|
|
554
|
+
| Comparison | "iphone vs samsung" | Detect comparison intent, show side-by-side |
|
|
555
|
+
| Question | "what size battery for honda civic" | Extract entity, search knowledge base |
|
|
556
|
+
| Misspelling | "wireles keybord" | Fuzzy match, suggest correction |
|
|
557
|
+
| Abbreviation | "4k tv 55in" | Expand abbreviations, normalize units |
|
|
558
|
+
|
|
559
|
+
### Filter State Management Patterns
|
|
560
|
+
|
|
561
|
+
**Client-side state (SPA):**
|
|
562
|
+
- Store filter state in URL search params for shareability and back-button support
|
|
563
|
+
- Use `URLSearchParams` API or a router-integrated state manager
|
|
564
|
+
- Sync URL state bidirectionally: URL change updates UI, UI change updates URL
|
|
565
|
+
- Serialize complex filters (date ranges, nested selections) as compact strings
|
|
566
|
+
|
|
567
|
+
**Server-side state:**
|
|
568
|
+
- Accept filter params as query string or POST body
|
|
569
|
+
- Return result count in response headers or body for "Show N results" buttons
|
|
570
|
+
- Support pagination cursors alongside filter params
|
|
571
|
+
- Cache filtered result sets with filter-hash keys for repeat queries
|
|
572
|
+
|
|
573
|
+
**Hybrid (recommended for large apps):**
|
|
574
|
+
- URL holds the serialized filter state (source of truth)
|
|
575
|
+
- Client-side cache holds recent result sets keyed by filter hash
|
|
576
|
+
- Server-side processes queries and returns paginated results
|
|
577
|
+
- Optimistic UI: update filter chips immediately, show skeleton for results
|
|
578
|
+
|
|
579
|
+
---
|
|
580
|
+
|
|
581
|
+
## Sources
|
|
582
|
+
|
|
583
|
+
- [Baymard Institute -- E-Commerce Search Usability Research](https://baymard.com/research/ecommerce-search)
|
|
584
|
+
- [Baymard Institute -- Mobile UX Trends 2025](https://baymard.com/blog/mobile-ux-ecommerce)
|
|
585
|
+
- [Nielsen Norman Group -- Search Usability Reports](https://www.nngroup.com/reports/topic/search/)
|
|
586
|
+
- [NNG -- Search: Visible and Simple](https://www.nngroup.com/articles/search-visible-and-simple/)
|
|
587
|
+
- [NNG -- Helpful Filter Categories and Values](https://www.nngroup.com/articles/filter-categories-values/)
|
|
588
|
+
- [Algolia -- Best Practices for Site Search UI Design Patterns](https://www.algolia.com/blog/ux/best-practices-for-site-search-ui-design-patterns)
|
|
589
|
+
- [Algolia -- Autocomplete Beyond Search](https://www.algolia.com/blog/ux/autocomplete-beyond-search-engaging-users-with-next-level-ux/)
|
|
590
|
+
- [Algolia -- Search Filter UX Best Practices](https://www.algolia.com/blog/ux/search-filter-ux-best-practices/)
|
|
591
|
+
- [Algolia -- Mobile Search UX Best Practices](https://www.algolia.com/blog/ux/mobile-search-ux-best-practices/)
|
|
592
|
+
- [W3C WAI -- Combobox Pattern (ARIA APG)](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/)
|
|
593
|
+
- [W3C WAI -- Editable Combobox With List Autocomplete](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/)
|
|
594
|
+
- [Apple -- Human Interface Guidelines: Search Fields](https://developers.apple.com/design/human-interface-guidelines/components/navigation-and-search/search-fields)
|
|
595
|
+
- [Material Design 3 -- Search Guidelines](https://m3.material.io/components/search/guidelines)
|
|
596
|
+
- [Material Design -- Search Bar (Android)](https://github.com/material-components/material-components-android/blob/master/docs/components/Search.md)
|
|
597
|
+
- [Superhuman -- How to Build a Remarkable Command Palette](https://blog.superhuman.com/how-to-build-a-remarkable-command-palette/)
|
|
598
|
+
- [Smashing Magazine -- Designing Filters That Work](https://www.smashingmagazine.com/2021/07/frustrating-design-patterns-broken-frozen-filters/)
|
|
599
|
+
- [Pencil & Paper -- Filter UX Design Patterns & Best Practices](https://www.pencilandpaper.io/articles/ux-pattern-analysis-enterprise-filtering)
|
|
600
|
+
- [Mobbin -- Command Palette UI Design](https://mobbin.com/glossary/command-palette)
|
|
601
|
+
- [DesignMonks -- Master Search UX in 2026](https://www.designmonks.co/blog/search-ux-best-practices)
|