@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,32 @@
|
|
|
1
|
+
# Directory Purpose
|
|
2
|
+
|
|
3
|
+
The `design` directory provides a comprehensive guide to User Interface (UI) and User Experience (UX) design, covering visual foundations, psychology, and platform-specific guidelines.
|
|
4
|
+
|
|
5
|
+
# Key Concepts
|
|
6
|
+
|
|
7
|
+
- Visual and interaction design principles
|
|
8
|
+
- Platform-specific UX guidelines
|
|
9
|
+
- Human psychology and cognitive load
|
|
10
|
+
- Reusable UI patterns and flows
|
|
11
|
+
|
|
12
|
+
# File Map
|
|
13
|
+
|
|
14
|
+
- `PROGRESS.md` — tracks completion of design content
|
|
15
|
+
- `index.md` — semantic map of the design directory
|
|
16
|
+
|
|
17
|
+
# Subdirectories
|
|
18
|
+
|
|
19
|
+
- `/disciplines` — research, systems, responsive design, and interaction
|
|
20
|
+
- `/foundations` — typography, color, spacing, a11y, and hierarchy
|
|
21
|
+
- `/patterns` — auth, navigation, forms, and onboarding flows
|
|
22
|
+
- `/platforms` — iOS, Android, desktop, web, and tablet guidelines
|
|
23
|
+
- `/psychology` — mental models, cognitive load, and error psychology
|
|
24
|
+
- `/tooling` — design tool integrations (MCP servers, CLIs, automation)
|
|
25
|
+
|
|
26
|
+
# Reading Guide
|
|
27
|
+
|
|
28
|
+
If starting a new UI from scratch → read `/foundations`
|
|
29
|
+
If designing for a specific device → read `/platforms`
|
|
30
|
+
If mapping out user flows → read `/patterns`
|
|
31
|
+
If optimizing usability → read `/psychology`
|
|
32
|
+
If integrating AI agents with design tools → read `/tooling`
|
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
# Authentication Flows — Design Pattern Module
|
|
2
|
+
|
|
3
|
+
> **Module Type:** Pattern
|
|
4
|
+
> **Domain:** UI/UX Design Systems
|
|
5
|
+
> **Last Updated:** 2026-03-07
|
|
6
|
+
> **Standards:** Apple HIG, Material Design 3, NIST SP 800-63B-4, WCAG 2.2, FIDO Alliance Design Guidelines
|
|
7
|
+
> **Confidence:** High — synthesized from official platform guidelines, peer-reviewed usability research, and industry case studies
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Quick Reference Checklist
|
|
12
|
+
|
|
13
|
+
### Forms & Input
|
|
14
|
+
- [ ] Every input has a visible `<label>` element (not placeholder-only)
|
|
15
|
+
- [ ] `autocomplete` attributes set (`username`, `current-password`, `new-password`, `one-time-code`)
|
|
16
|
+
- [ ] Password visibility toggle present on all password fields
|
|
17
|
+
- [ ] Password manager autofill not blocked (no `readonly`, no paste-prevention)
|
|
18
|
+
- [ ] Email field uses `type="email"` with `inputmode="email"`
|
|
19
|
+
- [ ] OTP field uses `inputmode="numeric"` with `autocomplete="one-time-code"`
|
|
20
|
+
|
|
21
|
+
### Error Handling
|
|
22
|
+
- [ ] Errors appear inline next to the relevant field
|
|
23
|
+
- [ ] Error messages use `aria-live="polite"` for screen reader announcement
|
|
24
|
+
- [ ] User input preserved after failed submission (never clear typed email/password)
|
|
25
|
+
- [ ] Generic error for wrong credentials ("Invalid email or password") — never reveal which field is wrong
|
|
26
|
+
- [ ] Focus moves to first error or error summary on submission failure
|
|
27
|
+
|
|
28
|
+
### Security & Standards
|
|
29
|
+
- [ ] Minimum password length: 15 characters (NIST 800-63B-4 single-factor), 8 characters (multi-factor)
|
|
30
|
+
- [ ] No composition rules (no forced uppercase/lowercase/special character requirements)
|
|
31
|
+
- [ ] No periodic password expiration unless compromise detected
|
|
32
|
+
- [ ] Passwords checked against breach/common-password lists
|
|
33
|
+
- [ ] Rate limiting on login attempts with progressive delays
|
|
34
|
+
- [ ] Session timeout with advance warning and extension option
|
|
35
|
+
|
|
36
|
+
### Accessibility
|
|
37
|
+
- [ ] Entire flow navigable by keyboard alone (Tab, Enter, Escape)
|
|
38
|
+
- [ ] CAPTCHA has an accessible alternative (audio, proof-of-work, or honeypot)
|
|
39
|
+
- [ ] Time limits for verification codes are generous (minimum 10 minutes)
|
|
40
|
+
- [ ] Color is not the only indicator of password strength or error state
|
|
41
|
+
- [ ] Touch targets minimum 44x44pt (iOS) / 48x48dp (Android)
|
|
42
|
+
|
|
43
|
+
### Cross-Platform
|
|
44
|
+
- [ ] Sign in with Apple offered when third-party login is present (App Store guideline 4.8)
|
|
45
|
+
- [ ] Passkey support with Conditional UI / autofill integration
|
|
46
|
+
- [ ] Biometric opt-in prompt after first successful traditional login
|
|
47
|
+
- [ ] Deep link handling for magic links works across browsers and apps
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 1. Pattern Anatomy
|
|
52
|
+
|
|
53
|
+
### 1.1 Sign Up (Registration)
|
|
54
|
+
|
|
55
|
+
**Flow:** `[Landing] -> [Registration Form] -> [Email Verification] -> [Onboarding] -> [Authenticated State]`
|
|
56
|
+
|
|
57
|
+
**Key principles:**
|
|
58
|
+
- Minimize fields. Every additional field reduces completion by ~10% (Baymard Institute). Collect only what is essential; defer everything else to onboarding.
|
|
59
|
+
- Show password requirements upfront as a real-time checklist, not after failure.
|
|
60
|
+
- Never require password confirmation fields. Provide a visibility toggle instead.
|
|
61
|
+
- Pre-fill known data (e.g., email from invitation links).
|
|
62
|
+
|
|
63
|
+
**NIST 800-63B-4 password requirements:**
|
|
64
|
+
- Minimum 15 characters (sole authenticator) or 8 characters (with second factor)
|
|
65
|
+
- Maximum of at least 64 characters must be supported
|
|
66
|
+
- No composition rules (no forced uppercase/special character mix)
|
|
67
|
+
- No periodic expiration unless breach detected
|
|
68
|
+
- Must check against known-breach lists and common passwords
|
|
69
|
+
- Unicode characters including spaces and emojis must be accepted
|
|
70
|
+
|
|
71
|
+
### 1.2 Sign In (Login)
|
|
72
|
+
|
|
73
|
+
**Flow:** `[Sign-in Form] -> [Credential Validation] -> [MFA Challenge (if enabled)] -> [Authenticated State]`
|
|
74
|
+
|
|
75
|
+
**Key principles:**
|
|
76
|
+
- Single-page login (email + password on one screen) is the default best practice. It works with password managers, is faster, and reduces cognitive load.
|
|
77
|
+
- Identifier-first (two-page) is justified only when routing to different backends (SSO detection, federated identity). If used, support autofill across both pages.
|
|
78
|
+
- "Remember me" should default to ON for consumer apps. Default OFF only for banking, healthcare, or shared-device contexts.
|
|
79
|
+
- Position "Forgot password?" adjacent to the password field, not at the bottom of the form.
|
|
80
|
+
|
|
81
|
+
### 1.3 Password Reset
|
|
82
|
+
|
|
83
|
+
**Flow:** `[Forgot Password] -> [Enter Email] -> [Confirmation] -> [Email with Reset Link] -> [New Password Form] -> [Auto-login]`
|
|
84
|
+
|
|
85
|
+
- Pre-fill email if the user already typed it on the login form.
|
|
86
|
+
- Confirmation screen: "If an account exists with this email, we've sent a reset link" — never confirm/deny account existence.
|
|
87
|
+
- Reset links expire after 30-60 minutes, single-use.
|
|
88
|
+
- After reset, auto-sign the user in. Invalidate all other sessions.
|
|
89
|
+
|
|
90
|
+
### 1.4 Email Verification
|
|
91
|
+
|
|
92
|
+
**Flow:** `[Registration Complete] -> [Verification Pending] -> [User Opens Email] -> [Click Link] -> [Verified State]`
|
|
93
|
+
|
|
94
|
+
- Allow limited app access before verification (view-only mode). Blocking all access increases drop-off.
|
|
95
|
+
- Provide "Resend verification" button with 60-second cooldown.
|
|
96
|
+
- Handle cross-device link opening: show success message with "Return to app" button.
|
|
97
|
+
- Verification links expire after 24-72 hours.
|
|
98
|
+
|
|
99
|
+
### 1.5 Social Login (OAuth)
|
|
100
|
+
|
|
101
|
+
**Flow:** `[Login Screen] -> [Select Provider] -> [Redirect to Provider] -> [Authorize] -> [Redirect Back] -> [Authenticated State]`
|
|
102
|
+
|
|
103
|
+
- Use official branded buttons following each provider's strict brand guidelines.
|
|
104
|
+
- Display social options above email/password form with a visual divider ("or").
|
|
105
|
+
- Limit to 2-4 providers to avoid decision paralysis.
|
|
106
|
+
- Handle account collision: when social login email matches an existing account, prompt the user to link (see Section 3.4).
|
|
107
|
+
- Request minimum scopes (email + basic profile only).
|
|
108
|
+
|
|
109
|
+
**App Store Guideline 4.8:** If any third-party social login is offered, you must also offer an option meeting Apple's privacy criteria (limits data to name/email, allows email privacy, no ad tracking). Sign in with Apple satisfies this but is no longer the only acceptable option.
|
|
110
|
+
|
|
111
|
+
### 1.6 Passwordless — Magic Links
|
|
112
|
+
|
|
113
|
+
**Flow:** `[Enter Email] -> [Send Link] -> ["Check your email"] -> [Click Link] -> [Authenticated State]`
|
|
114
|
+
|
|
115
|
+
- Links expire in 10-15 minutes, single-use.
|
|
116
|
+
- Handle cross-device scenarios: present a confirmation button rather than auto-authenticating when opened in a different browser.
|
|
117
|
+
- Offer a code-based fallback (6-digit OTP alongside the magic link) for email clients that mangle links.
|
|
118
|
+
- Calendly reported registration completion increasing from 43% to 71% after switching to magic links, with mobile users converting 3x better.
|
|
119
|
+
|
|
120
|
+
### 1.7 Passwordless — Passkeys (WebAuthn)
|
|
121
|
+
|
|
122
|
+
**Conditional UI flow:** `[Page Loads] -> [Browser Shows Passkey in Autofill] -> [User Selects] -> [Biometric/PIN] -> [Authenticated]`
|
|
123
|
+
|
|
124
|
+
**FIDO Alliance Design Guidelines:**
|
|
125
|
+
- Use identifier-first approach: user enters email, system checks for registered passkey.
|
|
126
|
+
- Implement Conditional UI (autofill integration) — this is the highest-conversion pattern.
|
|
127
|
+
- Do NOT rely on a separate "Sign in with Passkey" button alone — research shows low adoption and confusion. Integrate into the existing login flow.
|
|
128
|
+
- Use the canonical FIDO Alliance passkey icon consistently.
|
|
129
|
+
- Offer passkey creation after successful sign-up, not during. Frame as convenience: "Sign in faster next time with your fingerprint or face."
|
|
130
|
+
- Always provide a fallback (password, magic link, OTP).
|
|
131
|
+
|
|
132
|
+
### 1.8 Multi-Factor Authentication (MFA)
|
|
133
|
+
|
|
134
|
+
**TOTP Setup:** `[Settings] -> [Enable 2FA] -> [QR Code + Manual Key] -> [Scan] -> [Verify Code] -> [Recovery Codes] -> [Active]`
|
|
135
|
+
**TOTP Login:** `[Password OK] -> [Enter 6-Digit Code] -> [Authenticated]`
|
|
136
|
+
|
|
137
|
+
- Show both QR code and manual text key. After setup, show 8-10 single-use recovery codes with download/copy option.
|
|
138
|
+
- Use `inputmode="numeric"` and `autocomplete="one-time-code"` on OTP inputs.
|
|
139
|
+
- Accept codes from adjacent time windows (current +-1 period) for clock skew.
|
|
140
|
+
|
|
141
|
+
**SMS OTP:** NIST 800-63B-4 classifies SMS as a "restricted" authenticator — acceptable but discouraged for high-value scenarios due to SIM-swap vulnerability. Show last 4 digits of phone number. Provide "Resend" with 60-second cooldown.
|
|
142
|
+
|
|
143
|
+
**Push Notification:** Include context in the push (IP, location, device). Implement number matching to prevent MFA fatigue/prompt-bombing. Always provide TOTP or recovery code fallback.
|
|
144
|
+
|
|
145
|
+
### 1.9 Biometric Authentication
|
|
146
|
+
|
|
147
|
+
- Always use the system-provided biometric prompt (Face ID sheet, BiometricPrompt bottom sheet) — never custom modals. System UI provides instant trust.
|
|
148
|
+
- Biometric should be opt-in, offered after first successful traditional login.
|
|
149
|
+
- Always provide fallback: PIN, password, or pattern.
|
|
150
|
+
- Biometric data never leaves the device; app receives only pass/fail from OS secure hardware.
|
|
151
|
+
- Average biometric unlock: 0.5 seconds vs. 6-12 seconds for password entry.
|
|
152
|
+
|
|
153
|
+
### 1.10 Single Sign-On (SSO)
|
|
154
|
+
|
|
155
|
+
**Flow:** `[Enter Email] -> [SSO Detected via Domain] -> [Redirect to IdP] -> [Authenticate] -> [SAML/OIDC Assertion] -> [Redirect Back] -> [Authenticated]`
|
|
156
|
+
|
|
157
|
+
- Use email domain detection to auto-route users to the correct IdP.
|
|
158
|
+
- Hide the password field for SSO-enforced domains.
|
|
159
|
+
- Support JIT (Just-In-Time) provisioning: auto-create accounts for users who authenticate via SSO but lack an existing account.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 2. Best-in-Class Examples
|
|
164
|
+
|
|
165
|
+
### 2.1 Apple — Privacy as a Feature
|
|
166
|
+
Sign in with Apple provides email relay ("Hide My Email"), generating a unique random forwarding address. Face ID/Touch ID is the default for returning users. Passkeys sync across devices via iCloud Keychain. Button design is strictly standardized (SF Pro, specific sizing/colors).
|
|
167
|
+
|
|
168
|
+
### 2.2 Google — Adaptive Authentication
|
|
169
|
+
Identifier-first flow justified by routing needs (Google accounts, workspace SSO, passkeys). One Tap sign-in provides a low-friction overlay on partner sites. Among the first to deploy passkeys at scale with Conditional UI. Security challenges adapt dynamically — push, TOTP, SMS, security key, or number matching — selecting the lowest-friction, highest-security method available.
|
|
170
|
+
|
|
171
|
+
### 2.3 Stripe — Transparent Session Management
|
|
172
|
+
Clean single-page login. Clear "Remember this device" explanation. Dashboard shows all active sessions with device info, location, and revocation capability. API keys use color-coded test/live distinction. MFA setup is streamlined with mandatory recovery code download.
|
|
173
|
+
|
|
174
|
+
### 2.4 Linear — Context-Adaptive Auth
|
|
175
|
+
Email-first flow routes to password, magic link, Google SSO, or SAML based on workspace config. Magic link is a first-class option (not a fallback), matching their email-adjacent workflow. Workspace detection auto-routes after email entry. Same login page serves individuals, small teams, and enterprise SSO.
|
|
176
|
+
|
|
177
|
+
### 2.5 1Password — Recovery as First-Class UX
|
|
178
|
+
The "Secret Key" (128-bit) supplements the master password, so neither alone can access the vault. The "Emergency Kit" PDF is designed for physical storage — a proactive answer to "what if I lose everything." Biometric unlock for returning sessions. Acts as both a passkey consumer and a passkey manager.
|
|
179
|
+
|
|
180
|
+
### 2.6 Slack — Multi-Tenancy Done Right
|
|
181
|
+
Workspace-first flow matches the mental model of "signing into my team." Magic link is the default for many users. Multi-workspace simultaneous sessions with easy switching. Admins can enforce SSO and disable password login, with clear UI messaging.
|
|
182
|
+
|
|
183
|
+
### 2.7 GitHub — Mandatory Security Without Revolt
|
|
184
|
+
2023-2024 mandatory MFA rollout succeeded through: advance notice, multiple setup reminders, grace period, and support for TOTP, SMS, security keys, and GitHub Mobile push. Clear passkey upgrade prompts. Device verification with email codes and device info. Fine-grained API token permissions with visual selector.
|
|
185
|
+
|
|
186
|
+
### 2.8 Vercel — Passwordless-First
|
|
187
|
+
No password creation during sign-up — email verification code or magic link by default. Social login (GitHub, GitLab, Bitbucket) matches their developer user base. Proves passwordless-first is viable for a production platform.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## 3. User Flow Mapping
|
|
192
|
+
|
|
193
|
+
### 3.1 Happy Paths
|
|
194
|
+
|
|
195
|
+
**Email/Password Sign-Up:** User clicks "Sign up" -> enters email -> creates password (sees real-time strength meter) -> agrees to terms -> submits -> checks email -> clicks verification link -> sees onboarding.
|
|
196
|
+
|
|
197
|
+
**Social Login:** User clicks "Continue with Google" -> redirected to consent screen -> selects account -> grants permissions -> redirected back -> account created -> sees onboarding.
|
|
198
|
+
|
|
199
|
+
**Magic Link:** User enters email -> clicks "Send magic link" -> opens email -> clicks link -> token validated -> dashboard.
|
|
200
|
+
|
|
201
|
+
**Passkey (Conditional UI):** User taps email field -> browser shows passkey in autofill -> selects passkey -> biometric confirmation -> dashboard.
|
|
202
|
+
|
|
203
|
+
**MFA (TOTP):** User enters email/password -> credentials valid -> enters 6-digit code from authenticator -> dashboard.
|
|
204
|
+
|
|
205
|
+
### 3.2 Error Flows
|
|
206
|
+
|
|
207
|
+
**Wrong Password:** Error inline: "Invalid email or password." Email preserved, password cleared, cursor in password field. After 5 failures: progressive delay (2s, 4s, 8s). After 10: lockout (15-30 min) with reset password link.
|
|
208
|
+
|
|
209
|
+
**Account Locked:** Form disabled with clear message and timer. "Reset password" link prominent. Email notification sent to account owner.
|
|
210
|
+
|
|
211
|
+
**Expired Link:** "This link has expired." Provide "Send a new link" button with pre-filled email.
|
|
212
|
+
|
|
213
|
+
**Unverified Email:** Credentials accepted but session restricted. Banner with "Resend verification" button. Limited access granted.
|
|
214
|
+
|
|
215
|
+
**Invalid MFA Code:** "Invalid code. Please try again." After 3 failures: suggest recovery code. After 5: temporary MFA lockout. "Lost access?" link always visible.
|
|
216
|
+
|
|
217
|
+
### 3.3 Recovery Flows
|
|
218
|
+
|
|
219
|
+
**Forgot Password:** Click "Forgot password?" -> email pre-filled from login form -> "If an account exists, we've sent a link" -> click reset link (30-60 min expiry) -> create new password -> auto-login -> all other sessions invalidated -> confirmation email sent.
|
|
220
|
+
|
|
221
|
+
**Lost 2FA Device:** Option 1: Enter one of the saved recovery codes (single-use). Option 2: SMS fallback if configured. Option 3: Contact support with identity verification. All options lead to re-authentication and prompt to set up new 2FA.
|
|
222
|
+
|
|
223
|
+
### 3.4 Edge Cases
|
|
224
|
+
|
|
225
|
+
**Account Collision (Same Email):** User signs in with Google, email matches existing password account -> prompt: "An account exists. Sign in with your password to link." -> accounts linked, both methods now work.
|
|
226
|
+
|
|
227
|
+
**Session Expiry:** API returns 401 -> try silent refresh token -> if expired: modal "Session expired, please sign in" -> preserve current URL -> after re-auth, return to exact page.
|
|
228
|
+
|
|
229
|
+
**SSO User Attempts Password Login:** Email entered -> SSO-enforced domain detected -> password field hidden -> "Your organization uses SSO" -> redirect to IdP.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 4. Micro-Interactions
|
|
234
|
+
|
|
235
|
+
### 4.1 Password Visibility Toggle
|
|
236
|
+
Closed-eye/open-eye icon inside the password field, right-aligned. Toggles field between `password` and `text` types. Reverts to hidden on submission. Must have `aria-label` that updates with state. Subtle icon transition (150-200ms ease-in-out).
|
|
237
|
+
|
|
238
|
+
### 4.2 Password Strength Meter
|
|
239
|
+
Four-segment bar: weak (red), fair (orange), good (yellow-green), strong (green). Segments fill with smooth width transition (200-300ms ease-out). Text label states current strength. Complementary checklist with met/unmet indicators. Use `role="meter"` with `aria-valuenow/valuetext`. Color must not be the sole indicator.
|
|
240
|
+
|
|
241
|
+
**Calculation:** Prioritize length (most important per NIST), breach-list presence, and entropy estimation. Avoid simplistic "must have uppercase" rules.
|
|
242
|
+
|
|
243
|
+
### 4.3 Loading State During Auth
|
|
244
|
+
Disable submit button immediately on click. Replace text with spinner + "Signing in..." (button width stays fixed). If >3 seconds, add reassurance: "Verifying credentials..." Never show a full-page loader — keep the form visible.
|
|
245
|
+
|
|
246
|
+
### 4.4 Biometric Prompt Animation
|
|
247
|
+
Always use system-provided prompts. iOS Face ID: pulsing glow during scan, checkmark + success haptic on pass, horizontal shake + error haptic on fail. Android BiometricPrompt: bottom sheet with pulsing icon, checkmark morph on success, red flash + error message on fail. Never create custom biometric UIs.
|
|
248
|
+
|
|
249
|
+
### 4.5 Success Redirect
|
|
250
|
+
Brief success indicator (green checkmark, 400-600ms) before redirect. For social login returns: "Welcome back, [Name]" with avatar. Smooth page transition (fade/slide). Redirect to the pre-auth deep link, not generic dashboard.
|
|
251
|
+
|
|
252
|
+
### 4.6 OTP Code Input
|
|
253
|
+
Six individual character boxes with auto-advancing focus. Paste fills all boxes simultaneously. Auto-submit after all digits entered (300ms delay for visual confirmation). Each box highlights on focus, briefly scales on input (1.05x, 100ms). Use `aria-label="Digit N of 6"` per box.
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## 5. Anti-Patterns
|
|
258
|
+
|
|
259
|
+
### 5.1 Separate Username/Password Pages Without Justification
|
|
260
|
+
Breaks password manager autofill and doubles perceived effort. Justified only for SSO routing or passkey detection. **Fix:** Default to single-page login.
|
|
261
|
+
|
|
262
|
+
### 5.2 Password Rules Displayed Only After Failure
|
|
263
|
+
Users create a password, submit, then learn it fails rules. **Fix:** Show requirements upfront as a real-time checklist. Better: follow NIST and eliminate composition rules entirely.
|
|
264
|
+
|
|
265
|
+
### 5.3 "Remember Me" Defaulting to Off
|
|
266
|
+
Most users expect persistence on personal devices. **Fix:** Default ON for consumer apps. OFF only for banking/healthcare/shared devices.
|
|
267
|
+
|
|
268
|
+
### 5.4 Email Case Sensitivity
|
|
269
|
+
Treating "User@Example.com" and "user@example.com" as different accounts. **Fix:** Normalize to lowercase before storage and comparison.
|
|
270
|
+
|
|
271
|
+
### 5.5 Forced Password Change Without Reason
|
|
272
|
+
Periodic rotation leads to weaker passwords (Password1, Password2...). NIST 800-63B-4 explicitly recommends against it. **Fix:** Require changes only on evidence of compromise.
|
|
273
|
+
|
|
274
|
+
### 5.6 CAPTCHA Before Any Auth Attempt
|
|
275
|
+
Adds friction for 100% of users to stop a rare threat. **Fix:** Use invisible bot detection (Cloudflare Turnstile, proof-of-work). Escalate to visible challenge only after suspicious behavior.
|
|
276
|
+
|
|
277
|
+
### 5.7 Hiding Social Login Options
|
|
278
|
+
Placing social buttons behind "More options" or below the fold. **Fix:** Display prominently above email/password, separated by a clear divider.
|
|
279
|
+
|
|
280
|
+
### 5.8 Blocking Password Paste
|
|
281
|
+
Harms security by preventing password manager usage. The UK NCSC explicitly recommends against it. **Fix:** Always allow paste on all input fields.
|
|
282
|
+
|
|
283
|
+
### 5.9 Clearing Form Fields on Error
|
|
284
|
+
Clearing both email and password after failed login. **Fix:** Preserve email, clear only password, focus cursor in password field.
|
|
285
|
+
|
|
286
|
+
### 5.10 Error Messages That Leak Information
|
|
287
|
+
"No account with this email" enables account enumeration. **Fix:** Use generic: "Invalid email or password." For resets: "If an account exists, we've sent a link."
|
|
288
|
+
|
|
289
|
+
### 5.11 No Loading Feedback on Submit
|
|
290
|
+
User clicks "Sign in," nothing changes for 1-3 seconds, clicks again. **Fix:** Immediately disable button, show spinner, debounce submissions.
|
|
291
|
+
|
|
292
|
+
### 5.12 Requiring Account Creation for One-Time Actions
|
|
293
|
+
Forcing sign-up before a purchase or download. **Fix:** Offer guest checkout. Suggest account creation after the action.
|
|
294
|
+
|
|
295
|
+
### 5.13 Logout Burying
|
|
296
|
+
Hiding sign-out deep in menus. **Fix:** Place in user avatar menu or profile dropdown, accessible within 2 interactions from any screen.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 6. Accessibility
|
|
301
|
+
|
|
302
|
+
### 6.1 Form Label Associations (WCAG 1.3.1, 3.3.2)
|
|
303
|
+
Every input needs a visible `<label>` with `for` matching the input's `id`. Never rely on placeholder as the sole label. Group related fields with `<fieldset>` and `<legend>`.
|
|
304
|
+
|
|
305
|
+
```html
|
|
306
|
+
<!-- Correct -->
|
|
307
|
+
<label for="email">Email address</label>
|
|
308
|
+
<input type="email" id="email" autocomplete="username">
|
|
309
|
+
|
|
310
|
+
<!-- Incorrect -->
|
|
311
|
+
<input type="email" placeholder="Email address">
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### 6.2 Error Announcements (WCAG 3.3.1, 3.3.3, 4.1.3)
|
|
315
|
+
Associate errors with fields via `aria-describedby`. Use `aria-live="polite"` on error containers. Validate on blur or submit — never on every keystroke (disrupts screen readers). On submission failure, move focus to error summary or first invalid field. Errors must be descriptive: "Password must be at least 15 characters" not "Invalid."
|
|
316
|
+
|
|
317
|
+
```html
|
|
318
|
+
<input type="password" id="password" aria-describedby="pw-error" aria-invalid="true">
|
|
319
|
+
<div id="pw-error" role="alert" aria-live="polite">
|
|
320
|
+
Password must be at least 15 characters. Currently 8 characters.
|
|
321
|
+
</div>
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### 6.3 Keyboard Navigation (WCAG 2.1.1, 2.4.3)
|
|
325
|
+
Entire flow completable via keyboard. Focus order follows visual order. Focus indicators: minimum 2px outline, 3:1 contrast. Modals trap focus and return it on close. Escape closes modals.
|
|
326
|
+
|
|
327
|
+
### 6.4 CAPTCHA Alternatives (WCAG 3.3.8)
|
|
328
|
+
WCAG 2.2 SC 3.3.8 (Level AA): if auth requires a cognitive function test, an alternative must exist.
|
|
329
|
+
|
|
330
|
+
| Method | Accessibility | Friction | Protection |
|
|
331
|
+
|--------|--------------|----------|------------|
|
|
332
|
+
| Proof-of-work (Turnstile, Friendly Captcha) | Excellent | None | High |
|
|
333
|
+
| Honeypot fields | Good (can false-positive with screen readers) | None | Moderate |
|
|
334
|
+
| Rate limiting + behavioral analysis | Excellent | None | Moderate-High |
|
|
335
|
+
| Image/Audio CAPTCHA | Poor | High | Moderate |
|
|
336
|
+
|
|
337
|
+
**Recommendation:** Proof-of-work or behavioral analysis as primary. Never rely on image CAPTCHA alone.
|
|
338
|
+
|
|
339
|
+
### 6.5 Time Limits (WCAG 2.2.1)
|
|
340
|
+
Minimum 10 minutes for OTP codes, 30+ minutes for email links. Warn about limits before starting. For TOTP, accept 3-code window (previous + current + next).
|
|
341
|
+
|
|
342
|
+
### 6.6 Screen Reader MFA Considerations
|
|
343
|
+
OTP boxes: `aria-label="Digit 1 of 6"` through `"Digit 6 of 6"`. QR codes: provide manual entry key as text alternative. Push MFA: provide TOTP/recovery code fallback. Biometric: system prompts are accessible by default.
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## 7. Cross-Platform Adaptation
|
|
348
|
+
|
|
349
|
+
### 7.1 iOS
|
|
350
|
+
- **Sign in with Apple:** Required when third-party social login offered (Guideline 4.8). Must have equal or greater prominence. Supports "Hide My Email" relay.
|
|
351
|
+
- **Face ID / Touch ID:** Use LocalAuthentication framework. Include `NSFaceIDUsageDescription` in Info.plist. Always provide passcode fallback. Prompt opt-in after first password login.
|
|
352
|
+
- **Passkeys:** Synced via iCloud Keychain. Use `ASAuthorizationController`. Conditional UI supported in Safari/WKWebView. Cross-device via QR scan.
|
|
353
|
+
- **Keychain:** Set `autocomplete` attributes correctly. Support Associated Domains (`webcredentials`) for app/website credential sharing.
|
|
354
|
+
|
|
355
|
+
### 7.2 Android
|
|
356
|
+
- **Google Sign-In:** Use Credential Manager API (replaces legacy SDK). One Tap for returning users. Unified API for passkeys and passwords.
|
|
357
|
+
- **Biometric:** Use `BiometricPrompt` (Android 9+), not deprecated `FingerprintManager`. System bottom sheet abstracts sensor type. Set `setAllowedAuthenticators()` for biometric strength. Always include "Use password/PIN" fallback.
|
|
358
|
+
- **Passkeys:** Managed via Credential Manager API. Synced via Google Password Manager. Cross-device via Bluetooth proximity + QR. Conditional UI in Chrome/WebView.
|
|
359
|
+
- **Autofill:** Use `android:autofillHints` — `AUTOFILL_HINT_USERNAME`, `AUTOFILL_HINT_PASSWORD`, `AUTOFILL_HINT_SMS_OTP`. Works with third-party managers.
|
|
360
|
+
|
|
361
|
+
### 7.3 Web
|
|
362
|
+
- **Passkeys/WebAuthn:** `navigator.credentials.create()`/`.get()`. Conditional UI via `mediation: "conditional"`. Feature-detect: `PublicKeyCredential.isConditionalMediationAvailable`. WebAuthn Level 3 (W3C, January 2025) adds hybrid transport support.
|
|
363
|
+
- **Social Login Buttons:** Follow each provider's brand guidelines. Popup-based OAuth for desktop, redirect for mobile web. Handle popup-blocked with redirect fallback.
|
|
364
|
+
- **Password Managers:** Use `autocomplete="username"`, `current-password`, `new-password`. Never use `autocomplete="off"`. Use standard `<form>` and `<input>` elements.
|
|
365
|
+
- **Sessions:** Secure, HttpOnly, SameSite cookies. Refresh token rotation. Timeout warning modal: "Session expires in 2 min. [Extend] [Sign Out]." Re-auth for sensitive actions even within active sessions.
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## 8. Decision Tree
|
|
370
|
+
|
|
371
|
+
### 8.1 Auth Method by App Type
|
|
372
|
+
|
|
373
|
+
| App Type | Primary Auth | Add-On | MFA Policy | Session Length |
|
|
374
|
+
|----------|-------------|--------|------------|---------------|
|
|
375
|
+
| Consumer (social, e-commerce) | Social Login + Email/Password | Passkeys, Magic Links | Optional (sensitive actions only) | 30 days |
|
|
376
|
+
| B2B SaaS | Email/Password + SSO | Magic Links, Passkeys | Required for admins | 7-14 days idle |
|
|
377
|
+
| Enterprise / Internal | SSO (SAML/OIDC) only | Passkeys | Required all users (TOTP/keys) | 4-8 hours absolute |
|
|
378
|
+
| Financial / Healthcare | Email/Password + mandatory MFA | Biometric (mobile) | Required (avoid SMS) | 15-30 min idle |
|
|
379
|
+
| Developer Platform | Email/Password + Social (GitHub) | Passkeys, Magic Links | Required (TOTP + keys) | 14 days |
|
|
380
|
+
|
|
381
|
+
### 8.2 When to Require MFA
|
|
382
|
+
|
|
383
|
+
**Require:** Admin/elevated privileges, financial data, health records/PII, security settings modification, API key access, regulatory mandate (SOC 2, HIPAA, PCI DSS), user-enabled, org policy.
|
|
384
|
+
|
|
385
|
+
**Recommend (don't require):** Consumer apps with account value, collaborative tools, apps storing sensitive user data, developer platforms.
|
|
386
|
+
|
|
387
|
+
**Skip:** Anonymous/guest access, low-value accounts, read-only content consumption, trusted devices with biometric re-auth.
|
|
388
|
+
|
|
389
|
+
### 8.3 Passwordless vs. Traditional
|
|
390
|
+
|
|
391
|
+
**Favor passwordless when:** Users are in email-heavy workflows, technically savvy, app is used infrequently (passwords forgotten between sessions), mobile-first audience, you want to eliminate password-related support tickets (40-50% of helpdesk volume).
|
|
392
|
+
|
|
393
|
+
**Favor traditional when:** Low-connectivity environments, users expect it (enterprise norms), offline access needed, user base includes demographics unfamiliar with passwordless.
|
|
394
|
+
|
|
395
|
+
**Best approach:** Offer both. Default to the highest-completion method for your user base. A/B test. Migrate gradually toward passwordless with upgrade prompts.
|
|
396
|
+
|
|
397
|
+
### 8.4 Passkey Readiness
|
|
398
|
+
|
|
399
|
+
Prerequisites: server supports WebAuthn (FIDO2), user base on supported platforms (iOS 16+, Android 9+, Windows 10+), fallback auth method exists, sign-in supports Conditional UI, passkey enrollment UX designed, cross-device flows tested.
|
|
400
|
+
|
|
401
|
+
All met: implement as upgrade path. Partial: implement for supported platforms with fallback. Mostly unmet: improve existing auth, plan passkey roadmap.
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Appendix: Reference Tables
|
|
406
|
+
|
|
407
|
+
### Autocomplete Attributes
|
|
408
|
+
| Context | `autocomplete` Value |
|
|
409
|
+
|---------|---------------------|
|
|
410
|
+
| Sign in — email/username | `username` |
|
|
411
|
+
| Sign in — password | `current-password` |
|
|
412
|
+
| Sign up — password | `new-password` |
|
|
413
|
+
| MFA — OTP code | `one-time-code` |
|
|
414
|
+
| First name | `given-name` |
|
|
415
|
+
| Last name | `family-name` |
|
|
416
|
+
| Phone (SMS OTP) | `tel` |
|
|
417
|
+
|
|
418
|
+
### Session Timeouts
|
|
419
|
+
| App Type | Idle Timeout | Absolute Timeout |
|
|
420
|
+
|----------|-------------|-----------------|
|
|
421
|
+
| Banking / Financial | 5-15 min | 4 hours |
|
|
422
|
+
| Healthcare (HIPAA) | 15 min | 8 hours |
|
|
423
|
+
| Enterprise SaaS | 30 min | 8-12 hours |
|
|
424
|
+
| Consumer SaaS | 1-7 days | 30 days |
|
|
425
|
+
| Social Media | 30+ days | 90 days |
|
|
426
|
+
|
|
427
|
+
### Error Message Templates
|
|
428
|
+
| Scenario | Bad | Good |
|
|
429
|
+
|----------|-----|------|
|
|
430
|
+
| Wrong credentials | "Password is incorrect" | "Invalid email or password." |
|
|
431
|
+
| Account not found | "No account with this email" | "Invalid email or password." |
|
|
432
|
+
| Account locked | "Account locked" | "Too many attempts. Try again in 15 min, or reset your password." |
|
|
433
|
+
| Expired link | "Link expired" | "This link has expired. Request a new one below." |
|
|
434
|
+
| Weak password | "Too weak" | "Must be at least 15 characters. Try a phrase like 'correct horse battery staple'." |
|
|
435
|
+
| MFA code wrong | "Wrong code" | "That code didn't work. Check your authenticator for the latest code." |
|
|
436
|
+
| Session expired | (silent redirect) | "Your session has expired. Sign in again to continue." |
|
|
437
|
+
| SSO required | "Cannot use password" | "Your organization requires SSO. Click 'Sign in with SSO' to continue." |
|
|
438
|
+
|
|
439
|
+
### Auth Method Comparison
|
|
440
|
+
| Method | Security | Friction | Phishing Resistant | Offline |
|
|
441
|
+
|--------|----------|----------|-------------------|---------|
|
|
442
|
+
| Password only | Low | Medium | No | Yes |
|
|
443
|
+
| Password + SMS OTP | Medium | High | No | No |
|
|
444
|
+
| Password + TOTP | High | Medium | No | Yes |
|
|
445
|
+
| Password + Push | High | Low | Partial | No |
|
|
446
|
+
| Password + Security Key | Very High | Medium | Yes | Yes |
|
|
447
|
+
| Magic Link | Medium | Low | Partial | No |
|
|
448
|
+
| Passkey | Very High | Very Low | Yes | Yes |
|
|
449
|
+
| Biometric (device) | High | Very Low | Yes (local) | Yes |
|
|
450
|
+
| SSO (SAML/OIDC) | High | Low | Depends on IdP | No |
|
|
451
|
+
|
|
452
|
+
---
|
|
453
|
+
|
|
454
|
+
## References
|
|
455
|
+
|
|
456
|
+
- **NIST SP 800-63B-4** (August 2025) — [csrc.nist.gov](https://csrc.nist.gov/pubs/sp/800/63/b/4/final)
|
|
457
|
+
- **Apple HIG: Sign in with Apple** — [developer.apple.com](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple)
|
|
458
|
+
- **Apple HIG: Managing Accounts** — [developer.apple.com](https://developer.apple.com/design/human-interface-guidelines/managing-accounts)
|
|
459
|
+
- **Material Design 3 Foundations** — [m3.material.io](https://m3.material.io/foundations)
|
|
460
|
+
- **WCAG 2.2** — [w3.org](https://www.w3.org/TR/WCAG22/)
|
|
461
|
+
- **FIDO Alliance Passkey Design Guidelines** — [passkeycentral.org](https://www.passkeycentral.org/design-guidelines/)
|
|
462
|
+
- **Google Passkeys UX** — [developers.google.com](https://developers.google.com/identity/passkeys/ux/user-interface-design)
|
|
463
|
+
- **Google Passkeys User Journeys** — [developers.google.com](https://developers.google.com/identity/passkeys/ux/user-journeys)
|
|
464
|
+
- **Smashing Magazine: Rethinking Authentication UX** — [smashingmagazine.com](https://www.smashingmagazine.com/2022/08/authentication-ux-design-guidelines/)
|
|
465
|
+
- **Smart Interface Design Patterns: 2-Page Login** — [smart-interface-design-patterns.com](https://smart-interface-design-patterns.com/articles/2-page-login-pattern/)
|
|
466
|
+
- **Authgear: Login & Signup UX 2025 Guide** — [authgear.com](https://www.authgear.com/post/login-signup-ux-guide)
|
|
467
|
+
- **NN/g: Password Creation** — [nngroup.com](https://www.nngroup.com/articles/password-creation/)
|
|
468
|
+
- **OWASP Session Management Cheat Sheet** — [cheatsheetseries.owasp.org](https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html)
|
|
469
|
+
- **OWASP MFA Cheat Sheet** — [cheatsheetseries.owasp.org](https://cheatsheetseries.owasp.org/cheatsheets/Multifactor_Authentication_Cheat_Sheet.html)
|
|
470
|
+
- **WorkOS: MFA UX Best Practices** — [workos.com](https://workos.com/blog/ux-best-practices-for-mfa)
|
|
471
|
+
- **LogRocket: MFA Design** — [blog.logrocket.com](https://blog.logrocket.com/ux-design/authentication-ui-ux/)
|
|
472
|
+
- **LogRocket: Magic Links UX** — [blog.logrocket.com](https://blog.logrocket.com/ux-design/how-to-use-magic-links/)
|
|
473
|
+
- **Hanko: Passkey Best Practices** — [hanko.io](https://www.hanko.io/blog/the-dos-and-donts-of-integrating-passkeys)
|
|
474
|
+
- **Apple App Store Review Guidelines (4.8)** — [developer.apple.com](https://developer.apple.com/app-store/review/guidelines/)
|