@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.
Files changed (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. 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)