@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,795 @@
1
+ # Iconography in UI/UX Design
2
+
3
+ > **Module Type:** Foundation
4
+ > **Domain:** Design Systems, Visual Design, Interaction Design
5
+ > **Last Updated:** 2026-03-07
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ Icons are the shorthand of user interfaces. They compress meaning into small visual
12
+ symbols that guide users through navigation, communicate status, trigger actions, and
13
+ reinforce brand identity. When used well, icons reduce cognitive load and accelerate
14
+ task completion. When used poorly, they introduce ambiguity, slow users down, and
15
+ erode trust.
16
+
17
+ This module covers the principles, sizing conventions, platform-specific systems,
18
+ accessibility requirements, and decision frameworks that govern effective iconography
19
+ in modern product design.
20
+
21
+ ---
22
+
23
+ ## 1. Core Principles
24
+
25
+ ### 1.1 Icon Purposes
26
+
27
+ Every icon in a UI serves one of four functional roles. Mixing these roles within
28
+ a single icon creates confusion.
29
+
30
+ | Role | Purpose | Examples |
31
+ |------|---------|----------|
32
+ | **Wayfinding** | Guide the user to a destination or section | Home, back arrow, tab bar icons |
33
+ | **Action** | Trigger a specific operation | Delete, share, edit, send |
34
+ | **Status** | Communicate system or object state | Success checkmark, error warning, loading spinner |
35
+ | **Decoration** | Add visual interest without conveying meaning | Background patterns, section dividers |
36
+
37
+ **Key rule:** Decorative icons must never look interactive. If a decorative icon
38
+ resembles a button, users will try to click it. Apply `aria-hidden="true"` and
39
+ ensure decorative icons have no hover or focus states.
40
+
41
+ ### 1.2 Icon Styles
42
+
43
+ Three dominant rendering styles exist. Each has distinct use cases.
44
+
45
+ **Outlined (Stroke/Line) Icons**
46
+ - Best for: inactive states, navigation bars, secondary actions
47
+ - Characteristics: lighter visual weight, airy, modern feel
48
+ - Stroke width must be consistent across the entire set (1.5px or 2px are standard)
49
+ - Material Design specifies 2dp stroke width for all stroke instances, including
50
+ curves, angles, and both interior and exterior strokes
51
+
52
+ **Filled (Solid) Icons**
53
+ - Best for: active/selected states, primary actions, small sizes where detail is lost
54
+ - Characteristics: heavier visual weight, higher contrast, better legibility at small sizes
55
+ - Common pattern: outlined when inactive, filled when selected (iOS tab bars)
56
+ - At 16px and below, filled icons are more legible than outlined icons
57
+
58
+ **Two-Tone / Duotone Icons**
59
+ - Best for: illustrations, feature highlights, onboarding screens
60
+ - Characteristics: primary shape in full opacity, secondary detail at reduced opacity
61
+ - Phosphor Icons offers a dedicated duotone weight across its entire 9,000+ icon set
62
+ - Avoid using two-tone icons in dense, functional UI; they compete for attention
63
+
64
+ **Style selection rule:** Pick one style for your entire product and stick with it.
65
+ The only acceptable exception is outlined-to-filled state transitions (e.g., a
66
+ heart icon that fills when "liked"). Mixing outlined and filled icons arbitrarily
67
+ is the single most common iconography mistake in production UIs.
68
+
69
+ ### 1.3 Icon Sizing Conventions
70
+
71
+ Standard icon sizes follow an 8px-based scale. Most UI icons use 24px as the
72
+ baseline.
73
+
74
+ | Size | Use Case | Touch Target |
75
+ |------|----------|-------------|
76
+ | **12px** | Inline indicators only (status dots, chevrons in dense lists) | Not interactive |
77
+ | **16px** | Inline with body text, compact toolbars, breadcrumbs | Requires padding to 24px minimum |
78
+ | **20px** | Form field icons, small buttons, secondary navigation | Requires padding to 44px minimum |
79
+ | **24px** | Standard UI icons: toolbars, action bars, list items | 48px touch target (with 12px padding) |
80
+ | **32px** | Feature icons, card headers, empty state illustrations | 48px touch target (with 8px padding) |
81
+ | **40px** | Section headers, onboarding, marketing pages | Typically not interactive |
82
+ | **48px** | Hero illustrations, large touch targets, accessibility modes | Meets 48dp target natively |
83
+
84
+ **Critical accessibility requirement:** Regardless of visual icon size, the
85
+ interactive touch target must be at least 48x48dp (Android/Material Design) or
86
+ 44x44pt (iOS/WCAG 2.2 Level AAA). WCAG 2.2 Level AA (Success Criterion 2.5.8)
87
+ requires a minimum of 24x24 CSS pixels. Use padding to bridge the gap between
88
+ visual icon size and touch target.
89
+
90
+ ### 1.4 Optical Alignment
91
+
92
+ Icons need visual centering, not mathematical centering. Different shapes have
93
+ different optical weight, and the human eye perceives geometric center differently
94
+ from mathematical center.
95
+
96
+ **Common cases requiring optical adjustment:**
97
+
98
+ - **Play buttons (triangles):** A triangle mathematically centered in a circle
99
+ appears to lean left. Shift it 1-2px to the right to appear visually centered.
100
+ The Spotify play button uses this exact adjustment.
101
+ - **Asymmetric icons:** Icons with more visual weight on one side (e.g., a
102
+ megaphone, a pointing hand) need compensation in the opposite direction.
103
+ - **Icons with descenders:** Icons that extend below the baseline (e.g., a pin
104
+ with a point) should be optically lifted so the main body aligns with
105
+ neighboring icons.
106
+ - **Icons in circular containers:** The icon's optical center should align with
107
+ the circle's center, which often means the icon's mathematical bounding box
108
+ is off-center.
109
+
110
+ **Rule of thumb:** If it looks centered, it is centered. Trust your eyes over
111
+ your coordinate system. Icon grids provide starting points, not final positions.
112
+
113
+ ### 1.5 Icon + Text Pairing
114
+
115
+ The spatial relationship between icon and text affects how users parse the
116
+ combination.
117
+
118
+ **Icon left of text (horizontal layout)**
119
+ - Use for: action buttons, menu items, list items
120
+ - Spacing: 8px gap between icon and text label
121
+ - The icon acts as a visual anchor; the text provides clarity
122
+ - Example: [trash icon] Delete, [pencil icon] Edit
123
+
124
+ **Icon above text (vertical layout)**
125
+ - Use for: bottom navigation bars, tab bars, dashboard tiles
126
+ - Spacing: 4px gap between icon and text label
127
+ - The icon serves as the primary identifier; the text is secondary
128
+ - Example: iOS and Android bottom navigation tabs
129
+
130
+ **Icon right of text**
131
+ - Use sparingly: external link indicators, dropdown chevrons, forward arrows
132
+ - Signals "this goes somewhere" or "this opens something"
133
+ - Example: "Learn more [arrow icon]", "Select [chevron icon]"
134
+
135
+ **Icon after text in input fields**
136
+ - Use for: clear buttons, password visibility toggles, validation indicators
137
+ - The icon is a secondary action within the primary input context
138
+
139
+ ### 1.6 Icon-Only Buttons
140
+
141
+ Icon-only buttons (no visible text label) are acceptable ONLY when the icon
142
+ is universally recognized. Research from Nielsen Norman Group confirms that
143
+ very few icons enjoy universal recognition.
144
+
145
+ **Universally recognized icons (safe for icon-only use):**
146
+ - Close / dismiss (X)
147
+ - Search (magnifying glass)
148
+ - Back / forward (arrows)
149
+ - Menu / hamburger (three horizontal lines)
150
+ - Share (platform-specific: iOS share sheet, Android share)
151
+ - Home (house)
152
+ - Settings / gear
153
+ - Play / pause (media controls)
154
+ - Plus / add
155
+
156
+ **Icons that REQUIRE text labels:**
157
+ - Any domain-specific action (archive, bookmark, flag)
158
+ - Any icon that has multiple common meanings (heart = like OR favorite OR health)
159
+ - Any icon unique to your product
160
+ - Filter, sort, download, upload (frequently confused with each other)
161
+
162
+ **Mandatory rule:** Every icon-only button MUST have:
163
+ 1. A `title` attribute or tooltip on hover (desktop)
164
+ 2. An `aria-label` describing the action (accessibility)
165
+ 3. A long-press or contextual hint (mobile)
166
+
167
+ Research data: Adding the label "Menu" below a hamburger icon increased click
168
+ activity by 42.09% in one documented A/B test. Labels work.
169
+
170
+ ### 1.7 Icon Grid and Keyline Systems
171
+
172
+ Icon grids provide a standardized canvas for drawing icons with consistent
173
+ proportions. They are guides, not hard rules.
174
+
175
+ **Material Design Icon Grid (24dp):**
176
+ - Total canvas: 24 x 24dp
177
+ - Live area (content zone): 20 x 20dp (2dp padding on each side)
178
+ - Keyshapes: circle (20dp diameter), square (18 x 18dp), portrait rectangle
179
+ (16 x 20dp), landscape rectangle (20 x 16dp)
180
+ - Stroke weight: 2dp consistent across all icons
181
+ - Corner radius: 2dp for exterior corners
182
+ - All icons optically balanced within keyshapes, not forced to fill them
183
+
184
+ **Keyline components:**
185
+ - **Keyshapes:** Template shapes (circle, square, portrait rectangle, landscape
186
+ rectangle) that establish consistent optical weight across different icon forms
187
+ - **Orthogonals:** Lines that intersect the center point, typically at 90-degree
188
+ and 45-degree angles, with 15-degree and 5-degree increments for finer alignment
189
+ - **Grid subdivisions:** Typically divide the canvas into equal segments for
190
+ consistent interior detail alignment
191
+
192
+ **Important:** Keyline grids ensure optical balance (visual weight) between icons.
193
+ A square icon filling its keyshape and a circular icon filling its keyshape will
194
+ appear the same visual size, even though the circle is technically smaller in area.
195
+
196
+ ### 1.8 Custom Icons vs. Icon Libraries
197
+
198
+ **Default position: use an established icon library.** Consistency trumps creativity
199
+ in functional UI. Custom icons introduce risk:
200
+
201
+ - Users have learned what standard icons look like across thousands of apps
202
+ - Custom metaphors require user education and testing
203
+ - Maintaining a custom icon set is expensive (every new feature needs new icons)
204
+ - Accessibility audits are easier with well-documented library icons
205
+
206
+ **When custom icons are justified:**
207
+ - Brand-critical moments (app icon, onboarding illustrations, marketing)
208
+ - Domain-specific concepts with no standard representation (industry jargon)
209
+ - The existing library lacks the exact concept needed AND text alone is insufficient
210
+ - Product differentiation is a strategic priority (e.g., Notion's custom icon style)
211
+
212
+ **When custom icons are NOT justified:**
213
+ - Standard actions (edit, delete, save, share, search)
214
+ - Navigation (home, back, settings, profile)
215
+ - Status indicators (success, error, warning, info)
216
+ - Any icon that already has a well-known visual convention
217
+
218
+ ---
219
+
220
+ ## 2. Do's and Don'ts
221
+
222
+ ### 2.1 Do's
223
+
224
+ 1. **Do use a single icon library per product.** Mixing Material Symbols with
225
+ Lucide with Font Awesome creates visual inconsistency that users notice even
226
+ if they cannot articulate it. Pick one library and commit.
227
+
228
+ 2. **Do maintain consistent stroke width.** If your icon set uses 1.5px strokes,
229
+ every icon must use 1.5px strokes. A single 2px-stroke icon among 1.5px icons
230
+ looks heavier and draws unwarranted attention. Atlassian standardized on 1.5px
231
+ stroke on a 16px canvas across their entire system.
232
+
233
+ 3. **Do size icons to the 24px baseline for standard UI.** The 24px size is the
234
+ industry standard for toolbar, action bar, and list item icons across Material
235
+ Design, Apple HIG, and all major design systems.
236
+
237
+ 4. **Do pad icon-only buttons to at least 48x48dp touch targets.** A 24px icon
238
+ needs 12px padding on each side to reach 48px. This meets Material Design
239
+ accessibility requirements and WCAG 2.2 Level AA (24x24 CSS px minimum).
240
+
241
+ 5. **Do use filled variants for selected/active states.** The outlined-to-filled
242
+ transition provides clear visual feedback. Instagram, Twitter/X, and iOS tab
243
+ bars all use this pattern. Users have learned this convention.
244
+
245
+ 6. **Do provide text labels alongside icons in primary navigation.** Nielsen
246
+ Norman Group research consistently shows that icon+label combinations outperform
247
+ icon-only interfaces in task completion time, error rate, and user satisfaction.
248
+
249
+ 7. **Do test icon recognition with real users.** Use 5-second tests: show the icon
250
+ for 5 seconds, ask what action it represents. If fewer than 85% of participants
251
+ identify it correctly, add a text label or choose a different metaphor.
252
+
253
+ 8. **Do use SVG format for web icons.** SVGs scale without quality loss, support
254
+ multi-color rendering, enable CSS styling, allow tree-shaking in build tools,
255
+ and provide better accessibility than icon fonts. SVGs do not suffer from the
256
+ Flash of Invisible Text (FOIT) problem that icon fonts have during page load.
257
+
258
+ 9. **Do apply `aria-hidden="true"` to decorative icons.** Icons that do not convey
259
+ information should be hidden from screen readers. Conversely, interactive icons
260
+ need `aria-label` on the parent button element, not on the icon itself.
261
+
262
+ 10. **Do ensure 3:1 minimum contrast ratio for meaningful icons.** WCAG 2.1
263
+ Success Criterion 1.4.11 (Non-text Contrast) requires graphical objects that
264
+ convey information to have at least 3:1 contrast against adjacent colors.
265
+ Decorative icons have no contrast requirement.
266
+
267
+ 11. **Do use optical size adjustments for variable icon fonts.** Material Symbols
268
+ supports optical sizes from 20dp to 48dp. The optical size axis automatically
269
+ adjusts stroke weight for optimal legibility at each display size. Set
270
+ `'OPSZ' 24` for standard UI and `'OPSZ' 20` for compact layouts.
271
+
272
+ 12. **Do align icons to the pixel grid.** Icons that fall between pixels appear
273
+ blurry on non-retina displays. Ensure anchor points snap to full or half
274
+ pixel values. This is less critical on modern high-DPI displays but still
275
+ matters for 1x screens.
276
+
277
+ 13. **Do limit your active icon set to under 50 unique icons per product.**
278
+ Beyond 50, users struggle to learn and recall icon meanings. Each additional
279
+ icon adds cognitive load. If you need more than 50, some should be replaced
280
+ with text labels.
281
+
282
+ 14. **Do use consistent corner radius across all icons.** If your icons use 2px
283
+ rounded corners, all icons in the set must use 2px rounded corners. Sharp
284
+ corners mixed with rounded corners breaks visual cohesion.
285
+
286
+ 15. **Do document your icon usage guidelines.** Create an icon inventory that maps
287
+ each icon to its meaning, acceptable contexts, and prohibited uses. This
288
+ prevents the same icon from being used for different actions across your product.
289
+
290
+ ### 2.2 Don'ts
291
+
292
+ 1. **Don't mix outlined and filled icons in the same context.** Using a filled
293
+ home icon next to an outlined settings icon implies the home is selected and
294
+ settings is not. Users read style differences as state differences.
295
+
296
+ 2. **Don't use icons smaller than 16px for interactive elements.** Below 16px,
297
+ icons lose detail and become difficult to distinguish. At 12px, an edit icon
298
+ and a settings icon can look identical.
299
+
300
+ 3. **Don't rely on color alone to convey icon meaning.** Approximately 8% of men
301
+ and 0.5% of women have color vision deficiency. A red trash icon and a green
302
+ checkmark icon must be distinguishable by shape alone, not just by color.
303
+
304
+ 4. **Don't use metaphors that require cultural context.** A mailbox icon means
305
+ something different in the US (standalone box at the curb) than in the UK
306
+ (slot in the door) than in Japan (wall-mounted box). Use universal shapes
307
+ like an envelope for email.
308
+
309
+ 5. **Don't animate icons in primary navigation.** Animated icons in nav bars
310
+ distract from content and slow task completion. Reserve animation for
311
+ micro-interactions (like/favorite), loading states, and onboarding moments.
312
+
313
+ 6. **Don't use more than one icon per button.** A button with both a plus icon
314
+ and a document icon to mean "create document" is ambiguous. Use a single
315
+ icon plus a text label instead.
316
+
317
+ 7. **Don't assume the hamburger menu icon is universally understood.** While
318
+ recognition has improved significantly since 2014, adding the word "Menu"
319
+ beneath the icon still increases engagement measurably. The hamburger icon
320
+ tested at roughly 72% recognition in NNGroup studies, below the 85% threshold
321
+ for icon-only use.
322
+
323
+ 8. **Don't use icon fonts for new projects.** Icon fonts have multiple
324
+ disadvantages: they are monochrome only, subject to anti-aliasing artifacts,
325
+ affected by font-loading failures (FOIT), cannot be styled per-path, are
326
+ harder to make accessible, and cannot be tree-shaken effectively. Use inline
327
+ SVGs or an SVG sprite system instead.
328
+
329
+ 9. **Don't place icons after text labels in left-to-right action buttons.**
330
+ Users scan left to right; the icon should be the first element scanned so it
331
+ primes the user for the text label. Exception: trailing chevrons and external
332
+ link indicators, which signal destination rather than action.
333
+
334
+ 10. **Don't use obsolete metaphors without testing.** While 83% of users
335
+ still recognize the floppy disk as "save" according to NNGroup research,
336
+ this recognition comes from software familiarity, not real-world knowledge.
337
+ In contexts targeting younger or less tech-savvy users, consider a
338
+ downward arrow into a tray, or simply the word "Save." Auto-save patterns
339
+ are making the explicit save action itself increasingly rare.
340
+
341
+ 11. **Don't scale icons by arbitrary percentages.** Scaling a 24px icon to 22px
342
+ or 26px misaligns it with the pixel grid and produces sub-pixel rendering
343
+ artifacts. Always use standard sizes: 16, 20, 24, 32, 40, 48.
344
+
345
+ 12. **Don't use platform-specific icons cross-platform.** The iOS share icon
346
+ (square with upward arrow) means nothing on Android, where the share icon
347
+ is three dots connected by lines. Use platform-native icons or a neutral
348
+ alternative.
349
+
350
+ 13. **Don't put interactive icons inside other interactive elements without
351
+ clear boundaries.** An icon button inside a card that is itself clickable
352
+ creates a nested interaction that confuses users and fails accessibility
353
+ audits. Separate interactive zones clearly.
354
+
355
+ 14. **Don't use identical icons for different actions.** If a pencil icon means
356
+ "edit" in one place and "compose" in another, users will be confused. One
357
+ icon, one meaning, across the entire product.
358
+
359
+ 15. **Don't use thin (1px or below) strokes at sizes under 20px.** Thin strokes
360
+ disappear at small sizes, especially on low-DPI displays. At 16px, use at
361
+ least 1.5px stroke width. At 24px, 2px is standard.
362
+
363
+ ---
364
+
365
+ ## 3. Platform Variations
366
+
367
+ ### 3.1 iOS: SF Symbols
368
+
369
+ **Overview:**
370
+ SF Symbols is Apple's icon system, tightly integrated with San Francisco (the
371
+ system font). As of SF Symbols 6 (iOS 18 / 2024), the library contains over
372
+ 6,900 symbols.
373
+
374
+ **Key characteristics:**
375
+
376
+ - **9 weights:** Ultralight, Thin, Light, Regular, Medium, Semibold, Bold, Heavy,
377
+ Black. Each weight corresponds to a weight of the San Francisco system font,
378
+ ensuring text and icons match visually.
379
+
380
+ - **3 scales:** Small, Medium (default), Large. Scale adjusts the icon's emphasis
381
+ relative to adjacent text without breaking weight matching.
382
+
383
+ - **4 rendering modes:**
384
+
385
+ | Mode | Behavior | Use Case |
386
+ |------|----------|----------|
387
+ | **Monochrome** | One color applied to all paths | Standard UI, single-tint interfaces |
388
+ | **Hierarchical** | One color, varying opacity per layer | Depth emphasis, subtle visual hierarchy |
389
+ | **Palette** | Two or more explicit colors, one per layer | Brand-colored icons, multi-state indicators |
390
+ | **Multicolor** | Intrinsic colors reflecting real-world objects | Weather, accessibility, maps |
391
+
392
+ - **Variable color:** Introduced in SF Symbols 4, variable color lets you
393
+ modulate opacity across layers to represent values (e.g., Wi-Fi signal strength).
394
+
395
+ - **Symbol animations:** SF Symbols 5+ added built-in animation effects
396
+ (bounce, scale, pulse, variable color animation, replace).
397
+
398
+ **Design guidelines for SF Symbols:**
399
+ - Always match symbol weight to adjacent text weight
400
+ - Use the `.symbolRenderingMode()` modifier to control rendering
401
+ - Prefer system-provided symbols over custom ones for native feel
402
+ - Custom symbols must conform to the SF Symbols template (available in the
403
+ SF Symbols app) to ensure proper weight matching and alignment
404
+ - Test custom symbols at all 9 weights and 3 scales
405
+
406
+ **SF Symbols 7 (announced WWDC 2025):**
407
+ - New animation techniques and advanced rendering capabilities
408
+ - Enhanced support for custom symbol creation
409
+ - Expanded symbol library
410
+
411
+ ### 3.2 Android: Material Symbols
412
+
413
+ **Overview:**
414
+ Material Symbols is Google's current icon system, built on variable font
415
+ technology. It supersedes the older Material Icons (static) set.
416
+
417
+ **Key characteristics:**
418
+
419
+ - **Variable font with 4 axes:**
420
+
421
+ | Axis | Range | Default | Effect |
422
+ |------|-------|---------|--------|
423
+ | **Fill** | 0 - 1 | 0 | Transitions from outlined (0) to filled (1) |
424
+ | **Weight** | 100 - 700 | 400 | Stroke thickness, thin to bold |
425
+ | **Grade** | -25 to 200 | 0 | Fine-tuned thickness without affecting size |
426
+ | **Optical Size** | 20 - 48 | 24 | Adjusts detail for display size |
427
+
428
+ - **3 style families:** Outlined, Rounded, Sharp. Each family shares the same
429
+ icon set but with different corner treatments.
430
+
431
+ - **Over 3,000 icons** covering actions, navigation, content, communication,
432
+ device, and more.
433
+
434
+ **Design guidelines for Material Symbols:**
435
+ - Use the default 24dp optical size for standard UI icons
436
+ - Set fill to 1 for active/selected states, 0 for inactive
437
+ - Use grade for dark-on-light vs. light-on-dark adjustments: positive grade
438
+ for light backgrounds (thicker strokes for visibility), negative grade for
439
+ dark backgrounds (thinner strokes to reduce glare)
440
+ - The icon's visual size is 24dp but the touch target must be 48dp (12dp padding)
441
+ - Stick to one style family (Outlined, Rounded, or Sharp) per product
442
+
443
+ **Implementation:**
444
+ ```css
445
+ /* CSS variable font syntax for Material Symbols */
446
+ .material-symbols-outlined {
447
+ font-variation-settings:
448
+ 'FILL' 0,
449
+ 'wght' 400,
450
+ 'GRAD' 0,
451
+ 'opsz' 24;
452
+ }
453
+
454
+ /* Active state */
455
+ .material-symbols-outlined.active {
456
+ font-variation-settings:
457
+ 'FILL' 1,
458
+ 'wght' 400,
459
+ 'GRAD' 0,
460
+ 'opsz' 24;
461
+ }
462
+ ```
463
+
464
+ ### 3.3 Web: Icon Delivery Methods
465
+
466
+ **SVG (Recommended)**
467
+
468
+ Advantages:
469
+ - Scalable without quality loss
470
+ - Stylable via CSS (color, stroke, fill, transforms)
471
+ - Accessible (supports `<title>`, `<desc>`, `role`, `aria-label`)
472
+ - Tree-shakable (only bundle icons you use; Lucide and Phosphor both support this)
473
+ - Multi-color capable
474
+ - No font-loading dependency (immune to FOIT)
475
+ - Can be animated with CSS or JavaScript
476
+
477
+ Delivery options:
478
+ - **Inline SVG:** Best for interactive icons, allows per-path styling
479
+ - **SVG sprite sheet:** Best for performance with many icons, single HTTP request
480
+ - **SVG as `<img>`:** Best for static, decorative icons (no CSS styling)
481
+ - **SVG in CSS background:** Limited accessibility, use only for decoration
482
+
483
+ **Icon Fonts (Legacy)**
484
+
485
+ Disadvantages:
486
+ - Monochrome only
487
+ - Subject to anti-aliasing (blurry at certain sizes)
488
+ - Flash of Invisible Text (FOIT) during font loading
489
+ - Cannot be tree-shaken (entire font file loads even if you use 3 icons)
490
+ - Poor accessibility (characters may be read by screen readers as gibberish)
491
+ - Cannot be styled per-path
492
+ - Blocked by some ad blockers and content security policies
493
+
494
+ **Verdict:** Use SVGs for all new projects. Icon fonts are a legacy approach
495
+ retained only for backward compatibility.
496
+
497
+ ### 3.4 Major Icon Libraries Compared
498
+
499
+ | Library | Icon Count | Styles | Stroke Width | License | Best For |
500
+ |---------|-----------|--------|-------------|---------|----------|
501
+ | **Material Symbols** | 3,000+ | Outlined, Rounded, Sharp | Variable (100-700) | Apache 2.0 | Android, Material Design apps |
502
+ | **SF Symbols** | 6,900+ | 9 weights, 3 scales | Matches SF font | Apple only | iOS, macOS, Apple ecosystem |
503
+ | **Lucide** | 1,600+ | Outlined | Customizable (default 2px) | ISC | Lightweight web apps, React/Vue |
504
+ | **Phosphor** | 9,000+ | Thin, Light, Regular, Bold, Fill, Duotone | Variable per weight | MIT | Projects needing multiple weights |
505
+ | **Heroicons** | 300+ | Outlined (24px), Solid (24px), Mini (20px) | 1.5px | MIT | Tailwind CSS projects |
506
+ | **Feather** | 280+ | Outlined | 2px | MIT | Minimalist projects (unmaintained) |
507
+ | **Font Awesome** | 2,000+ (free) | Solid, Regular, Light, Thin, Duotone | Fixed per style | Mixed | Legacy projects, CMS themes |
508
+ | **Tabler Icons** | 5,700+ | Outlined | 2px | MIT | Feature-rich web apps |
509
+
510
+ **Selection guidance:**
511
+ - **Apple ecosystem only:** SF Symbols (mandatory for native feel)
512
+ - **Android/Material:** Material Symbols
513
+ - **Cross-platform web, minimal:** Lucide (lightweight, well-maintained fork of Feather)
514
+ - **Cross-platform web, comprehensive:** Phosphor (most weight options, largest set)
515
+ - **Tailwind projects:** Heroicons (made by Tailwind Labs, designed to match)
516
+
517
+ ---
518
+
519
+ ## 4. Common Mistakes in AI-Generated Designs
520
+
521
+ AI design tools (Figma Make, Galileo AI, Uizard, and similar) produce layouts
522
+ quickly but consistently make iconography errors that human designers must catch
523
+ and correct.
524
+
525
+ ### 4.1 Inconsistent Icon Styles
526
+
527
+ **The problem:** AI generators pull from multiple visual references, producing
528
+ screens where some icons are outlined, others are filled, and others use
529
+ completely different design languages. A screen might have a Material-style
530
+ outlined settings gear next to a Feather-style outlined user icon next to a
531
+ completely custom-styled notification bell.
532
+
533
+ **How to detect:**
534
+ - Audit all icons on a single screen: do they share the same stroke width?
535
+ - Check corner treatments: are all corners rounded OR all sharp, not mixed?
536
+ - Compare visual weight: do all icons appear the same "boldness"?
537
+
538
+ **How to fix:**
539
+ - Replace all icons with a single library (Lucide, Phosphor, or Material Symbols)
540
+ - Apply consistent stroke width, corner radius, and sizing
541
+ - Use a design system plugin (e.g., Figma's icon library components) to enforce consistency
542
+
543
+ ### 4.2 Wrong Icon Sizes
544
+
545
+ **The problem:** AI tools frequently generate icons at non-standard sizes (19px,
546
+ 23px, 27px) that misalign with pixel grids and look blurry. They also use
547
+ inconsistent sizes within the same context (a 20px icon next to a 28px icon in
548
+ the same toolbar).
549
+
550
+ **How to detect:**
551
+ - Inspect icon dimensions in the design tool
552
+ - Check if icons align to the 8px grid (16, 24, 32, 40, 48)
553
+ - Compare icon sizes within the same toolbar, nav bar, or list
554
+
555
+ **How to fix:**
556
+ - Resize all icons to the nearest standard size (usually 24px for UI)
557
+ - Ensure all icons in the same context use the same size
558
+ - Add proper padding to maintain touch targets
559
+
560
+ ### 4.3 Missing Text Labels
561
+
562
+ **The problem:** AI generators tend to produce icon-only navigation and toolbars,
563
+ omitting text labels. This looks "cleaner" but hurts usability.
564
+
565
+ **How to detect:**
566
+ - Check bottom navigation: are icons labeled?
567
+ - Check toolbar buttons: do ambiguous icons have labels?
568
+ - Check settings screens: are all options text-labeled?
569
+
570
+ **How to fix:**
571
+ - Add text labels below navigation icons
572
+ - Add text labels beside action icons in toolbars
573
+ - Reserve icon-only treatment for universally recognized icons only
574
+
575
+ ### 4.4 Poor Icon Metaphors
576
+
577
+ **The problem:** AI may select icons based on visual similarity rather than
578
+ semantic meaning. A common error is using a "document" icon for "notes" or a
579
+ "bell" icon for "messages."
580
+
581
+ **How to detect:**
582
+ - For each icon, ask: "If I showed this icon to 10 users without context, would
583
+ 8+ correctly identify the action?"
584
+ - Check for metaphors that are culturally specific or outdated
585
+ - Verify that each icon maps to exactly one action in the interface
586
+
587
+ **How to fix:**
588
+ - Replace ambiguous icons with standard alternatives from your chosen library
589
+ - Add text labels where the metaphor is not immediately clear
590
+ - Run a quick guerrilla test: show 5 people the icon and ask what they think it does
591
+
592
+ ### 4.5 Accessibility Omissions
593
+
594
+ **The problem:** AI-generated designs rarely include proper ARIA attributes,
595
+ sufficient color contrast for icons, or adequate touch target sizing.
596
+
597
+ **How to detect:**
598
+ - Check if icon buttons have `aria-label` attributes
599
+ - Measure icon contrast against background (need 3:1 minimum for meaningful icons)
600
+ - Measure touch target sizes (need 48x48dp minimum for mobile)
601
+ - Verify that decorative icons have `aria-hidden="true"`
602
+
603
+ **How to fix:**
604
+ - Add `aria-label` to all interactive icon containers (on the `<button>`, not the `<svg>`)
605
+ - Adjust icon color to meet 3:1 contrast ratio against the background
606
+ - Add padding to reach minimum touch target dimensions
607
+ - Mark decorative icons as `aria-hidden="true"`
608
+
609
+ ### 4.6 Inconsistent Icon Padding and Alignment
610
+
611
+ **The problem:** AI places icons with irregular spacing relative to text and
612
+ other UI elements. Icons may be vertically misaligned with adjacent text or
613
+ have inconsistent margins.
614
+
615
+ **How to detect:**
616
+ - Check vertical alignment: icon center should align with text baseline or
617
+ x-height center (depending on the design system)
618
+ - Measure spacing between icons and text labels (should be consistent: 8px
619
+ for horizontal, 4px for vertical)
620
+ - Verify icons within lists have equal indentation
621
+
622
+ **How to fix:**
623
+ - Use flexbox alignment with `align-items: center` for horizontal icon+text pairs
624
+ - Standardize icon-to-text spacing as design tokens
625
+ - Apply optical adjustments where mathematical centering looks wrong
626
+
627
+ ---
628
+
629
+ ## 5. Decision Framework
630
+
631
+ ### 5.1 When to Use Icons vs. Text vs. Both
632
+
633
+ ```
634
+ START
635
+ |
636
+ v
637
+ Is the action universally recognized?
638
+ (close, search, back, play, share, menu, home)
639
+ |
640
+ +-- YES --> Icon-only is acceptable (still add aria-label + tooltip)
641
+ |
642
+ +-- NO --> Continue
643
+ |
644
+ v
645
+ Is space severely constrained?
646
+ (mobile toolbar, dense data table, compact sidebar)
647
+ |
648
+ +-- YES --> Can you use a standardized icon?
649
+ | |
650
+ | +-- YES --> Icon-only with tooltip + aria-label
651
+ | |
652
+ | +-- NO --> Text-only (abbreviated if needed)
653
+ |
654
+ +-- NO --> Use BOTH icon + text label
655
+ (best discoverability, best accessibility)
656
+ ```
657
+
658
+ **Research-backed guidance:**
659
+ - Icon + text performs best in usability studies across all metrics (time, errors,
660
+ satisfaction)
661
+ - Icon-only performs worst in first-use scenarios but can match icon+text for
662
+ expert users with learned interfaces
663
+ - Text-only performs better than icon-only for ambiguous actions
664
+ - The NNGroup recommendation: "To help overcome the ambiguity that almost all
665
+ icons face, a text label must be present alongside an icon to clarify its meaning"
666
+
667
+ ### 5.2 Which Icon Library to Choose
668
+
669
+ **Decision matrix:**
670
+
671
+ | If your project is... | Choose... | Because... |
672
+ |-----------------------|-----------|------------|
673
+ | iOS/macOS native app | SF Symbols | Required for native look and feel; matches system font |
674
+ | Android native app | Material Symbols | Native to the platform; variable font flexibility |
675
+ | Web app with Tailwind | Heroicons | Designed by Tailwind Labs, consistent with Tailwind aesthetic |
676
+ | Web app, needs many icons | Phosphor | 9,000+ icons, 6 weights, MIT license |
677
+ | Web app, needs minimal bundle | Lucide | Lightweight, tree-shakable, clean consistent style |
678
+ | Cross-platform (Flutter/RN) | Material Symbols or Phosphor | Both available on all platforms |
679
+ | CMS / WordPress | Font Awesome (legacy) or Phosphor | Wide ecosystem support |
680
+ | Design system from scratch | Phosphor or Material Symbols | Most customization options |
681
+
682
+ ### 5.3 Custom Icons: When and How
683
+
684
+ **When to create custom icons:**
685
+ 1. Your domain has concepts with no standard visual representation
686
+ 2. Brand differentiation is a strategic requirement (not just preference)
687
+ 3. You need icons that convey proprietary features unique to your product
688
+ 4. Your user research shows standard icons are being misinterpreted in your
689
+ specific context
690
+
691
+ **How to create custom icons well:**
692
+ 1. Start with your chosen library's grid and keyline system
693
+ 2. Match stroke width, corner radius, and visual weight of your library icons
694
+ 3. Design at 24px first, then test at 16px and 32px for legibility
695
+ 4. Test with 10+ users for recognition (target: 85%+ correct identification)
696
+ 5. Provide both outlined and filled variants for state transitions
697
+ 6. Export as SVG with clean paths (no unnecessary groups, no inline styles)
698
+ 7. Document the icon's meaning, approved contexts, and prohibited uses
699
+ 8. Include the custom icon in your design system component library
700
+
701
+ **Custom icon red flags (stop and reconsider):**
702
+ - You are creating custom versions of universally understood icons (no)
703
+ - The custom icon requires a legend or onboarding tooltip to explain (too complex)
704
+ - The icon looks fine at 24px but is unrecognizable at 16px (too detailed)
705
+ - Your team cannot agree on what the icon represents (ambiguous metaphor)
706
+
707
+ ---
708
+
709
+ ## 6. Accessibility Reference
710
+
711
+ ### 6.1 ARIA Patterns by Icon Type
712
+
713
+ | Icon Type | Pattern | Key Rule |
714
+ |-----------|---------|----------|
715
+ | **Interactive (button/link)** | `aria-label` on the `<button>`, `aria-hidden="true"` on the `<svg>` | Label goes on the interactive element, never the icon |
716
+ | **Decorative** | `aria-hidden="true"` on the icon container | Must not be announced by screen readers |
717
+ | **Informative (status)** | `role="img"` + `aria-label` on wrapper, OR adjacent visible text | If adjacent text conveys the meaning, icon can be `aria-hidden` |
718
+
719
+ Always add `focusable="false"` to SVG elements to prevent legacy Edge/IE focus issues.
720
+
721
+ ### 6.2 Color Contrast Requirements
722
+
723
+ | Icon Type | WCAG Criterion | Minimum Contrast Ratio |
724
+ |-----------|---------------|----------------------|
725
+ | Meaningful icon (no adjacent text label) | 1.4.11 Non-text Contrast | 3:1 against background |
726
+ | Meaningful icon WITH adjacent text label | None (text carries meaning) | No requirement on icon |
727
+ | Icon within a button (button has text) | 1.4.11 for button boundary | 3:1 for button outline |
728
+ | Decorative icon | None | No requirement |
729
+
730
+ ---
731
+
732
+ ## 7. Quick Reference Checklist
733
+
734
+ Use this checklist when auditing icon usage in any design or implementation.
735
+
736
+ ### Consistency
737
+ - [ ] All icons come from a single icon library
738
+ - [ ] All icons use the same stroke width (1.5px or 2px, consistent across set)
739
+ - [ ] All icons use the same corner radius treatment (rounded OR sharp, not mixed)
740
+ - [ ] All icons in the same context are the same size
741
+ - [ ] Outlined icons are used for inactive states, filled for active states (if using state transitions)
742
+ - [ ] No mixing of outlined and filled icons in the same untoggled context
743
+
744
+ ### Sizing and Spacing
745
+ - [ ] Standard sizes used: 16px, 20px, 24px, 32px, 40px, or 48px (no arbitrary sizes)
746
+ - [ ] Default UI icons are 24px
747
+ - [ ] Touch targets are at least 48x48dp (Android) or 44x44pt (iOS)
748
+ - [ ] Icon-to-text spacing is consistent: 8px horizontal, 4px vertical
749
+ - [ ] Icons are optically centered, not just mathematically centered
750
+
751
+ ### Labels and Clarity
752
+ - [ ] All non-universal icons have visible text labels
753
+ - [ ] Icon-only buttons have tooltips (desktop) or long-press hints (mobile)
754
+ - [ ] Each icon maps to exactly one action across the entire product
755
+ - [ ] No obsolete or culturally specific metaphors without user testing
756
+ - [ ] Icon metaphors tested with target users (85%+ recognition rate)
757
+
758
+ ### Accessibility
759
+ - [ ] Interactive icons: `aria-label` on the button/link element, not the SVG
760
+ - [ ] Decorative icons: `aria-hidden="true"` on the icon element
761
+ - [ ] Meaningful icons without text labels meet 3:1 contrast ratio (WCAG 1.4.11)
762
+ - [ ] SVG icons include `focusable="false"` to prevent IE/Edge focus issues
763
+ - [ ] Color is not the sole differentiator between icon states
764
+
765
+ ### Platform Compliance
766
+ - [ ] iOS apps use SF Symbols with weight matching to San Francisco font
767
+ - [ ] Android apps use Material Symbols with appropriate optical size setting
768
+ - [ ] Web apps use inline SVG or SVG sprites, not icon fonts
769
+ - [ ] Platform-specific icons are not used cross-platform (e.g., iOS share icon on Android)
770
+
771
+ ---
772
+
773
+ ## Sources
774
+
775
+ - [Icon Usability - Nielsen Norman Group](https://www.nngroup.com/articles/icon-usability/)
776
+ - [The Floppy Disk Icon as "Save": Still Appropriate Today? - NNGroup](https://www.nngroup.com/articles/floppy-disk-icon-understandability/)
777
+ - [Bad Icons: How to Identify and Improve Them - NNGroup](https://www.nngroup.com/articles/bad-icons/)
778
+ - [SF Symbols - Apple Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/sf-symbols)
779
+ - [Material Symbols Guide - Google Developers](https://developers.google.com/fonts/docs/material_symbols)
780
+ - [Introducing Material Symbols - Material Design 3](https://m3.material.io/blog/introducing-symbols/)
781
+ - [Icon Grids & Keylines Demystified - Helena Zhang](https://minoraxis.medium.com/icon-grids-keylines-demystified-5a228fe08cfd)
782
+ - [A Complete Guide to Iconography - Design Systems](https://www.designsystems.com/iconography-guide/)
783
+ - [WCAG 2.1 Success Criterion 1.4.11: Non-text Contrast](https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html)
784
+ - [WCAG 2.2 Success Criterion 2.5.8: Target Size (Minimum)](https://www.w3.org/WAI/WCAG22/Understanding/target-size-enhanced.html)
785
+ - [Accessible SVGs: Perfect Patterns for Screen Reader Users - Smashing Magazine](https://www.smashingmagazine.com/2021/05/accessible-svg-patterns-comparison/)
786
+ - [SVG, Icon Fonts, and Accessibility: A Case Study - 24 Accessibility](https://www.24a11y.com/2017/svg-icon-fonts-accessibility-case-study/)
787
+ - [Practical Guide to Icon Design - UX Planet](https://uxplanet.org/practical-guide-to-icon-design-794baf5624c8)
788
+ - [The Importance of Iconography in UI Design - UX Design Institute](https://www.uxdesigninstitute.com/blog/iconography-in-ui-design/)
789
+ - [How to Use Icons in Design: UX and UI Best Practices - Noun Project](https://blog.thenounproject.com/how-to-use-icons-in-ui-and-ux-design-best-practices/)
790
+ - [Behind the Screens: Building Atlassian's New Icon System - Atlassian](https://www.atlassian.com/blog/design/behind-the-screens-building-atlassians-new-icon-system)
791
+ - [Which Icons to NOT Use in 2025 - LogRocket](https://blog.logrocket.com/ux-design/iconography-ux-2025/)
792
+ - [Accessible Target Sizes Cheatsheet - Smashing Magazine](https://www.smashingmagazine.com/2023/04/accessible-tap-target-sizes-rage-taps-clicks/)
793
+ - [Lucide Icons](https://lucide.dev/)
794
+ - [Phosphor Icons](https://phosphoricons.com/)
795
+ - [What's New in SF Symbols 7 - WWDC25](https://developer.apple.com/videos/play/wwdc2025/337/)