ai-playbook 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/README.md +146 -0
- package/agents/README.md +168 -0
- package/agents/SKILL.md +633 -0
- package/agents/architect/AGENT.md +44 -0
- package/agents/architect/README.md +5 -0
- package/agents/coder/AGENT.md +43 -0
- package/agents/coder/README.md +5 -0
- package/agents/debugger/AGENT.md +42 -0
- package/agents/debugger/README.md +6 -0
- package/agents/devops/AGENT.md +43 -0
- package/agents/devops/README.md +5 -0
- package/agents/documentation/AGENT.md +45 -0
- package/agents/documentation/README.md +5 -0
- package/agents/examples.md +550 -0
- package/agents/performance/AGENT.md +45 -0
- package/agents/performance/README.md +6 -0
- package/agents/planner/AGENT.md +44 -0
- package/agents/planner/README.md +6 -0
- package/agents/product-owner/AGENT.md +46 -0
- package/agents/product-owner/README.md +6 -0
- package/agents/refactorer/AGENT.md +44 -0
- package/agents/refactorer/README.md +6 -0
- package/agents/release-manager/AGENT.md +45 -0
- package/agents/release-manager/README.md +6 -0
- package/agents/researcher/AGENT.md +44 -0
- package/agents/researcher/README.md +6 -0
- package/agents/reviewer/AGENT.md +43 -0
- package/agents/reviewer/README.md +6 -0
- package/agents/security/AGENT.md +46 -0
- package/agents/security/README.md +6 -0
- package/agents/support/AGENT.md +45 -0
- package/agents/support/README.md +6 -0
- package/agents/tester/AGENT.md +46 -0
- package/agents/tester/README.md +5 -0
- package/bin/cli.js +186 -0
- package/commands/README.md +266 -0
- package/commands/build.md +135 -0
- package/commands/clean.md +126 -0
- package/commands/deploy-prod.md +171 -0
- package/commands/deploy-staging.md +147 -0
- package/commands/deps.md +169 -0
- package/commands/dev.md +132 -0
- package/commands/format.md +142 -0
- package/commands/lint.md +125 -0
- package/commands/migrate.md +159 -0
- package/commands/release.md +183 -0
- package/commands/rollback.md +152 -0
- package/commands/seed.md +178 -0
- package/commands/setup.md +109 -0
- package/commands/test.md +134 -0
- package/commands/validate.md +147 -0
- package/context/README.md +7 -0
- package/context/aem.md +47 -0
- package/context/architecture.md +51 -0
- package/context/bullminder.md +57 -0
- package/context/coding-style.md +42 -0
- package/context/communication.md +53 -0
- package/context/company.md +46 -0
- package/context/engineering.md +63 -0
- package/context/project-template.md +71 -0
- package/context/trading.md +52 -0
- package/hooks/README.md +326 -0
- package/hooks/code-review/README.md +6 -0
- package/hooks/code-review/check-coverage.md +101 -0
- package/hooks/custom/README.md +6 -0
- package/hooks/custom/project-specific-hooks.md +273 -0
- package/hooks/deployment/README.md +6 -0
- package/hooks/deployment/health-check.md +102 -0
- package/hooks/deployment/pre-deploy-check.md +84 -0
- package/hooks/documentation/README.md +6 -0
- package/hooks/documentation/update-changelog.md +146 -0
- package/hooks/post-task/README.md +5 -0
- package/hooks/post-task/run-tests.md +61 -0
- package/hooks/pre-commit/README.md +6 -0
- package/hooks/pre-commit/format.md +63 -0
- package/hooks/pre-commit/lint.md +62 -0
- package/hooks/pre-commit/type-check.md +78 -0
- package/hooks/pre-task/README.md +6 -0
- package/hooks/pre-task/check-branch.md +48 -0
- package/hooks/pre-task/validate-environment.md +48 -0
- package/hooks/security-check/README.md +6 -0
- package/hooks/security-check/dependency-audit.md +85 -0
- package/hooks/security-check/secrets-scan.md +77 -0
- package/hooks/test-before-finish/README.md +6 -0
- package/hooks/test-before-finish/run-all-tests.md +128 -0
- package/index.js +69 -0
- package/knowledge/README.md +33 -0
- package/knowledge/ai-agents.md +74 -0
- package/knowledge/decision-making.md +73 -0
- package/knowledge/documentation.md +67 -0
- package/knowledge/engineering-principles.md +65 -0
- package/knowledge/product-discovery.md +68 -0
- package/knowledge/security-privacy.md +54 -0
- package/knowledge/testing-quality.md +63 -0
- package/package.json +63 -0
- package/patterns/README.md +7 -0
- package/prompts/README.md +208 -0
- package/prompts/architect/README.md +96 -0
- package/prompts/architect/design-system.md +140 -0
- package/prompts/debugger/README.md +96 -0
- package/prompts/debugger/diagnose-issue.md +141 -0
- package/prompts/developer/README.md +129 -0
- package/prompts/developer/fix-bug.md +136 -0
- package/prompts/developer/implement-feature.md +133 -0
- package/prompts/product-owner/README.md +116 -0
- package/prompts/product-owner/define-feature.md +145 -0
- package/prompts/reviewer/README.md +91 -0
- package/prompts/reviewer/code-review.md +129 -0
- package/prompts/support/README.md +154 -0
- package/prompts/support/resolve-issue.md +124 -0
- package/roles/README.md +6 -0
- package/roles/design-architect/README.md +98 -0
- package/roles/design-architect/accessibility/README.md +33 -0
- package/roles/design-architect/accessibility/checklists.md +29 -0
- package/roles/design-architect/accessibility/examples.md +35 -0
- package/roles/design-architect/checklists.md +76 -0
- package/roles/design-architect/component-library/README.md +35 -0
- package/roles/design-architect/component-library/checklists.md +29 -0
- package/roles/design-architect/component-library/examples.md +35 -0
- package/roles/design-architect/design-system/README.md +35 -0
- package/roles/design-architect/design-system/checklists.md +27 -0
- package/roles/design-architect/design-system/examples.md +41 -0
- package/roles/design-architect/examples/README.md +31 -0
- package/roles/design-architect/examples/checklists.md +26 -0
- package/roles/design-architect/examples/examples.md +46 -0
- package/roles/design-architect/examples.md +90 -0
- package/roles/design-architect/figma/README.md +33 -0
- package/roles/design-architect/figma/checklists.md +27 -0
- package/roles/design-architect/figma/examples.md +38 -0
- package/roles/design-architect/responsibilities.md +73 -0
- package/roles/design-architect/responsive/README.md +34 -0
- package/roles/design-architect/responsive/checklists.md +26 -0
- package/roles/design-architect/responsive/examples.md +39 -0
- package/roles/design-architect/role.md +129 -0
- package/roles/design-architect/skill-map.md +42 -0
- package/roles/design-architect/triggers.md +110 -0
- package/roles/design-architect/ui/README.md +36 -0
- package/roles/design-architect/ui/checklists.md +29 -0
- package/roles/design-architect/ui/examples.md +28 -0
- package/roles/design-architect/usability/README.md +34 -0
- package/roles/design-architect/usability/checklists.md +28 -0
- package/roles/design-architect/usability/examples.md +31 -0
- package/roles/design-architect/ux/README.md +36 -0
- package/roles/design-architect/ux/checklists.md +28 -0
- package/roles/design-architect/ux/examples.md +37 -0
- package/roles/design-architect/wireframes/README.md +34 -0
- package/roles/design-architect/wireframes/checklists.md +25 -0
- package/roles/design-architect/wireframes/examples.md +32 -0
- package/roles/design-architect/workflow.md +80 -0
- package/roles/devops/README.md +101 -0
- package/roles/devops/ansible/README.md +6 -0
- package/roles/devops/checklists.md +413 -0
- package/roles/devops/ci-cd/README.md +169 -0
- package/roles/devops/ci-cd/checklists.md +289 -0
- package/roles/devops/ci-cd/examples.md +429 -0
- package/roles/devops/cloud-platforms/README.md +109 -0
- package/roles/devops/cost-optimization/README.md +131 -0
- package/roles/devops/disaster-recovery/README.md +118 -0
- package/roles/devops/docker/README.md +6 -0
- package/roles/devops/examples/README.md +6 -0
- package/roles/devops/examples.md +775 -0
- package/roles/devops/github-actions/README.md +6 -0
- package/roles/devops/helm/README.md +6 -0
- package/roles/devops/infrastructure-as-code/README.md +160 -0
- package/roles/devops/infrastructure-as-code/checklists.md +124 -0
- package/roles/devops/jenkins/README.md +6 -0
- package/roles/devops/kubernetes/README.md +150 -0
- package/roles/devops/kubernetes/checklists.md +192 -0
- package/roles/devops/kubernetes/examples.md +189 -0
- package/roles/devops/monitoring/README.md +93 -0
- package/roles/devops/networking/README.md +83 -0
- package/roles/devops/performance/README.md +104 -0
- package/roles/devops/responsibilities.md +95 -0
- package/roles/devops/role.md +130 -0
- package/roles/devops/security/README.md +126 -0
- package/roles/devops/skill-map.md +162 -0
- package/roles/devops/terraform/README.md +6 -0
- package/roles/devops/triggers.md +241 -0
- package/roles/devops/workflow.md +197 -0
- package/roles/qa/README.md +16 -0
- package/roles/qa/api-testing/README.md +6 -0
- package/roles/qa/automation/README.md +6 -0
- package/roles/qa/checklists.md +24 -0
- package/roles/qa/examples/README.md +6 -0
- package/roles/qa/examples.md +27 -0
- package/roles/qa/performance/README.md +6 -0
- package/roles/qa/playwright/README.md +6 -0
- package/roles/qa/responsibilities.md +16 -0
- package/roles/qa/role.md +47 -0
- package/roles/qa/selenium/README.md +6 -0
- package/roles/qa/skill-map.md +14 -0
- package/roles/qa/triggers.md +10 -0
- package/roles/qa/workflow.md +9 -0
- package/roles/software-architect/README.md +16 -0
- package/roles/software-architect/agents/README.md +6 -0
- package/roles/software-architect/ai-architecture/README.md +6 -0
- package/roles/software-architect/aws/README.md +6 -0
- package/roles/software-architect/azure/README.md +6 -0
- package/roles/software-architect/caching/README.md +6 -0
- package/roles/software-architect/checklists.md +25 -0
- package/roles/software-architect/cloud/README.md +6 -0
- package/roles/software-architect/database-design/README.md +6 -0
- package/roles/software-architect/diagrams/README.md +6 -0
- package/roles/software-architect/distributed-systems/README.md +7 -0
- package/roles/software-architect/docker/README.md +6 -0
- package/roles/software-architect/event-driven/README.md +7 -0
- package/roles/software-architect/examples/README.md +6 -0
- package/roles/software-architect/examples.md +22 -0
- package/roles/software-architect/gcp/README.md +6 -0
- package/roles/software-architect/kubernetes/README.md +6 -0
- package/roles/software-architect/messaging/README.md +6 -0
- package/roles/software-architect/rag/README.md +7 -0
- package/roles/software-architect/responsibilities.md +17 -0
- package/roles/software-architect/role.md +46 -0
- package/roles/software-architect/scalability/README.md +6 -0
- package/roles/software-architect/security/README.md +6 -0
- package/roles/software-architect/skill-map.md +15 -0
- package/roles/software-architect/system-design/README.md +6 -0
- package/roles/software-architect/triggers.md +10 -0
- package/roles/software-architect/vector-db/README.md +6 -0
- package/roles/software-architect/workflow.md +9 -0
- package/roles/software-developer/README.md +116 -0
- package/roles/software-developer/api/README.md +365 -0
- package/roles/software-developer/api/checklist.md +131 -0
- package/roles/software-developer/api/examples.md +459 -0
- package/roles/software-developer/authentication/README.md +26 -0
- package/roles/software-developer/authentication/checklists.md +22 -0
- package/roles/software-developer/authentication/examples.md +32 -0
- package/roles/software-developer/authorization/README.md +26 -0
- package/roles/software-developer/authorization/checklists.md +21 -0
- package/roles/software-developer/authorization/examples.md +27 -0
- package/roles/software-developer/backend/README.md +26 -0
- package/roles/software-developer/backend/checklists.md +21 -0
- package/roles/software-developer/backend/examples.md +21 -0
- package/roles/software-developer/cache/README.md +25 -0
- package/roles/software-developer/cache/checklists.md +21 -0
- package/roles/software-developer/cache/examples.md +22 -0
- package/roles/software-developer/checklists.md +122 -0
- package/roles/software-developer/code-review/README.md +23 -0
- package/roles/software-developer/code-review/checklists.md +22 -0
- package/roles/software-developer/code-review/examples.md +20 -0
- package/roles/software-developer/database/README.md +27 -0
- package/roles/software-developer/database/checklists.md +21 -0
- package/roles/software-developer/database/examples.md +27 -0
- package/roles/software-developer/debugging/README.md +24 -0
- package/roles/software-developer/debugging/checklists.md +20 -0
- package/roles/software-developer/debugging/examples.md +28 -0
- package/roles/software-developer/examples/README.md +22 -0
- package/roles/software-developer/examples/checklists.md +8 -0
- package/roles/software-developer/examples/examples.md +25 -0
- package/roles/software-developer/examples.md +378 -0
- package/roles/software-developer/frontend/README.md +76 -0
- package/roles/software-developer/frontend/accessibility/README.md +136 -0
- package/roles/software-developer/frontend/accessibility/best-practices.md +368 -0
- package/roles/software-developer/frontend/code-quality/README.md +136 -0
- package/roles/software-developer/frontend/code-quality/best-practices.md +309 -0
- package/roles/software-developer/frontend/components/README.md +65 -0
- package/roles/software-developer/frontend/components/best-practices.md +273 -0
- package/roles/software-developer/frontend/debugging/README.md +149 -0
- package/roles/software-developer/frontend/debugging/best-practices.md +329 -0
- package/roles/software-developer/frontend/examples/README.md +19 -0
- package/roles/software-developer/frontend/examples/checklists.md +8 -0
- package/roles/software-developer/frontend/examples/examples.md +17 -0
- package/roles/software-developer/frontend/logging-observability/README.md +196 -0
- package/roles/software-developer/frontend/logging-observability/best-practices.md +430 -0
- package/roles/software-developer/frontend/performance/README.md +99 -0
- package/roles/software-developer/frontend/performance/best-practices.md +350 -0
- package/roles/software-developer/frontend/state-management/README.md +85 -0
- package/roles/software-developer/frontend/state-management/best-practices.md +344 -0
- package/roles/software-developer/frontend/testing/README.md +114 -0
- package/roles/software-developer/frontend/testing/best-practices.md +272 -0
- package/roles/software-developer/fullstack/README.md +25 -0
- package/roles/software-developer/fullstack/checklists.md +19 -0
- package/roles/software-developer/fullstack/examples.md +14 -0
- package/roles/software-developer/graphql/README.md +24 -0
- package/roles/software-developer/graphql/checklists.md +20 -0
- package/roles/software-developer/graphql/examples.md +24 -0
- package/roles/software-developer/integration-tests/README.md +25 -0
- package/roles/software-developer/integration-tests/checklists.md +20 -0
- package/roles/software-developer/integration-tests/examples.md +18 -0
- package/roles/software-developer/java/README.md +24 -0
- package/roles/software-developer/java/checklists.md +16 -0
- package/roles/software-developer/java/examples.md +22 -0
- package/roles/software-developer/javascript/README.md +24 -0
- package/roles/software-developer/javascript/checklists.md +15 -0
- package/roles/software-developer/javascript/examples.md +18 -0
- package/roles/software-developer/logging/README.md +105 -0
- package/roles/software-developer/logging/checklists.md +48 -0
- package/roles/software-developer/logging/examples.md +135 -0
- package/roles/software-developer/messaging/README.md +24 -0
- package/roles/software-developer/messaging/checklists.md +21 -0
- package/roles/software-developer/messaging/examples.md +26 -0
- package/roles/software-developer/microservices/README.md +25 -0
- package/roles/software-developer/microservices/checklists.md +21 -0
- package/roles/software-developer/microservices/examples.md +21 -0
- package/roles/software-developer/node/README.md +25 -0
- package/roles/software-developer/node/checklists.md +15 -0
- package/roles/software-developer/node/examples.md +15 -0
- package/roles/software-developer/nosql/README.md +24 -0
- package/roles/software-developer/nosql/checklists.md +21 -0
- package/roles/software-developer/nosql/examples.md +20 -0
- package/roles/software-developer/observability/README.md +25 -0
- package/roles/software-developer/observability/checklists.md +21 -0
- package/roles/software-developer/observability/examples.md +22 -0
- package/roles/software-developer/performance/README.md +26 -0
- package/roles/software-developer/performance/checklists.md +20 -0
- package/roles/software-developer/performance/examples.md +20 -0
- package/roles/software-developer/python/README.md +25 -0
- package/roles/software-developer/python/checklists.md +15 -0
- package/roles/software-developer/python/examples.md +17 -0
- package/roles/software-developer/react/README.md +24 -0
- package/roles/software-developer/react/checklists.md +15 -0
- package/roles/software-developer/react/examples.md +22 -0
- package/roles/software-developer/refactoring/README.md +23 -0
- package/roles/software-developer/refactoring/checklists.md +21 -0
- package/roles/software-developer/refactoring/examples.md +11 -0
- package/roles/software-developer/responsibilities.md +58 -0
- package/roles/software-developer/role.md +127 -0
- package/roles/software-developer/skill-map.md +88 -0
- package/roles/software-developer/springboot/README.md +25 -0
- package/roles/software-developer/springboot/checklists.md +15 -0
- package/roles/software-developer/springboot/examples.md +21 -0
- package/roles/software-developer/sql/README.md +24 -0
- package/roles/software-developer/sql/checklists.md +22 -0
- package/roles/software-developer/sql/examples.md +20 -0
- package/roles/software-developer/testing/README.md +25 -0
- package/roles/software-developer/testing/checklists.md +21 -0
- package/roles/software-developer/testing/examples.md +19 -0
- package/roles/software-developer/triggers.md +550 -0
- package/roles/software-developer/typescript/README.md +25 -0
- package/roles/software-developer/typescript/checklists.md +15 -0
- package/roles/software-developer/typescript/examples.md +18 -0
- package/roles/software-developer/unit-tests/README.md +24 -0
- package/roles/software-developer/unit-tests/checklists.md +19 -0
- package/roles/software-developer/unit-tests/examples.md +22 -0
- package/roles/software-developer/workflow.md +196 -0
- package/roles/sre/README.md +16 -0
- package/roles/sre/alerts/README.md +6 -0
- package/roles/sre/availability/README.md +6 -0
- package/roles/sre/chaos/README.md +6 -0
- package/roles/sre/checklists.md +24 -0
- package/roles/sre/examples/README.md +6 -0
- package/roles/sre/examples.md +19 -0
- package/roles/sre/observability/README.md +6 -0
- package/roles/sre/reliability/README.md +6 -0
- package/roles/sre/responsibilities.md +16 -0
- package/roles/sre/role.md +46 -0
- package/roles/sre/skill-map.md +14 -0
- package/roles/sre/slos/README.md +6 -0
- package/roles/sre/triggers.md +10 -0
- package/roles/sre/workflow.md +9 -0
- package/roles/support-engineer/README.md +16 -0
- package/roles/support-engineer/checklists.md +24 -0
- package/roles/support-engineer/datadog/README.md +6 -0
- package/roles/support-engineer/examples/README.md +6 -0
- package/roles/support-engineer/examples.md +17 -0
- package/roles/support-engineer/incident-response/README.md +6 -0
- package/roles/support-engineer/kubernetes/README.md +6 -0
- package/roles/support-engineer/linux/README.md +6 -0
- package/roles/support-engineer/logs/README.md +6 -0
- package/roles/support-engineer/monitoring/README.md +6 -0
- package/roles/support-engineer/networking/README.md +6 -0
- package/roles/support-engineer/newrelic/README.md +6 -0
- package/roles/support-engineer/postmortem/README.md +6 -0
- package/roles/support-engineer/production/README.md +6 -0
- package/roles/support-engineer/responsibilities.md +16 -0
- package/roles/support-engineer/role.md +47 -0
- package/roles/support-engineer/root-cause-analysis/README.md +6 -0
- package/roles/support-engineer/runbooks/README.md +6 -0
- package/roles/support-engineer/skill-map.md +14 -0
- package/roles/support-engineer/splunk/README.md +6 -0
- package/roles/support-engineer/triggers.md +10 -0
- package/roles/support-engineer/troubleshooting/README.md +6 -0
- package/roles/support-engineer/workflow.md +9 -0
- package/setup.sh +204 -0
- package/skills/.claude/README.md +7 -0
- package/skills/README.md +21 -0
- package/skills/ai-agents/README.md +207 -0
- package/skills/ai-agents/examples.md +335 -0
- package/skills/ai-agents/skill.md +392 -0
- package/skills/architecture/README.md +198 -0
- package/skills/architecture/examples.md +316 -0
- package/skills/architecture/skill.md +189 -0
- package/skills/design-architecture/README.md +107 -0
- package/skills/design-architecture/examples.md +84 -0
- package/skills/design-architecture/skill.md +192 -0
- package/skills/devops/README.md +177 -0
- package/skills/devops/examples.md +376 -0
- package/skills/devops/skill.md +210 -0
- package/skills/documentation/README.md +182 -0
- package/skills/documentation/examples.md +364 -0
- package/skills/documentation/skill.md +200 -0
- package/skills/performance/README.md +177 -0
- package/skills/performance/examples.md +376 -0
- package/skills/performance/skill.md +199 -0
- package/skills/qa/README.md +106 -0
- package/skills/qa/examples.md +84 -0
- package/skills/qa/skill.md +384 -0
- package/skills/security/README.md +108 -0
- package/skills/security/examples.md +85 -0
- package/skills/security/skill.md +223 -0
- package/skills/software-development/README.md +239 -0
- package/skills/software-development/assessment.md +0 -0
- package/skills/software-development/checklists.md +0 -0
- package/skills/software-development/examples.md +375 -0
- package/skills/software-development/prompts.md +0 -0
- package/skills/software-development/skill.md +390 -0
- package/skills/software-development/templates/README.md +7 -0
- package/skills/software-development/templates/api-development.md +0 -0
- package/skills/software-development/templates/bug-fix.md +0 -0
- package/skills/software-development/templates/code-review.md +0 -0
- package/skills/software-development/templates/feature-implementation.md +0 -0
- package/skills/software-development/templates/llm-integration.md +0 -0
- package/skills/software-development/templates/performance-review.md +0 -0
- package/skills/software-development/templates/security-review.md +0 -0
- package/skills/software-development/templates/test-generation.md +0 -0
- package/skills/software-development/tools.md +0 -0
- package/skills/software-development/workflows.md +0 -0
- package/skills/sre/README.md +107 -0
- package/skills/sre/examples.md +379 -0
- package/skills/sre/skill.md +256 -0
- package/skills/support-engineering/README.md +107 -0
- package/skills/support-engineering/examples.md +85 -0
- package/skills/support-engineering/skill.md +103 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
# Software‑Development Role – Example Scenarios & Code Snippets
|
|
2
|
+
> The purpose of this document is to provide ready‑to‑copy examples that illustrate the expectations outlined in **role.md** and the **checklists.md**.
|
|
3
|
+
> Use these as templates, reference implementations, or starting points for new work items.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
1. [Code‑Style & Project Conventions](#code-style--project-conventions)
|
|
9
|
+
2. [Typical Module Structure](#typical-module-structure)
|
|
10
|
+
3. [Common Design Patterns](#common-design-patterns)
|
|
11
|
+
4. [API Design (REST & GraphQL)](#api-design--rest--graphql)
|
|
12
|
+
5. [Testing Samples](#testing-samples)
|
|
13
|
+
6. [CI / Build Snippets](#ci--build-snippets)
|
|
14
|
+
7. [Observability & Logging](#observability--logging)
|
|
15
|
+
8. [Security Practices](#security-practices)
|
|
16
|
+
9. [Deployment (Docker + Helm)](#deployment--docker--helm)
|
|
17
|
+
10. [Documentation Boilerplate](#documentation-boilerplate)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1️⃣ Code‑Style & Project Conventions
|
|
22
|
+
### Python (PEP‑8 + project specific)
|
|
23
|
+
```python
|
|
24
|
+
# src/myapp/utils.py
|
|
25
|
+
"""Utility helpers – keep private functions prefixed with '_'."""
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
from typing import Iterable, List
|
|
29
|
+
|
|
30
|
+
def chunk(iterable: Iterable[int], size: int) -> List[List[int]]:
|
|
31
|
+
"""Yield successive *size*‑sized chunks from *iterable*."""
|
|
32
|
+
it = iter(iterable)
|
|
33
|
+
while True:
|
|
34
|
+
chunk = list(itertools.islice(it, size))
|
|
35
|
+
if not chunk:
|
|
36
|
+
break
|
|
37
|
+
yield chunk
|
|
38
|
+
|
|
39
|
+
def _private_helper(x: int) -> int:
|
|
40
|
+
"""Internal helper – not part of the public API."""
|
|
41
|
+
return x * 2
|
|
42
|
+
|
|
43
|
+
Follow the project config:
|
|
44
|
+
|
|
45
|
+
ruff for linting, mypy for static typing.
|
|
46
|
+
pre‑commit hooks run on every commit (pre-commit run --all-files).
|
|
47
|
+
Naming Conventions
|
|
48
|
+
Element Recommended Pattern
|
|
49
|
+
Modules src/<package>/
|
|
50
|
+
Packages src/<package_name>/ (all lower‑case)
|
|
51
|
+
Public functions snake_case
|
|
52
|
+
Private helpers _leading_underscore
|
|
53
|
+
Classes PascalCase
|
|
54
|
+
Tests tests/test_<module>_<feature>.py
|
|
55
|
+
2️⃣ Typical Module Structure
|
|
56
|
+
src/
|
|
57
|
+
└─ myapp/
|
|
58
|
+
├─ __init__.py
|
|
59
|
+
├─ api/
|
|
60
|
+
│ ├─ __init__.py
|
|
61
|
+
│ └─ v1/
|
|
62
|
+
│ ├─ __init__.py
|
|
63
|
+
│ └─ users.py
|
|
64
|
+
├─ core/
|
|
65
|
+
│ ├─ __init__.py
|
|
66
|
+
│ └─ service.py
|
|
67
|
+
├─ db/
|
|
68
|
+
│ ├─ __init__.py
|
|
69
|
+
│ └─ models.py
|
|
70
|
+
├─ main.py
|
|
71
|
+
└─ config/
|
|
72
|
+
└─ settings.py
|
|
73
|
+
Why?
|
|
74
|
+
|
|
75
|
+
Separation of concerns (API, core business logic, persistence).
|
|
76
|
+
Makes it easy to load context (projects/<proj>/context.md) and locate related skills.
|
|
77
|
+
3️⃣ Common Design Patterns
|
|
78
|
+
3.1. Repository Pattern (Data Access)
|
|
79
|
+
# src/myapp/db/repositories/user_repo.py
|
|
80
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
81
|
+
from myapp.db.models import User # SQLAlchemy ORM model
|
|
82
|
+
|
|
83
|
+
class UserRepository:
|
|
84
|
+
"""Async repository encapsulating CRUD operations for users."""
|
|
85
|
+
|
|
86
|
+
def __init__(self, session: AsyncSession):
|
|
87
|
+
self.session = session
|
|
88
|
+
|
|
89
|
+
async def get_by_id(self, user_id: int) -> User | None:
|
|
90
|
+
result = await self.session.get(User, user_id)
|
|
91
|
+
return result
|
|
92
|
+
|
|
93
|
+
async def list_active(self) -> list[User]:
|
|
94
|
+
stmt = select(User).where(User.is_active == True)
|
|
95
|
+
result = await self.session.execute(stmt)
|
|
96
|
+
return result.scalars().all()
|
|
97
|
+
3.2. Strategy Pattern (Pluggable Algorithms)
|
|
98
|
+
# src/myapp/strategies/payments.py
|
|
99
|
+
from abc import ABC, abstractmethod
|
|
100
|
+
|
|
101
|
+
class PaymentStrategy(ABC):
|
|
102
|
+
@abstractmethod
|
|
103
|
+
async def charge(self, amount_cents: int, user_id: str) -> bool:
|
|
104
|
+
...
|
|
105
|
+
|
|
106
|
+
class StripePayment(PaymentStrategy):
|
|
107
|
+
async def charge(self, amount_cents: int, user_id: str) -> bool:
|
|
108
|
+
# call Stripe SDK …
|
|
109
|
+
return True
|
|
110
|
+
4️⃣ API Design (REST & GraphQL)
|
|
111
|
+
4.1. REST Endpoint – Create User
|
|
112
|
+
# src/myapp/api/v1/users.py
|
|
113
|
+
from fastapi import APIRouter, HTTPException, Depends
|
|
114
|
+
from pydantic import BaseModel, EmailStr
|
|
115
|
+
from myapp.db.repositories.user_repo import UserRepository
|
|
116
|
+
|
|
117
|
+
router = APIRouter(prefix="/v1/users", tags=["users"])
|
|
118
|
+
|
|
119
|
+
class CreateUserRequest(BaseModel):
|
|
120
|
+
email: EmailStr
|
|
121
|
+
name: str | None = None
|
|
122
|
+
# ... other fields
|
|
123
|
+
|
|
124
|
+
@router.post("/", status_code=201)
|
|
125
|
+
async def create_user(payload: CreateUserRequest,
|
|
126
|
+
repo: UserRepository = Depends()) -> dict:
|
|
127
|
+
# Convert request → domain entity
|
|
128
|
+
new_user = User(email=payload.email, name=payload.name)
|
|
129
|
+
await repo.session.add(new_user)
|
|
130
|
+
await repo.session.commit()
|
|
131
|
+
await repo.session.refresh(new_user)
|
|
132
|
+
|
|
133
|
+
return {"id": new_user.id, "email": new_user.email, "name": new_user.name}
|
|
134
|
+
Key points
|
|
135
|
+
|
|
136
|
+
Validate input via Pydantic.
|
|
137
|
+
Return HTTP 201 on successful creation.
|
|
138
|
+
Use dependency injection for repository.
|
|
139
|
+
4.2. GraphQL Resolver (Ariadne example)
|
|
140
|
+
# src/myapp/graphql/resolvers.py
|
|
141
|
+
from ariadne import mutation, make_executable_schema
|
|
142
|
+
from myapp.api.v1.users import create_user
|
|
143
|
+
|
|
144
|
+
@mutation("createUser")
|
|
145
|
+
async def create_user(_, info, **kwargs):
|
|
146
|
+
# Resolve DB repo via DI or info.context
|
|
147
|
+
repo = info.context["user_repo"]
|
|
148
|
+
user = await repo.create(**kwargs) # re‑use same logic as REST
|
|
149
|
+
return {"user": user}
|
|
150
|
+
5️⃣ Testing Samples
|
|
151
|
+
5.1. Unit Test – Function with Pure Logic
|
|
152
|
+
# tests/unit/test_utils.py
|
|
153
|
+
import pytest
|
|
154
|
+
from myapp.utils import chunk
|
|
155
|
+
|
|
156
|
+
@pytest.mark.parametrize(
|
|
157
|
+
"data,size,expected",
|
|
158
|
+
[
|
|
159
|
+
([1, 2, 3, 4, 5], 2, [[1, 2], [3, 4], [5]]),
|
|
160
|
+
([], 3, []),
|
|
161
|
+
([1], 1, [[1]]),
|
|
162
|
+
],
|
|
163
|
+
)
|
|
164
|
+
def test_chunk(data, size, expected):
|
|
165
|
+
assert chunk(data, size) == expected
|
|
166
|
+
5.2. Integration Test – API End‑to‑End
|
|
167
|
+
# tests/integration/test_user_api.py
|
|
168
|
+
import httpx
|
|
169
|
+
import pytest
|
|
170
|
+
from myapp.api.v1.users import router
|
|
171
|
+
from fastapi.testclient import TestClient
|
|
172
|
+
|
|
173
|
+
@pytest.fixture
|
|
174
|
+
def client():
|
|
175
|
+
with TestClient(router) as c:
|
|
176
|
+
yield c
|
|
177
|
+
|
|
178
|
+
@pytest.mark.asyncio
|
|
179
|
+
async def test_create_user_success(client):
|
|
180
|
+
payload = {"email": "alice@example.com", "name": "Alice"}
|
|
181
|
+
resp = client.post("/users", json=payload)
|
|
182
|
+
assert resp.status_code == 201
|
|
183
|
+
data = resp.json()
|
|
184
|
+
assert data["email"] == payload["email"]
|
|
185
|
+
assert "id" in data
|
|
186
|
+
5.3. Property‑Based Test with hypothesis
|
|
187
|
+
# tests/property/test_repo.py
|
|
188
|
+
from hypothesis import given, strategies as st
|
|
189
|
+
import pytest
|
|
190
|
+
from myapp.db.repositories.user_repo import UserRepository
|
|
191
|
+
from myapp.db.models import User, async_session_maker
|
|
192
|
+
|
|
193
|
+
@given(st.integers(min_value=1, max_value=1_000_000))
|
|
194
|
+
def test_user_id_is_positive(id_: int):
|
|
195
|
+
assert id_ > 0
|
|
196
|
+
6️⃣ CI / Build Snippets
|
|
197
|
+
6.1. GitHub Actions – Full Pipeline
|
|
198
|
+
# .github/workflows/ci.yml
|
|
199
|
+
name: CI
|
|
200
|
+
|
|
201
|
+
on:
|
|
202
|
+
push:
|
|
203
|
+
branches: [main, develop]
|
|
204
|
+
pull_request:
|
|
205
|
+
branches: [main, develop]
|
|
206
|
+
|
|
207
|
+
jobs:
|
|
208
|
+
build-test:
|
|
209
|
+
runs-on: ubuntu-latest
|
|
210
|
+
strategy:
|
|
211
|
+
matrix:
|
|
212
|
+
python-version: ["3.11"]
|
|
213
|
+
steps:
|
|
214
|
+
- uses: actions/checkout@v4
|
|
215
|
+
- name: Set up Python
|
|
216
|
+
uses: actions/setup-python@v5
|
|
217
|
+
with:
|
|
218
|
+
python-version: ${{ matrix.python-version }}
|
|
219
|
+
- name: Install dependencies
|
|
220
|
+
run: |
|
|
221
|
+
python -m pip install --upgrade pip
|
|
222
|
+
pip install -r requirements.txt
|
|
223
|
+
pip install -r dev-requirements.txt
|
|
224
|
+
pre-commit install
|
|
225
|
+
- name: Lint & type check
|
|
226
|
+
run: |
|
|
227
|
+
ruff check .
|
|
228
|
+
mypy .
|
|
229
|
+
- name: Run tests
|
|
230
|
+
run: |
|
|
231
|
+
pytest --cov=src --cov-report=xml
|
|
232
|
+
- name: Security scan
|
|
233
|
+
run: |
|
|
234
|
+
bandit -r .
|
|
235
|
+
safety check -r .
|
|
236
|
+
- name: Upload coverage
|
|
237
|
+
uses: codecov/codecov-action@v4
|
|
238
|
+
with:
|
|
239
|
+
files: coverage.xml
|
|
240
|
+
7️⃣ Observability & Logging
|
|
241
|
+
7.1. Structured JSON Logging (Python structlog)
|
|
242
|
+
# src/myapp/logging_config.py
|
|
243
|
+
import structlog
|
|
244
|
+
import logging
|
|
245
|
+
|
|
246
|
+
def configure_logging():
|
|
247
|
+
logging.basicConfig(
|
|
248
|
+
format="%(message)s",
|
|
249
|
+
level=logging.INFO,
|
|
250
|
+
)
|
|
251
|
+
structlog.configure(
|
|
252
|
+
processors=[
|
|
253
|
+
structlog.contextvars.merge_contextvars,
|
|
254
|
+
structlog.processors.TimeStamper(fmt="iso"),
|
|
255
|
+
structlog.processors.JSONRenderer(),
|
|
256
|
+
],
|
|
257
|
+
wrapper_class=structlog.make_filtering_bound_logger(logging.INFO),
|
|
258
|
+
)
|
|
259
|
+
Usage inside code:
|
|
260
|
+
|
|
261
|
+
import structlog
|
|
262
|
+
log = structlog.get_logger()
|
|
263
|
+
log.info("user_created", user_id=user.id, email=user.email, latency_ms=12)
|
|
264
|
+
7.2. Prometheus Metrics (aioxray)
|
|
265
|
+
# src/myapp/metrics.py
|
|
266
|
+
from prometheus_client import Counter, Histogram
|
|
267
|
+
|
|
268
|
+
INFERENCES = Histogram(
|
|
269
|
+
"inference_latency_seconds",
|
|
270
|
+
"Latency of inference calls",
|
|
271
|
+
buckets=(0.01, 0.05, 0.1, 0.25, 0.5, 1, 2.5),
|
|
272
|
+
)
|
|
273
|
+
CALLS_TOTAL = Counter("inference_calls_total", "Total number of inference calls")
|
|
274
|
+
Metric registration happens at module import; expose a helper:
|
|
275
|
+
|
|
276
|
+
async def infer(payload: dict) -> dict:
|
|
277
|
+
with INFERENCES.time():
|
|
278
|
+
CALLS_TOTAL.inc()
|
|
279
|
+
# actual inference logic …
|
|
280
|
+
return result
|
|
281
|
+
8️⃣ Security Practices
|
|
282
|
+
8.1. Secret Management (Vault example)
|
|
283
|
+
# .env (never commit!)
|
|
284
|
+
VAULT_ADDR=https://vault.mycompany.com
|
|
285
|
+
VAULT_TOKEN=${{ secrets.VAULT_TOKEN }}
|
|
286
|
+
Python wrapper:
|
|
287
|
+
|
|
288
|
+
# src/myapp/security/vault.py
|
|
289
|
+
import hvac
|
|
290
|
+
from myapp.config import Settings
|
|
291
|
+
|
|
292
|
+
_client = hvac.Client(
|
|
293
|
+
url=Settings.VAULT_ADDR,
|
|
294
|
+
token=Settings.VAULT_TOKEN,
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
def get_secret(path: str, key: str) -> str | None:
|
|
298
|
+
secret = _client.secrets.kv.v2.read_secret_version(path=path)
|
|
299
|
+
return secret["data"]["data"].get(key)
|
|
300
|
+
8.2. OWASP Security Headers (FastAPI)
|
|
301
|
+
# src/myapp/api/common.py
|
|
302
|
+
from fastapi.middleware import Middleware
|
|
303
|
+
from fastapi.middleware.security import SecurityMiddleware
|
|
304
|
+
|
|
305
|
+
def get_app():
|
|
306
|
+
app = FastAPI(middleware=[
|
|
307
|
+
SecurityMiddleware(
|
|
308
|
+
https_redirect=True,
|
|
309
|
+
hsts_max_age=31536000,
|
|
310
|
+
sts_include_subdomains=True,
|
|
311
|
+
sts_preload=True,
|
|
312
|
+
force_https=True,
|
|
313
|
+
allowed_hosts=["api.mycompany.com"],
|
|
314
|
+
),
|
|
315
|
+
# … other middleware
|
|
316
|
+
])
|
|
317
|
+
return app
|
|
318
|
+
9️⃣ Deployment – Docker + Helm
|
|
319
|
+
9.1. Multi‑Stage Dockerfile
|
|
320
|
+
# Dockerfile
|
|
321
|
+
# ---------- Build stage ----------
|
|
322
|
+
FROM python:3.11-slim AS builder
|
|
323
|
+
WORKDIR /app
|
|
324
|
+
COPY pyproject.toml poetry.lock ./
|
|
325
|
+
RUN pip install --no-cache-dir poetry && poetry config virtualenvs.in-project true \
|
|
326
|
+
&& poetry install --no-interaction --no-ansi --only main
|
|
327
|
+
|
|
328
|
+
# ---------- Runtime stage ----------
|
|
329
|
+
FROM python:3.11-slim AS runtime
|
|
330
|
+
WORKDIR /app
|
|
331
|
+
COPY --from=builder /app/.venv /app/.venv
|
|
332
|
+
ENV PATH="/app/.venv/bin:$PATH"
|
|
333
|
+
COPY . .
|
|
334
|
+
EXPOSE 8080
|
|
335
|
+
CMD ["uvicorn", "myapp.main:app", "--host", "0.0.0.0", "--port", "8080"]
|
|
336
|
+
9.2. Helm values.yaml snippet
|
|
337
|
+
# helm/myapp/values.yaml
|
|
338
|
+
replicaCount: 3
|
|
339
|
+
|
|
340
|
+
image:
|
|
341
|
+
repository: mycompany/myapp
|
|
342
|
+
tag: "v1.4.2"
|
|
343
|
+
pullPolicy: IfNotPresent
|
|
344
|
+
|
|
345
|
+
service:
|
|
346
|
+
type: ClusterIP
|
|
347
|
+
port: 8080
|
|
348
|
+
|
|
349
|
+
resources:
|
|
350
|
+
requests:
|
|
351
|
+
cpu: "200m"
|
|
352
|
+
memory: "256Mi"
|
|
353
|
+
limits:
|
|
354
|
+
cpu: "500m"
|
|
355
|
+
memory: "512Mi"
|
|
356
|
+
|
|
357
|
+
autoscaling:
|
|
358
|
+
enabled: true
|
|
359
|
+
minReplicas: 2
|
|
360
|
+
maxReplicas: 10
|
|
361
|
+
targetCPUUtilizationPercentage: 70
|
|
362
|
+
🔟 Documentation Boilerplate
|
|
363
|
+
10.1. README Section Template
|
|
364
|
+
## Feature: <Short Title>
|
|
365
|
+
|
|
366
|
+
**Purpose** – What problem does this feature solve?
|
|
367
|
+
**Stakeholders** – Primary users / consumers.
|
|
368
|
+
**Design Overview** – High‑level components and data flow (link to diagram).
|
|
369
|
+
**Endpoints** –
|
|
370
|
+
|
|
371
|
+
| Method | URL | Request Body | Response |
|
|
372
|
+
|-------|-----|--------------|----------|
|
|
373
|
+
| POST | `/v1/users` | `CreateUserRequest` | `{ "id": "...", "email": "..." }` |
|
|
374
|
+
| GET | `/v1/users/{id}` | — | `{ "id":"...", "name":"..." }` |
|
|
375
|
+
|
|
376
|
+
**Testing** – How to run the unit / integration tests.
|
|
377
|
+
**Deployment** – Helm values to bump, CI steps.
|
|
378
|
+
**Rollback** – Steps to revert to previous version.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Frontend Development Role
|
|
2
|
+
|
|
3
|
+
Senior frontend developers build accessible, performant, tested, and maintainable user interfaces.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This role guides frontend development across all frameworks and tools. It covers the complete lifecycle: component design, state management, testing, debugging, and monitoring.
|
|
8
|
+
|
|
9
|
+
## Topics
|
|
10
|
+
|
|
11
|
+
- **[Components](components/)** — Design reusable, composable components
|
|
12
|
+
- **[State Management](state-management/)** — Manage data predictably and efficiently
|
|
13
|
+
- **[Testing](testing/)** — Unit, integration, and e2e testing strategies
|
|
14
|
+
- **[Code Quality](code-quality/)** — Format, lint, and maintain clean code
|
|
15
|
+
- **[Performance](performance/)** — Measure, identify, and optimize bottlenecks
|
|
16
|
+
- **[Accessibility](accessibility/)** — Build inclusive, WCAG-compliant interfaces
|
|
17
|
+
- **[Debugging](debugging/)** — Debug systematically and efficiently
|
|
18
|
+
- **[Logging & Observability](logging-observability/)** — Instrument code and monitor production
|
|
19
|
+
- **[Examples](examples/)** - Larger frontend scenario templates and walkthroughs
|
|
20
|
+
|
|
21
|
+
## Senior Developer Standards
|
|
22
|
+
|
|
23
|
+
### Before Writing Code
|
|
24
|
+
- [ ] Understand problem and requirements
|
|
25
|
+
- [ ] Plan component structure
|
|
26
|
+
- [ ] Identify state needs
|
|
27
|
+
- [ ] Plan testing strategy
|
|
28
|
+
|
|
29
|
+
### While Writing Code
|
|
30
|
+
- [ ] Follow code quality standards
|
|
31
|
+
- [ ] Think about edge cases
|
|
32
|
+
- [ ] Consider accessibility
|
|
33
|
+
- [ ] Add meaningful logging
|
|
34
|
+
|
|
35
|
+
### After Writing Code
|
|
36
|
+
- [ ] Write unit tests
|
|
37
|
+
- [ ] Write integration tests
|
|
38
|
+
- [ ] Verify code quality (lint, format)
|
|
39
|
+
- [ ] Check accessibility
|
|
40
|
+
- [ ] Test in browser
|
|
41
|
+
- [ ] Verify performance
|
|
42
|
+
- [ ] Code review with team
|
|
43
|
+
|
|
44
|
+
### In Production
|
|
45
|
+
- [ ] Monitor errors and performance
|
|
46
|
+
- [ ] Act on observability data
|
|
47
|
+
- [ ] Debug issues systematically
|
|
48
|
+
- [ ] Share learnings with team
|
|
49
|
+
|
|
50
|
+
## Framework-Agnostic Approach
|
|
51
|
+
|
|
52
|
+
Guidance applies to React, Vue, Angular, Svelte, and vanilla JavaScript.
|
|
53
|
+
Framework-specific details should live in project context or a future dedicated
|
|
54
|
+
skill packet. Until then, keep this folder focused on framework-agnostic frontend
|
|
55
|
+
engineering practices.
|
|
56
|
+
|
|
57
|
+
## Success Criteria
|
|
58
|
+
|
|
59
|
+
You're a senior frontend developer when:
|
|
60
|
+
|
|
61
|
+
1. Components are testable, reusable, and performant
|
|
62
|
+
2. State is minimal, explicit, and predictable
|
|
63
|
+
3. Code is formatted, linted, and passes review
|
|
64
|
+
4. Tests cover behavior, not just implementation
|
|
65
|
+
5. Accessibility is built-in, not retrofitted
|
|
66
|
+
6. Performance is measured and optimized
|
|
67
|
+
7. Bugs are debugged systematically
|
|
68
|
+
8. Production is instrumented and monitored
|
|
69
|
+
9. You can onboard team members on these practices
|
|
70
|
+
10. You improve practices based on learnings
|
|
71
|
+
|
|
72
|
+
## Related Roles
|
|
73
|
+
|
|
74
|
+
- `design-architect/` — Component library, design systems
|
|
75
|
+
- `software-developer/` — Backend integration, API contracts
|
|
76
|
+
- `qa/` — E2E test strategy, quality gates
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Accessibility (A11y)
|
|
2
|
+
|
|
3
|
+
Senior frontend developers build accessible interfaces. Accessibility is not optional.
|
|
4
|
+
|
|
5
|
+
## Why Accessibility Matters
|
|
6
|
+
|
|
7
|
+
- 1 in 4 adults have disabilities
|
|
8
|
+
- Accessible design benefits everyone
|
|
9
|
+
- Legal requirement (WCAG, ADA)
|
|
10
|
+
- Better UX for all users
|
|
11
|
+
- Improves SEO
|
|
12
|
+
|
|
13
|
+
## WCAG 2.1 Levels
|
|
14
|
+
|
|
15
|
+
- **A** — basic accessibility
|
|
16
|
+
- **AA** — enhanced accessibility (industry standard)
|
|
17
|
+
- **AAA** — advanced accessibility (when feasible)
|
|
18
|
+
|
|
19
|
+
Target AA for most projects.
|
|
20
|
+
|
|
21
|
+
## Core Principles (POUR)
|
|
22
|
+
|
|
23
|
+
### Perceivable
|
|
24
|
+
- Content must be visible/perceivable
|
|
25
|
+
- Provide text alternatives for images
|
|
26
|
+
- Captions for audio/video
|
|
27
|
+
- Color not only way to convey info
|
|
28
|
+
|
|
29
|
+
### Operable
|
|
30
|
+
- Keyboard navigable (no mouse required)
|
|
31
|
+
- Enough time to read/interact
|
|
32
|
+
- No seizure-inducing content
|
|
33
|
+
- Skip to main content links
|
|
34
|
+
|
|
35
|
+
### Understandable
|
|
36
|
+
- Clear, plain language
|
|
37
|
+
- Consistent navigation
|
|
38
|
+
- Error prevention and messages
|
|
39
|
+
- Clear labels on forms
|
|
40
|
+
|
|
41
|
+
### Robust
|
|
42
|
+
- Valid HTML
|
|
43
|
+
- Proper semantic markup
|
|
44
|
+
- Compatible with assistive tech
|
|
45
|
+
|
|
46
|
+
## Implementation Practices
|
|
47
|
+
|
|
48
|
+
### Semantic HTML
|
|
49
|
+
- Use correct elements (`<button>` not `<div onclick>`)
|
|
50
|
+
- `<nav>`, `<main>`, `<article>`, `<aside>`
|
|
51
|
+
- `<h1>` - `<h6>` for headings (proper hierarchy)
|
|
52
|
+
- `<form>`, `<label>`, `<input>` properly associated
|
|
53
|
+
- `<table>` with `<thead>`, `<tbody>`, `<th>`
|
|
54
|
+
|
|
55
|
+
### ARIA (Accessible Rich Internet Applications)
|
|
56
|
+
- Enhance semantic HTML, not replace it
|
|
57
|
+
- Use `role` for non-semantic elements
|
|
58
|
+
- Use `aria-label` for icons/images
|
|
59
|
+
- Use `aria-hidden="true"` for decorative elements
|
|
60
|
+
- Use `aria-live` for dynamic content updates
|
|
61
|
+
|
|
62
|
+
### Keyboard Navigation
|
|
63
|
+
- Tab order logical and visible
|
|
64
|
+
- Focus indicators visible
|
|
65
|
+
- All interactive elements keyboard accessible
|
|
66
|
+
- Escape key closes modals/popovers
|
|
67
|
+
- Enter to submit forms, Space for buttons
|
|
68
|
+
|
|
69
|
+
### Color & Contrast
|
|
70
|
+
- Minimum 4.5:1 contrast for text
|
|
71
|
+
- Don't rely on color alone
|
|
72
|
+
- Test with contrast checkers
|
|
73
|
+
- Consider colorblind users
|
|
74
|
+
|
|
75
|
+
### Forms
|
|
76
|
+
- Label all inputs explicitly
|
|
77
|
+
- Group related inputs with `<fieldset>`
|
|
78
|
+
- Validation error messages clear
|
|
79
|
+
- Error states announced to screen readers
|
|
80
|
+
- Required fields marked and announced
|
|
81
|
+
|
|
82
|
+
### Images & Icons
|
|
83
|
+
- Descriptive alt text (describes image, not "image of")
|
|
84
|
+
- Decorative images: `alt=""`
|
|
85
|
+
- Icon-only buttons: `aria-label`
|
|
86
|
+
- SVGs: use `<title>` or `aria-label`
|
|
87
|
+
|
|
88
|
+
## Testing for Accessibility
|
|
89
|
+
|
|
90
|
+
### Automated Tools
|
|
91
|
+
- axe DevTools (browser extension)
|
|
92
|
+
- WAVE (WebAIM)
|
|
93
|
+
- Lighthouse accessibility audit
|
|
94
|
+
- ESLint plugins (jsx-a11y)
|
|
95
|
+
|
|
96
|
+
### Manual Testing
|
|
97
|
+
- Navigate with keyboard only
|
|
98
|
+
- Test with screen reader (NVDA, JAWS, VoiceOver)
|
|
99
|
+
- Zoom to 200% (responsive, readable)
|
|
100
|
+
- Check with colorblind simulator
|
|
101
|
+
- Test with browser zoom
|
|
102
|
+
|
|
103
|
+
### User Testing
|
|
104
|
+
- Include users with disabilities
|
|
105
|
+
- Real accessibility feedback
|
|
106
|
+
|
|
107
|
+
## Anti-Patterns
|
|
108
|
+
|
|
109
|
+
- Using `<div>` for buttons/links
|
|
110
|
+
- Decorative images with alt text
|
|
111
|
+
- Relying on color alone
|
|
112
|
+
- Focus indicators removed/hidden
|
|
113
|
+
- Invalid HTML (breaks screen readers)
|
|
114
|
+
- Inaccessible modals (focus not trapped)
|
|
115
|
+
- No alt text for icons
|
|
116
|
+
- Unmeaningful aria labels
|
|
117
|
+
- Skip keyboard navigation
|
|
118
|
+
|
|
119
|
+
## Accessibility Checklist
|
|
120
|
+
|
|
121
|
+
Before shipping:
|
|
122
|
+
- [ ] Semantic HTML used
|
|
123
|
+
- [ ] Color contrast >= 4.5:1
|
|
124
|
+
- [ ] Keyboard navigable
|
|
125
|
+
- [ ] Alt text on images
|
|
126
|
+
- [ ] Forms properly labeled
|
|
127
|
+
- [ ] Focus indicators visible
|
|
128
|
+
- [ ] Screen reader tested
|
|
129
|
+
- [ ] axe audit passes
|
|
130
|
+
- [ ] WCAG AA compliant
|
|
131
|
+
|
|
132
|
+
## Related Guidance
|
|
133
|
+
|
|
134
|
+
- `/code-quality` — semantic HTML standards
|
|
135
|
+
- `/testing` — accessibility testing
|
|
136
|
+
- `/components` — accessible component patterns
|