@wazir-dev/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,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/)
|