@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,518 @@
|
|
|
1
|
+
# Accessibility Copy Patterns
|
|
2
|
+
|
|
3
|
+
> **Module Type:** Pattern
|
|
4
|
+
> **Domain:** Content -- Accessible Text and Screen Reader Communication
|
|
5
|
+
> **Authoritative Sources:** WCAG 2.2, WAI-ARIA Authoring Practices, Apple Accessibility Guidelines, Material Design Accessibility, NNG, WebAIM, Plain Language Action and Information Network (PLAIN)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Quick Reference Checklist
|
|
10
|
+
|
|
11
|
+
1. Every informative image has alt text describing its purpose, not its appearance
|
|
12
|
+
2. Decorative images use `alt=""` (empty alt), never omit the attribute
|
|
13
|
+
3. ARIA labels supplement visual meaning -- never replace visible text
|
|
14
|
+
4. `aria-live="polite"` for non-urgent updates; `aria-live="assertive"` for critical alerts only
|
|
15
|
+
5. Live region containers exist in the DOM before content is injected
|
|
16
|
+
6. Focus management: move focus to the relevant element after state changes
|
|
17
|
+
7. Body text targets Flesch-Kincaid grade level 8 or lower
|
|
18
|
+
8. Sentences under 25 words; paragraphs under 5 sentences
|
|
19
|
+
9. Avoid idioms, metaphors, and culturally specific references in UI copy
|
|
20
|
+
10. Button and link text is unique and descriptive out of context ("View report" not "Click here")
|
|
21
|
+
11. Error messages are associated with their fields via `aria-describedby`
|
|
22
|
+
12. Form labels are visible and persistent -- never placeholder-only
|
|
23
|
+
13. Instructions don't rely solely on color, shape, or position ("the red button," "on the right")
|
|
24
|
+
14. Abbreviations are spelled out on first use; avoid acronyms in UI copy
|
|
25
|
+
15. Reading order matches visual order (DOM order = visual order)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. Alt Text Guidelines
|
|
30
|
+
|
|
31
|
+
Alt text provides a text equivalent for non-text content. It is the single most impactful accessibility improvement for image-heavy interfaces (WebAIM Survey, 2024: missing alt text is the #1 accessibility issue users report).
|
|
32
|
+
|
|
33
|
+
### 1.1 Informative Images
|
|
34
|
+
|
|
35
|
+
Images that convey content or meaning. Alt text should describe the purpose and information the image communicates, not its visual appearance.
|
|
36
|
+
|
|
37
|
+
**Formula:** What information does this image add that isn't in the surrounding text?
|
|
38
|
+
|
|
39
|
+
| Image Type | Bad Alt | Good Alt | Why |
|
|
40
|
+
|-----------|---------|----------|-----|
|
|
41
|
+
| Product photo | "image1.jpg" | "Black leather messenger bag with brass buckle, front view" | Describes the product a shopper needs to evaluate |
|
|
42
|
+
| Chart | "chart" | "Bar chart showing revenue growth from $2M in Q1 to $4.8M in Q4 2024" | Conveys the data, not just the format |
|
|
43
|
+
| User avatar | "avatar" | "Sarah Chen" (or `alt=""` if name is shown adjacent) | Identifies the person |
|
|
44
|
+
| Screenshot | "screenshot" | "Settings page showing the notification preferences panel with email toggled on" | Describes what the user needs to see |
|
|
45
|
+
| Icon with text | "icon" | `alt=""` (decorative -- the adjacent text conveys meaning) | Icon reinforces text; alt would be redundant |
|
|
46
|
+
| Logo | "logo" | "[Company] logo" or "[Company] -- go to homepage" (if linked) | Identifies the brand; linked logos need destination context |
|
|
47
|
+
| Infographic | "infographic" | Brief summary + detailed description via `aria-describedby` or long description link | Complex images need both summary and detail |
|
|
48
|
+
|
|
49
|
+
### 1.2 Decorative Images
|
|
50
|
+
|
|
51
|
+
Images that serve purely aesthetic purposes -- backgrounds, spacers, visual flourishes.
|
|
52
|
+
|
|
53
|
+
**Rule:** Set `alt=""` (empty string). This tells screen readers to skip the image entirely. Never omit the `alt` attribute -- screen readers will read the filename instead.
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<!-- Correct: decorative image -->
|
|
57
|
+
<img src="divider-wave.svg" alt="" />
|
|
58
|
+
|
|
59
|
+
<!-- Wrong: screen reader says "divider dash wave dot svg" -->
|
|
60
|
+
<img src="divider-wave.svg" />
|
|
61
|
+
|
|
62
|
+
<!-- Wrong: redundant information -->
|
|
63
|
+
<img src="divider-wave.svg" alt="decorative wave divider" />
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Common decorative images:**
|
|
67
|
+
- Background textures and patterns
|
|
68
|
+
- Visual separators and dividers
|
|
69
|
+
- Purely aesthetic illustrations with no informational content
|
|
70
|
+
- Icons that duplicate adjacent text labels
|
|
71
|
+
|
|
72
|
+
### 1.3 Complex Images
|
|
73
|
+
|
|
74
|
+
Charts, diagrams, maps, and infographics require structured descriptions.
|
|
75
|
+
|
|
76
|
+
**Pattern:** Short alt text summarizing the key takeaway + detailed description elsewhere.
|
|
77
|
+
|
|
78
|
+
```html
|
|
79
|
+
<figure>
|
|
80
|
+
<img src="revenue-chart.png"
|
|
81
|
+
alt="Revenue doubled in 2024, from $2M in Q1 to $4.8M in Q4"
|
|
82
|
+
aria-describedby="chart-detail" />
|
|
83
|
+
<figcaption id="chart-detail">
|
|
84
|
+
Quarterly revenue: Q1 $2.0M, Q2 $2.4M, Q3 $3.1M, Q4 $4.8M.
|
|
85
|
+
Growth accelerated in Q3 after the enterprise plan launch.
|
|
86
|
+
</figcaption>
|
|
87
|
+
</figure>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 1.4 Image Alt Text Decision Tree
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Does the image convey information not available in surrounding text?
|
|
94
|
+
+-- YES
|
|
95
|
+
| +-- Is it a simple image? --> Write alt text (under 125 chars)
|
|
96
|
+
| +-- Is it complex (chart, diagram)? --> Short alt + long description
|
|
97
|
+
| +-- Is it a functional image (button, link)? --> Alt describes the action
|
|
98
|
+
+-- NO
|
|
99
|
+
+-- Is it purely decorative? --> alt=""
|
|
100
|
+
+-- Does it duplicate adjacent text? --> alt=""
|
|
101
|
+
+-- Is it a spacer or layout element? --> alt="" (or use CSS instead)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 2. ARIA Label Conventions
|
|
107
|
+
|
|
108
|
+
ARIA labels provide accessible names and descriptions for elements that lack visible text or whose visible text is insufficient for screen reader context.
|
|
109
|
+
|
|
110
|
+
### 2.1 When to Use ARIA Labels
|
|
111
|
+
|
|
112
|
+
| Scenario | ARIA Attribute | Example |
|
|
113
|
+
|----------|---------------|---------|
|
|
114
|
+
| Icon-only button | `aria-label` | `<button aria-label="Close dialog"><svg>...</svg></button>` |
|
|
115
|
+
| Redundant visible links | `aria-label` | `<a aria-label="View Q3 report details" href="...">View details</a>` |
|
|
116
|
+
| Navigation landmarks | `aria-label` | `<nav aria-label="Primary">` / `<nav aria-label="Breadcrumb">` |
|
|
117
|
+
| Search input | `aria-label` | `<input type="search" aria-label="Search projects" />` |
|
|
118
|
+
| Group of related controls | `aria-labelledby` | Group label references a visible heading |
|
|
119
|
+
| Field with extra instructions | `aria-describedby` | Links field to hint text or error message |
|
|
120
|
+
|
|
121
|
+
### 2.2 Rules for ARIA Labels
|
|
122
|
+
|
|
123
|
+
1. **Visible text first.** If a visible `<label>` or button text works, don't add ARIA. ARIA is a supplement, not a replacement for proper HTML semantics.
|
|
124
|
+
2. **Be concise.** ARIA labels are read aloud -- keep them short. "Close" not "Click this button to close the dialog window."
|
|
125
|
+
3. **Be specific.** "Delete project" not "Delete" when multiple delete buttons exist on the page.
|
|
126
|
+
4. **Match visual labels.** If the button says "Save," the `aria-label` (if needed) should contain "Save" -- users who dictate commands say what they see.
|
|
127
|
+
5. **Don't duplicate.** If `<button>Save</button>` is clear, adding `aria-label="Save"` is redundant and creates maintenance risk.
|
|
128
|
+
6. **Landmark labels must be unique.** Two `<nav>` elements need different `aria-label` values so screen readers can distinguish them.
|
|
129
|
+
|
|
130
|
+
### 2.3 Common ARIA Label Patterns
|
|
131
|
+
|
|
132
|
+
```html
|
|
133
|
+
<!-- Icon-only buttons -->
|
|
134
|
+
<button aria-label="Search">
|
|
135
|
+
<svg aria-hidden="true">...</svg>
|
|
136
|
+
</button>
|
|
137
|
+
|
|
138
|
+
<!-- Disambiguating repeated actions -->
|
|
139
|
+
<button aria-label="Delete 'Homepage Redesign' project">Delete</button>
|
|
140
|
+
<button aria-label="Delete 'API Migration' project">Delete</button>
|
|
141
|
+
|
|
142
|
+
<!-- Navigation landmarks -->
|
|
143
|
+
<nav aria-label="Primary navigation">...</nav>
|
|
144
|
+
<nav aria-label="Breadcrumb">
|
|
145
|
+
<ol>...</ol>
|
|
146
|
+
</nav>
|
|
147
|
+
|
|
148
|
+
<!-- Complementary regions -->
|
|
149
|
+
<aside aria-label="Related articles">...</aside>
|
|
150
|
+
|
|
151
|
+
<!-- Table with complex header -->
|
|
152
|
+
<table aria-label="Team members and their roles">...</table>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 3. Screen Reader Announcements
|
|
158
|
+
|
|
159
|
+
Dynamic content changes must be announced to screen reader users who cannot see visual updates.
|
|
160
|
+
|
|
161
|
+
### 3.1 Live Regions
|
|
162
|
+
|
|
163
|
+
Live regions are containers in the DOM that screen readers monitor for changes. When content changes inside a live region, the screen reader announces the update.
|
|
164
|
+
|
|
165
|
+
**Critical rule:** The live region container must exist in the DOM before content is injected. Adding `aria-live` simultaneously with content will NOT trigger an announcement.
|
|
166
|
+
|
|
167
|
+
```html
|
|
168
|
+
<!-- Correct: container exists on page load, empty -->
|
|
169
|
+
<div aria-live="polite" id="status"></div>
|
|
170
|
+
<!-- Later, JS injects: "3 results found" -- screen reader announces it -->
|
|
171
|
+
|
|
172
|
+
<!-- Wrong: container and content added simultaneously -->
|
|
173
|
+
<!-- Screen reader may not announce this -->
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 3.2 Politeness Settings
|
|
177
|
+
|
|
178
|
+
| Setting | Behavior | Use For |
|
|
179
|
+
|---------|----------|---------|
|
|
180
|
+
| `aria-live="polite"` | Announces when user is idle (after current speech) | Search results count, save confirmation, loading complete |
|
|
181
|
+
| `aria-live="assertive"` | Announces immediately, interrupting current speech | Form validation errors, session timeout warnings, critical alerts |
|
|
182
|
+
| `aria-live="off"` | Region is not monitored (default) | Content that changes frequently but doesn't need announcement |
|
|
183
|
+
|
|
184
|
+
**Rule:** Default to `polite`. Use `assertive` only for truly urgent information. Overusing `assertive` creates a noisy, frustrating experience.
|
|
185
|
+
|
|
186
|
+
### 3.3 Announcement Patterns
|
|
187
|
+
|
|
188
|
+
| Event | Announcement Text | Live Setting |
|
|
189
|
+
|-------|-------------------|-------------|
|
|
190
|
+
| Search results loaded | "[N] results found" or "No results found for '[query]'" | polite |
|
|
191
|
+
| Form saved | "Changes saved" | polite |
|
|
192
|
+
| Item deleted | "[Item name] deleted" | polite |
|
|
193
|
+
| Validation error | "[Field label]: [error message]" | assertive |
|
|
194
|
+
| Session expiring | "Your session expires in 2 minutes. Save your work." | assertive |
|
|
195
|
+
| New notification | "New notification: [summary]" | polite |
|
|
196
|
+
| Loading started | "Loading [content]..." | polite |
|
|
197
|
+
| Loading complete | "[Content] loaded" | polite |
|
|
198
|
+
| Filter applied | "Showing [N] results filtered by [criteria]" | polite |
|
|
199
|
+
| Sort changed | "Sorted by [field], [direction]" | polite |
|
|
200
|
+
| Page navigation | (Handled by browser -- ensure `<title>` updates) | N/A |
|
|
201
|
+
| Toast notification | (Use role="status" on the toast container) | polite |
|
|
202
|
+
| Error alert | (Use role="alert" -- implies assertive + atomic) | assertive |
|
|
203
|
+
|
|
204
|
+
### 3.4 Visually Hidden Announcements
|
|
205
|
+
|
|
206
|
+
For announcements that should be heard but not seen, use a visually hidden element.
|
|
207
|
+
|
|
208
|
+
```css
|
|
209
|
+
.sr-only {
|
|
210
|
+
position: absolute;
|
|
211
|
+
width: 1px;
|
|
212
|
+
height: 1px;
|
|
213
|
+
padding: 0;
|
|
214
|
+
margin: -1px;
|
|
215
|
+
overflow: hidden;
|
|
216
|
+
clip: rect(0, 0, 0, 0);
|
|
217
|
+
white-space: nowrap;
|
|
218
|
+
border: 0;
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```html
|
|
223
|
+
<div aria-live="polite" class="sr-only" id="search-status"></div>
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 4. Focus Management
|
|
229
|
+
|
|
230
|
+
When UI state changes, keyboard focus must move to the appropriate element so users don't get lost.
|
|
231
|
+
|
|
232
|
+
### 4.1 Focus Rules by State Change
|
|
233
|
+
|
|
234
|
+
| State Change | Focus Target | Why |
|
|
235
|
+
|-------------|-------------|-----|
|
|
236
|
+
| Modal opens | First focusable element inside modal | User needs to interact with modal content |
|
|
237
|
+
| Modal closes | Element that triggered the modal | User returns to their previous context |
|
|
238
|
+
| Inline error on submit | First field with an error | User needs to fix the error |
|
|
239
|
+
| Toast appears | Do NOT move focus | Toast is informational; moving focus is disorienting |
|
|
240
|
+
| Content loads (user-initiated) | First element of loaded content | User wanted this content |
|
|
241
|
+
| Content loads (auto) | Do NOT move focus | Unexpected focus change is disorienting |
|
|
242
|
+
| Item deleted from list | Next item in the list (or previous if last) | User's position should remain stable |
|
|
243
|
+
| Tab panel switches | First element in the new panel | User expects to interact with new panel content |
|
|
244
|
+
| Accordion expands | First element in expanded content | Content is now available for interaction |
|
|
245
|
+
| Drawer/sidebar opens | First focusable element in drawer | User needs to interact with drawer content |
|
|
246
|
+
| Drawer/sidebar closes | Element that triggered it | User returns to previous context |
|
|
247
|
+
| Page/route changes | Main content heading (`<h1>`) or skip-link target | User needs orientation on the new page |
|
|
248
|
+
|
|
249
|
+
### 4.2 Focus Trapping
|
|
250
|
+
|
|
251
|
+
Modals, dialogs, and overlays must trap focus inside them -- Tab and Shift+Tab should cycle within the modal, never escape to the page behind.
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
Tab from last focusable element --> loops to first focusable element
|
|
255
|
+
Shift+Tab from first focusable element --> loops to last focusable element
|
|
256
|
+
Escape key --> closes modal, returns focus to trigger
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### 4.3 Skip Links
|
|
260
|
+
|
|
261
|
+
Provide a "Skip to main content" link as the first focusable element on every page. It should be visually hidden until focused.
|
|
262
|
+
|
|
263
|
+
```html
|
|
264
|
+
<a href="#main-content" class="skip-link">Skip to main content</a>
|
|
265
|
+
<!-- ...navigation... -->
|
|
266
|
+
<main id="main-content" tabindex="-1">...</main>
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## 5. Cognitive Accessibility
|
|
272
|
+
|
|
273
|
+
Cognitive accessibility ensures content is understandable by users with learning disabilities, attention disorders, low literacy, or who are reading in a non-native language. It benefits all users under stress, multitasking, or time pressure.
|
|
274
|
+
|
|
275
|
+
### 5.1 Plain Language
|
|
276
|
+
|
|
277
|
+
**Flesch-Kincaid targets:**
|
|
278
|
+
- UI copy (buttons, labels, headings): Grade 6 or lower
|
|
279
|
+
- Help text and instructions: Grade 8 or lower
|
|
280
|
+
- Technical documentation: Grade 10 or lower (with glossary for terms)
|
|
281
|
+
- Legal/compliance copy: Grade 10 or lower (simplified version required alongside legal text)
|
|
282
|
+
|
|
283
|
+
**Plain language rules:**
|
|
284
|
+
|
|
285
|
+
| Rule | Bad | Good |
|
|
286
|
+
|------|-----|------|
|
|
287
|
+
| Use common words | "Utilize the configuration interface" | "Use the settings page" |
|
|
288
|
+
| Use short sentences | "In order to save your changes, you will need to click the save button that is located at the bottom of the form, and then wait for the confirmation." | "Click Save at the bottom of the form. You'll see a confirmation when it's done." |
|
|
289
|
+
| Use active voice | "Your password has been updated by the system" | "We updated your password" |
|
|
290
|
+
| One idea per sentence | "Enter your email and we'll send you a link to reset your password and you can set a new one." | "Enter your email. We'll send you a link to create a new password." |
|
|
291
|
+
| Front-load important info | "Due to maintenance activities scheduled for March 20, some features may be temporarily unavailable." | "Some features may be unavailable on March 20 during maintenance." |
|
|
292
|
+
| Avoid double negatives | "Don't forget to not leave fields blank" | "Fill in all fields" |
|
|
293
|
+
| Be specific | "An error occurred" | "We couldn't save your changes" |
|
|
294
|
+
| Avoid jargon | "Authenticate via SSO" | "Sign in with your company account" |
|
|
295
|
+
|
|
296
|
+
### 5.2 Chunking
|
|
297
|
+
|
|
298
|
+
Break content into scannable pieces. Users read UI text in an F-pattern -- they scan headings, first words of lines, and highlighted content.
|
|
299
|
+
|
|
300
|
+
| Technique | Application |
|
|
301
|
+
|-----------|------------|
|
|
302
|
+
| Short paragraphs | Maximum 3-4 sentences per paragraph in UI copy |
|
|
303
|
+
| Bullet lists | Use for 3+ parallel items instead of comma-separated lists |
|
|
304
|
+
| Headings | Every section of content gets a descriptive heading |
|
|
305
|
+
| White space | Generous spacing between sections (1.5-2em) |
|
|
306
|
+
| Progressive disclosure | Show summary first; detail on demand ("Show more") |
|
|
307
|
+
| Numbered steps | Use for sequential instructions (1, 2, 3) |
|
|
308
|
+
|
|
309
|
+
### 5.3 Consistent Terminology
|
|
310
|
+
|
|
311
|
+
Use one term for one concept throughout the entire interface.
|
|
312
|
+
|
|
313
|
+
| Inconsistent | Consistent |
|
|
314
|
+
|-------------|-----------|
|
|
315
|
+
| "Sign in" / "Log in" / "Login" on different pages | "Sign in" everywhere |
|
|
316
|
+
| "Remove" / "Delete" / "Erase" for the same action | "Delete" everywhere |
|
|
317
|
+
| "Workspace" / "Organization" / "Team" for the same concept | "Workspace" everywhere |
|
|
318
|
+
| "Preferences" / "Settings" / "Options" | "Settings" everywhere |
|
|
319
|
+
|
|
320
|
+
### 5.4 Reading Level Measurement
|
|
321
|
+
|
|
322
|
+
**Flesch-Kincaid Grade Level formula:**
|
|
323
|
+
```
|
|
324
|
+
0.39 * (total words / total sentences) + 11.8 * (total syllables / total words) - 15.59
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**Practical approach:** Use automated tools (Hemingway Editor, readability-score npm package, Microsoft Word readability statistics) to check critical UI text. Test with users who have low literacy or cognitive disabilities.
|
|
328
|
+
|
|
329
|
+
### 5.5 Dyslexia-Friendly Patterns
|
|
330
|
+
|
|
331
|
+
An estimated 15-20% of the population has some degree of dyslexia. These patterns improve readability for dyslexic users and benefit all users.
|
|
332
|
+
|
|
333
|
+
| Pattern | Guideline |
|
|
334
|
+
|---------|-----------|
|
|
335
|
+
| Font choice | Sans-serif fonts (Inter, Open Sans, Atkinson Hyperlegible). Avoid fonts where b/d, p/q, or I/l/1 are mirrors. |
|
|
336
|
+
| Font size | Minimum 16px body text; ideally 18-20px |
|
|
337
|
+
| Letter spacing | Slightly wider than default (0.05-0.12em); `letter-spacing: 0.05em` |
|
|
338
|
+
| Word spacing | Slightly wider (0.16em); `word-spacing: 0.16em` |
|
|
339
|
+
| Line height | 1.5 minimum, 1.8 ideal |
|
|
340
|
+
| Line length | 50-70 characters per line (45-75 acceptable range) |
|
|
341
|
+
| Alignment | Left-aligned, never justified (uneven word spacing impedes reading) |
|
|
342
|
+
| Background | Off-white or tinted backgrounds reduce glare (#FAFAFA, cream, light blue) |
|
|
343
|
+
| Text styling | Avoid all-caps for body text; use for short labels only (<3 words) |
|
|
344
|
+
| Paragraphs | Short, with clear visual spacing between them |
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## 6. Instructions That Don't Rely on Sensory Characteristics
|
|
349
|
+
|
|
350
|
+
WCAG 1.3.3 requires that instructions do not depend solely on shape, color, size, position, or sound.
|
|
351
|
+
|
|
352
|
+
### 6.1 Anti-Patterns and Fixes
|
|
353
|
+
|
|
354
|
+
| Bad (relies on sensory) | Good (includes text reference) |
|
|
355
|
+
|------------------------|-------------------------------|
|
|
356
|
+
| "Click the green button" | "Click Save" (the button also happens to be green) |
|
|
357
|
+
| "The option on the right" | "The Export option" |
|
|
358
|
+
| "See the red error above" | "See the error message next to the email field" |
|
|
359
|
+
| "Press the round icon" | "Press the Search button" |
|
|
360
|
+
| "The section highlighted in yellow" | "The Billing section" |
|
|
361
|
+
| "You'll hear a beep when done" | "You'll see and hear a confirmation when done" |
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## 7. Form Accessibility Copy
|
|
366
|
+
|
|
367
|
+
Forms are where accessibility copy matters most. Every field needs a label. Every error needs explanation. Every constraint needs disclosure.
|
|
368
|
+
|
|
369
|
+
### 7.1 Labels
|
|
370
|
+
|
|
371
|
+
| Rule | Example |
|
|
372
|
+
|------|---------|
|
|
373
|
+
| Visible label above or beside every field | `<label for="email">Email address</label>` |
|
|
374
|
+
| Never use placeholder as the only label | Placeholder disappears on input -- the label doesn't |
|
|
375
|
+
| Required fields marked consistently | "Email address (required)" or asterisk with legend |
|
|
376
|
+
| Group related fields | `<fieldset><legend>Shipping address</legend>...</fieldset>` |
|
|
377
|
+
|
|
378
|
+
### 7.2 Help Text
|
|
379
|
+
|
|
380
|
+
```html
|
|
381
|
+
<label for="password">Password</label>
|
|
382
|
+
<input id="password" type="password" aria-describedby="password-help" />
|
|
383
|
+
<span id="password-help">At least 8 characters with one number and one symbol.</span>
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
Show constraints before the user encounters them, not after they fail validation.
|
|
387
|
+
|
|
388
|
+
### 7.3 Error Association
|
|
389
|
+
|
|
390
|
+
```html
|
|
391
|
+
<label for="email">Email address</label>
|
|
392
|
+
<input id="email" type="email" aria-invalid="true" aria-describedby="email-error" />
|
|
393
|
+
<span id="email-error" role="alert">Enter an email address like name@example.com</span>
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
**Rules:**
|
|
397
|
+
- Link error to field via `aria-describedby`
|
|
398
|
+
- Set `aria-invalid="true"` on the field
|
|
399
|
+
- Use `role="alert"` on the error message for immediate announcement
|
|
400
|
+
- Remove error and `aria-invalid` as soon as input becomes valid
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## 8. Anti-Patterns
|
|
405
|
+
|
|
406
|
+
### 8.1 Missing Alt Text
|
|
407
|
+
|
|
408
|
+
The #1 reported accessibility issue (WebAIM Million, 2024). Screen readers say the filename, which is meaningless. **Fix:** Alt text on every informative image; `alt=""` on decorative images.
|
|
409
|
+
|
|
410
|
+
### 8.2 "Click Here" Links
|
|
411
|
+
|
|
412
|
+
"Click here" and "Read more" are meaningless out of context. Screen reader users navigate by link list -- they hear all links on the page listed. **Fix:** "View the accessibility guidelines" or "Read the Q3 report."
|
|
413
|
+
|
|
414
|
+
### 8.3 Overusing ARIA
|
|
415
|
+
|
|
416
|
+
Adding ARIA to elements that already have semantic meaning. `<button aria-label="Submit" role="button">Submit</button>` -- the ARIA is redundant and could conflict. **Fix:** Use proper HTML semantics first. Add ARIA only to fill gaps.
|
|
417
|
+
|
|
418
|
+
### 8.4 Assertive Abuse
|
|
419
|
+
|
|
420
|
+
Using `aria-live="assertive"` for routine updates. Interrupts the user's reading flow constantly. **Fix:** Default to `polite`. Reserve `assertive` for errors and time-critical alerts.
|
|
421
|
+
|
|
422
|
+
### 8.5 Placeholder-Only Labels
|
|
423
|
+
|
|
424
|
+
Using `placeholder` as the field label. It disappears on input, leaving the user unable to verify what the field is for. Placeholder text has insufficient contrast in most browsers. **Fix:** Always use a visible `<label>`.
|
|
425
|
+
|
|
426
|
+
### 8.6 Ambiguous Button Text
|
|
427
|
+
|
|
428
|
+
Multiple buttons labeled "Delete" or "Edit" on the same page with no distinguishing context. Screen readers read "Delete. Delete. Delete." **Fix:** Use `aria-label` to add context: "Delete 'Project Atlas'."
|
|
429
|
+
|
|
430
|
+
### 8.7 Focus Trap Without Escape
|
|
431
|
+
|
|
432
|
+
Trapping focus in a modal but not implementing Escape key to close. The user is stuck. **Fix:** Always bind Escape to close modals and return focus to the trigger.
|
|
433
|
+
|
|
434
|
+
### 8.8 Color-Only Indicators
|
|
435
|
+
|
|
436
|
+
Using only red/green to indicate error/success states. Users with color blindness cannot distinguish them. **Fix:** Pair color with icons and text labels.
|
|
437
|
+
|
|
438
|
+
### 8.9 Auto-Playing Media
|
|
439
|
+
|
|
440
|
+
Content that speaks or plays sound immediately, interfering with screen reader audio. **Fix:** Never auto-play with sound. Provide clear play controls.
|
|
441
|
+
|
|
442
|
+
### 8.10 Moving or Blinking Content
|
|
443
|
+
|
|
444
|
+
Content that moves, blinks, or auto-scrolls without user control. Causes issues for users with vestibular disorders, attention disorders, and seizure conditions. **Fix:** Respect `prefers-reduced-motion`. Provide pause/stop controls. Never flash more than 3 times per second.
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## 9. Testing Accessibility Copy
|
|
449
|
+
|
|
450
|
+
### 9.1 Automated Checks
|
|
451
|
+
|
|
452
|
+
| Tool | What It Catches |
|
|
453
|
+
|------|----------------|
|
|
454
|
+
| axe-core | Missing alt text, missing labels, ARIA misuse, contrast |
|
|
455
|
+
| Lighthouse | Alt text, ARIA, heading hierarchy, link text |
|
|
456
|
+
| eslint-plugin-jsx-a11y | Missing alt, missing labels in JSX at build time |
|
|
457
|
+
| pa11y | Automated accessibility audit on rendered pages |
|
|
458
|
+
| Flesch-Kincaid tools | Reading level of UI copy |
|
|
459
|
+
|
|
460
|
+
### 9.2 Manual Checks
|
|
461
|
+
|
|
462
|
+
| Check | How |
|
|
463
|
+
|-------|-----|
|
|
464
|
+
| Screen reader walkthrough | Use VoiceOver (macOS/iOS), NVDA (Windows), TalkBack (Android) to navigate every screen |
|
|
465
|
+
| Keyboard-only navigation | Unplug the mouse. Tab through every interactive element. Can you reach everything? |
|
|
466
|
+
| Link list test | Open the screen reader's link list. Are all links descriptive out of context? |
|
|
467
|
+
| Heading hierarchy | Open the screen reader's heading list. Does the hierarchy make sense? |
|
|
468
|
+
| Zoom to 200% | Does all content remain visible and usable at 200% browser zoom? |
|
|
469
|
+
| Color contrast | Check all text and interactive elements against WCAG AA (4.5:1 body, 3:1 large/UI) |
|
|
470
|
+
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
## 10. Decision Tree
|
|
474
|
+
|
|
475
|
+
### 10.1 Choosing the Right ARIA Approach
|
|
476
|
+
|
|
477
|
+
```
|
|
478
|
+
Does the element have visible text that describes its purpose?
|
|
479
|
+
+-- YES
|
|
480
|
+
| +-- Is the text unique on the page? --> No ARIA needed
|
|
481
|
+
| +-- Is the text repeated (multiple "Edit" buttons)? --> Add aria-label with context
|
|
482
|
+
+-- NO
|
|
483
|
+
+-- Is it an icon-only control? --> aria-label with the action name
|
|
484
|
+
+-- Is it a landmark? --> aria-label to distinguish from other landmarks
|
|
485
|
+
+-- Is it a live-updating region? --> aria-live with appropriate politeness
|
|
486
|
+
+-- Is it a complex widget? --> Follow WAI-ARIA Authoring Practices for that pattern
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### 10.2 Choosing Alt Text Strategy
|
|
490
|
+
|
|
491
|
+
```
|
|
492
|
+
What type of image is it?
|
|
493
|
+
+-- Purely decorative --> alt=""
|
|
494
|
+
+-- Icon next to text label --> alt="" (text provides the meaning)
|
|
495
|
+
+-- Informative photo --> Describe the content and purpose (under 125 chars)
|
|
496
|
+
+-- Complex chart/diagram --> Short alt summary + aria-describedby for details
|
|
497
|
+
+-- Linked image (logo, thumbnail) --> Alt describes the link destination
|
|
498
|
+
+-- Image of text --> Alt contains the text in the image
|
|
499
|
+
+-- User-uploaded content --> Prompt users to add alt text; use AI-generated as fallback
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
## References
|
|
505
|
+
|
|
506
|
+
- [WCAG 2.2](https://www.w3.org/TR/WCAG22/)
|
|
507
|
+
- [WAI-ARIA Authoring Practices 1.2](https://www.w3.org/WAI/ARIA/apg/)
|
|
508
|
+
- [WebAIM Million - Annual Accessibility Analysis](https://webaim.org/projects/million/)
|
|
509
|
+
- [WebAIM - Alternative Text](https://webaim.org/techniques/alttext/)
|
|
510
|
+
- [Apple - Accessibility](https://developer.apple.com/accessibility/)
|
|
511
|
+
- [Material Design - Accessibility](https://m3.material.io/foundations/accessible-design/overview)
|
|
512
|
+
- [NNG - Accessibility Guidelines](https://www.nngroup.com/topic/accessibility/)
|
|
513
|
+
- [NNG - Plain Language](https://www.nngroup.com/articles/plain-language-experts/)
|
|
514
|
+
- [W3C - ARIA Live Regions](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Guides/Live_regions)
|
|
515
|
+
- [PLAIN - Federal Plain Language Guidelines](https://www.plainlanguage.gov/guidelines/)
|
|
516
|
+
- [Hemingway Editor](https://hemingwayapp.com/)
|
|
517
|
+
- [British Dyslexia Association - Dyslexia Friendly Style Guide](https://www.bdadyslexia.org.uk/advice/employers/creating-a-dyslexia-friendly-workplace/dyslexia-friendly-style-guide)
|
|
518
|
+
- [Atkinson Hyperlegible Font](https://brailleinstitute.org/freefont)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Directory Purpose
|
|
2
|
+
|
|
3
|
+
The `patterns` directory catalogs reusable content patterns for writing UI copy, notifications, accessible text, and sample data across applications.
|
|
4
|
+
|
|
5
|
+
# Key Concepts
|
|
6
|
+
|
|
7
|
+
- Writing clear, actionable copy for every UI state
|
|
8
|
+
- Structuring notifications across channels with proper constraints
|
|
9
|
+
- Making content accessible to all users including those with disabilities
|
|
10
|
+
- Generating realistic, unbiased sample content for development and testing
|
|
11
|
+
|
|
12
|
+
# File Map
|
|
13
|
+
|
|
14
|
+
- `state-copy.md` — copy for every UI state: loading, empty, error, success, destructive, offline, timeout
|
|
15
|
+
- `notification-content.md` — push, email, in-app, and system message structure and constraints
|
|
16
|
+
- `accessibility-copy.md` — alt text, ARIA labels, screen reader announcements, cognitive accessibility
|
|
17
|
+
- `sample-content.md` — realistic test data generation, edge cases, bias avoidance, cultural sensitivity
|
|
18
|
+
|
|
19
|
+
# Reading Guide
|
|
20
|
+
|
|
21
|
+
If writing error messages or empty states -> read `state-copy.md`
|
|
22
|
+
If designing push notifications or email templates -> read `notification-content.md`
|
|
23
|
+
If improving screen reader experience or plain language -> read `accessibility-copy.md`
|
|
24
|
+
If generating test fixtures or placeholder content -> read `sample-content.md`
|