@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,1494 @@
|
|
|
1
|
+
# E-Commerce Design Patterns
|
|
2
|
+
|
|
3
|
+
> Comprehensive design expertise module covering pattern anatomy, best-in-class
|
|
4
|
+
> examples, user flow mapping, micro-interactions, anti-patterns, accessibility,
|
|
5
|
+
> cross-platform adaptation, and decision frameworks for e-commerce experiences.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Table of Contents
|
|
10
|
+
|
|
11
|
+
1. [Pattern Anatomy](#1-pattern-anatomy)
|
|
12
|
+
2. [Best-in-Class Examples](#2-best-in-class-examples)
|
|
13
|
+
3. [User Flow Mapping](#3-user-flow-mapping)
|
|
14
|
+
4. [Micro-Interactions](#4-micro-interactions)
|
|
15
|
+
5. [Anti-Patterns](#5-anti-patterns)
|
|
16
|
+
6. [Accessibility](#6-accessibility)
|
|
17
|
+
7. [Cross-Platform Adaptation](#7-cross-platform-adaptation)
|
|
18
|
+
8. [Decision Tree](#8-decision-tree)
|
|
19
|
+
9. [Quick Reference Checklist](#9-quick-reference-checklist)
|
|
20
|
+
10. [Sources & Citations](#10-sources--citations)
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. Pattern Anatomy
|
|
25
|
+
|
|
26
|
+
### 1.1 Product Listing Page (PLP)
|
|
27
|
+
|
|
28
|
+
The product listing page is the primary browsing surface where users scan, filter,
|
|
29
|
+
and compare products. It must balance information density with scannability.
|
|
30
|
+
|
|
31
|
+
**Core Components:**
|
|
32
|
+
|
|
33
|
+
- **Product card** -- thumbnail image, product name, price, star rating, badge
|
|
34
|
+
(sale, new, bestseller), quick-add or quick-view action
|
|
35
|
+
- **Grid / list toggle** -- grid view prioritizes imagery (fashion, home decor);
|
|
36
|
+
list view prioritizes specs (electronics, B2B). Default to grid for consumer
|
|
37
|
+
retail. Offer both when product types benefit from comparison
|
|
38
|
+
- **Filter panel** -- placed in a left sidebar on desktop; drawer or bottom sheet
|
|
39
|
+
on mobile. Use checkboxes (not radio buttons) so users can multi-select within
|
|
40
|
+
a category. Common facets: price range, size, color, brand, rating, availability
|
|
41
|
+
- **Sort controls** -- dropdown above the grid. Standard options: "Best Sellers",
|
|
42
|
+
"Price: Low to High", "Price: High to Low", "Newest", "Avg. Customer Review".
|
|
43
|
+
Default sort should match user intent (bestsellers for general browse, relevance
|
|
44
|
+
for search results)
|
|
45
|
+
- **Pagination / infinite scroll** -- paginated lists give users a sense of
|
|
46
|
+
position and allow bookmarking. Infinite scroll works for casual browsing but
|
|
47
|
+
must include a "back to top" button and preserve scroll position on return.
|
|
48
|
+
"Load more" buttons are a pragmatic hybrid
|
|
49
|
+
- **Result count and applied filter summary** -- show "Showing 1-24 of 312
|
|
50
|
+
results" and active filter chips with remove actions
|
|
51
|
+
|
|
52
|
+
**Design Guidelines (Baymard Institute):**
|
|
53
|
+
|
|
54
|
+
- Keep product cards to 3-4 columns on desktop, 2 columns on tablet, 1-2 on
|
|
55
|
+
mobile. Overly dense grids reduce tap-target size on touch devices
|
|
56
|
+
- Ensure filter updates happen in real time without requiring a separate "Apply"
|
|
57
|
+
button -- reduces friction, especially on mobile
|
|
58
|
+
- Make filters sticky as users scroll on mobile so they remain accessible without
|
|
59
|
+
scrolling back to the top
|
|
60
|
+
- Show thumbnail swatches (color variants) directly on the card to reduce
|
|
61
|
+
unnecessary page loads
|
|
62
|
+
|
|
63
|
+
### 1.2 Product Detail Page (PDP)
|
|
64
|
+
|
|
65
|
+
The product detail page is where purchase decisions happen. Every element must
|
|
66
|
+
reduce uncertainty and build confidence.
|
|
67
|
+
|
|
68
|
+
**Core Components:**
|
|
69
|
+
|
|
70
|
+
- **Image gallery** -- primary hero image with zoom capability, thumbnail strip
|
|
71
|
+
or dot indicators, 360-degree view where applicable, lifestyle/in-context
|
|
72
|
+
images alongside studio shots. Video should autoplay on hover (desktop) or
|
|
73
|
+
appear as a distinct thumbnail (mobile)
|
|
74
|
+
- **Product title and brand** -- clear hierarchy: brand name, product name,
|
|
75
|
+
variant descriptor. Use semantic heading levels (h1 for product name)
|
|
76
|
+
- **Price block** -- current price, original price (struck through if
|
|
77
|
+
discounted), discount percentage or savings amount, unit pricing where
|
|
78
|
+
applicable. Position near the add-to-cart button
|
|
79
|
+
- **Variant selectors** -- color swatches with labels (not color-only), size
|
|
80
|
+
selectors with availability indicators, configuration options. Update the hero
|
|
81
|
+
image when a variant is selected
|
|
82
|
+
- **Add to cart / Buy now** -- primary CTA, visually dominant, above the fold.
|
|
83
|
+
"Buy Now" for express checkout, "Add to Cart" for continued browsing. Include
|
|
84
|
+
quantity stepper adjacent to the CTA
|
|
85
|
+
- **Product description** -- scannable format: key features as bullet points,
|
|
86
|
+
expandable detailed description, specifications in a structured table
|
|
87
|
+
- **Social proof** -- star rating with review count near the title, "X people
|
|
88
|
+
bought this today", badges for bestseller or editor's pick status
|
|
89
|
+
- **Shipping and returns** -- estimated delivery date, free shipping threshold
|
|
90
|
+
indicator, return policy summary. Position near the price or CTA
|
|
91
|
+
- **Related and recommended products** -- "Frequently bought together",
|
|
92
|
+
"Customers also viewed", "Complete the look" -- positioned below the fold
|
|
93
|
+
|
|
94
|
+
**NNG Guidelines:**
|
|
95
|
+
|
|
96
|
+
- Nielsen Norman Group's 108 product page guidelines emphasize showing key
|
|
97
|
+
information (price, availability, primary image, CTA) above the fold
|
|
98
|
+
- Use progressive disclosure: show summary first, let users expand for full specs
|
|
99
|
+
- Never auto-select a variant the user has not chosen (especially size) -- this
|
|
100
|
+
leads to incorrect purchases and returns
|
|
101
|
+
|
|
102
|
+
### 1.3 Shopping Cart
|
|
103
|
+
|
|
104
|
+
The cart serves dual purposes: order summary and last chance for upsell. It must
|
|
105
|
+
clearly communicate what the user is buying and what it costs.
|
|
106
|
+
|
|
107
|
+
**Core Components:**
|
|
108
|
+
|
|
109
|
+
- **Line items** -- product thumbnail, name, selected variants (size, color),
|
|
110
|
+
unit price, quantity control, line total, remove action
|
|
111
|
+
- **Quantity stepper** -- minus/plus buttons with numeric input. Enforce min (1)
|
|
112
|
+
and max (stock limit). Update line total and order summary in real time
|
|
113
|
+
- **Order summary** -- subtotal, shipping estimate (or "Free" with threshold
|
|
114
|
+
messaging), tax estimate, promo code input, order total
|
|
115
|
+
- **Promo code field** -- collapsible by default to avoid implying the user is
|
|
116
|
+
missing a discount. Validate inline with clear success/error feedback
|
|
117
|
+
- **Cart-level CTAs** -- "Proceed to Checkout" (primary), "Continue Shopping"
|
|
118
|
+
(secondary/link). Express checkout options (Apple Pay, Google Pay, PayPal)
|
|
119
|
+
should appear here as well
|
|
120
|
+
- **Empty cart state** -- friendly message, link to popular categories or
|
|
121
|
+
recently viewed items. Never show a blank page
|
|
122
|
+
- **Save for later / Move to wishlist** -- allow users to declutter the cart
|
|
123
|
+
without losing items
|
|
124
|
+
|
|
125
|
+
**Key Principles:**
|
|
126
|
+
|
|
127
|
+
- Persist cart contents across sessions (use server-side storage for logged-in
|
|
128
|
+
users, local storage with cookie fallback for guests)
|
|
129
|
+
- Show a mini-cart (flyout or drawer) on add-to-cart for quick confirmation
|
|
130
|
+
without navigating away from the PLP/PDP
|
|
131
|
+
- Display stock warnings ("Only 3 left") at the line-item level, not just on
|
|
132
|
+
the PDP
|
|
133
|
+
|
|
134
|
+
### 1.4 Checkout
|
|
135
|
+
|
|
136
|
+
Checkout is the highest-friction point in the e-commerce funnel. Baymard
|
|
137
|
+
Institute research shows that the average large e-commerce site can achieve a
|
|
138
|
+
35% increase in conversion rate through checkout UX improvements alone.
|
|
139
|
+
|
|
140
|
+
**Core Components:**
|
|
141
|
+
|
|
142
|
+
- **Contact information** -- email (for order confirmation and guest checkout
|
|
143
|
+
identification), phone (optional, for delivery notifications)
|
|
144
|
+
- **Shipping address** -- address autocomplete (Google Places or similar),
|
|
145
|
+
country/region selector, saved addresses for returning users
|
|
146
|
+
- **Shipping method** -- clear options with price, estimated delivery date, and
|
|
147
|
+
carrier name. Pre-select the most popular option
|
|
148
|
+
- **Payment** -- credit/debit card form with real-time validation, digital
|
|
149
|
+
wallets (Apple Pay, Google Pay) prominently above manual entry, saved payment
|
|
150
|
+
methods for returning users
|
|
151
|
+
- **Order review** -- collapsible order summary always visible (sticky sidebar
|
|
152
|
+
on desktop, expandable section on mobile). Show item thumbnails, quantities,
|
|
153
|
+
and all cost components
|
|
154
|
+
- **Place order CTA** -- single, prominent button. Label should be explicit:
|
|
155
|
+
"Place Order" or "Pay $X.XX" (including the amount reinforces transparency)
|
|
156
|
+
|
|
157
|
+
**Baymard Institute Findings:**
|
|
158
|
+
|
|
159
|
+
- The average checkout has 23.48 form elements; the ideal is 12-14
|
|
160
|
+
- 39% of shoppers abandon when surprised by additional fees
|
|
161
|
+
- 18% abandon due to a "too long / complicated checkout process"
|
|
162
|
+
- 24% abandon because the site required account creation
|
|
163
|
+
|
|
164
|
+
### 1.5 Order Confirmation
|
|
165
|
+
|
|
166
|
+
The confirmation page and email serve as receipts and set expectations for
|
|
167
|
+
what happens next.
|
|
168
|
+
|
|
169
|
+
**Core Components:**
|
|
170
|
+
|
|
171
|
+
- **Order number** -- prominently displayed, easy to copy
|
|
172
|
+
- **Order summary** -- all items, quantities, prices, discounts applied,
|
|
173
|
+
shipping method, estimated delivery date, billing and shipping addresses
|
|
174
|
+
- **Next steps** -- "Track your order", "Create an account" (for guest
|
|
175
|
+
checkout users, post-purchase -- never pre-purchase), "Continue shopping"
|
|
176
|
+
- **Confirmation email** -- sent immediately, mirrors the on-page confirmation,
|
|
177
|
+
includes a direct link to order status
|
|
178
|
+
- **Cross-sell** -- subtle post-purchase recommendations ("Pairs well with your
|
|
179
|
+
purchase"). Keep this secondary to the confirmation content
|
|
180
|
+
|
|
181
|
+
**Design Principles:**
|
|
182
|
+
|
|
183
|
+
- Provide a clear visual success state (checkmark icon, green accent, "Thank
|
|
184
|
+
you" heading) to give users immediate confidence
|
|
185
|
+
- Never require the user to screenshot this page -- all information must also
|
|
186
|
+
be in the email
|
|
187
|
+
- Include customer support contact information in case of issues
|
|
188
|
+
|
|
189
|
+
### 1.6 Wishlist / Save for Later
|
|
190
|
+
|
|
191
|
+
Wishlists serve as persistent intent signals, enabling users to bookmark items
|
|
192
|
+
for future purchase or gifting.
|
|
193
|
+
|
|
194
|
+
**Core Components:**
|
|
195
|
+
|
|
196
|
+
- **Heart / bookmark icon** -- placed on product cards and PDPs. Toggle state
|
|
197
|
+
with filled/unfilled visual. Allow guest users to save items (persist via
|
|
198
|
+
local storage) without forcing registration
|
|
199
|
+
- **Wishlist page** -- grid layout matching the PLP. Include price, availability
|
|
200
|
+
status, "Add to Cart" action per item, remove action, and "Share wishlist"
|
|
201
|
+
functionality
|
|
202
|
+
- **Price drop notifications** -- alert users when wishlist items go on sale.
|
|
203
|
+
This is a high-conversion re-engagement mechanism
|
|
204
|
+
- **Multiple lists** -- power users benefit from named lists ("Birthday ideas",
|
|
205
|
+
"Home office setup"). Most users need only one default list
|
|
206
|
+
|
|
207
|
+
**NNG Research:**
|
|
208
|
+
|
|
209
|
+
- Sites that require login to save items to a wishlist see significantly lower
|
|
210
|
+
adoption. Allow guest wishlisting and prompt account creation only after the
|
|
211
|
+
user has items saved ("Create an account to access your wishlist from any
|
|
212
|
+
device")
|
|
213
|
+
|
|
214
|
+
### 1.7 Reviews and Ratings
|
|
215
|
+
|
|
216
|
+
Reviews are the primary trust signal in e-commerce. 95% of consumers consult
|
|
217
|
+
reviews before purchasing (Spiegel Research Center).
|
|
218
|
+
|
|
219
|
+
**Core Components:**
|
|
220
|
+
|
|
221
|
+
- **Aggregate rating** -- star rating (1-5) with total review count. Displayed
|
|
222
|
+
on PLP cards and near the PDP title, above the fold
|
|
223
|
+
- **Rating distribution** -- horizontal bar chart showing the breakdown of 1-5
|
|
224
|
+
star reviews. Clickable to filter reviews by rating
|
|
225
|
+
- **Individual reviews** -- reviewer name/alias, date, verified purchase badge,
|
|
226
|
+
star rating, review title, review body, helpful/not helpful voting, seller
|
|
227
|
+
response (if applicable)
|
|
228
|
+
- **Photo/video reviews** -- user-submitted media displayed in a carousel above
|
|
229
|
+
text reviews. Significantly increases trust and conversion
|
|
230
|
+
- **Review filters and sort** -- by star rating, recency, most helpful,
|
|
231
|
+
verified purchase only, with photos/videos, by product variant
|
|
232
|
+
- **Review submission form** -- star rating selector, title, body, photo upload,
|
|
233
|
+
pros/cons fields, fit/sizing feedback (apparel). Email follow-up prompt
|
|
234
|
+
post-delivery to solicit reviews
|
|
235
|
+
|
|
236
|
+
**Design Guidelines:**
|
|
237
|
+
|
|
238
|
+
- Show star ratings on PLP cards -- they are one of the strongest conversion
|
|
239
|
+
drivers in product listings
|
|
240
|
+
- Display the total review count alongside stars (e.g., "4.3 (1,247 reviews)")
|
|
241
|
+
to convey statistical reliability
|
|
242
|
+
- Allow filtering reviews by purchased variant (size, color) for apparel
|
|
243
|
+
- Never hide or suppress negative reviews -- this erodes trust. Instead,
|
|
244
|
+
feature seller responses to negative reviews
|
|
245
|
+
|
|
246
|
+
### 1.8 Price Display
|
|
247
|
+
|
|
248
|
+
Price presentation directly impacts perceived value and purchase confidence.
|
|
249
|
+
|
|
250
|
+
**Core Components:**
|
|
251
|
+
|
|
252
|
+
- **Current price** -- the most visually prominent element in the price block.
|
|
253
|
+
Use a larger font size and/or bold weight
|
|
254
|
+
- **Original / compare-at price** -- struck through, smaller than the current
|
|
255
|
+
price, positioned adjacent. Use a muted color
|
|
256
|
+
- **Discount indicator** -- percentage off ("-25%") or absolute savings
|
|
257
|
+
("Save $50") in a contrasting color (typically red or green). Baymard
|
|
258
|
+
recommends showing both the percentage and the absolute amount
|
|
259
|
+
- **Unit pricing** -- "$4.99/oz" for consumables, "$2.50/count" for multi-packs.
|
|
260
|
+
Required by law in some jurisdictions
|
|
261
|
+
- **Installment pricing** -- "or 4 payments of $25.00 with Afterpay". Show the
|
|
262
|
+
total and per-installment amount
|
|
263
|
+
- **Currency and locale** -- auto-detect via geolocation with manual override.
|
|
264
|
+
Display currency symbol and correct decimal/thousands separators for the locale
|
|
265
|
+
- **Price range** -- for products with variants at different prices, show
|
|
266
|
+
"From $29.99" or "$29.99 - $49.99"
|
|
267
|
+
|
|
268
|
+
**Accessibility for Price Display:**
|
|
269
|
+
|
|
270
|
+
- Screen readers should announce prices clearly. Use `aria-label` to provide
|
|
271
|
+
context: `aria-label="Current price: $29.99, was $39.99, you save 25%"`
|
|
272
|
+
- Do not rely solely on color (red strikethrough) to indicate a discount --
|
|
273
|
+
include text labels
|
|
274
|
+
- Use `<del>` for the original price and `<ins>` or a standard element for
|
|
275
|
+
the current price to convey semantic meaning
|
|
276
|
+
|
|
277
|
+
### 1.9 Promotions
|
|
278
|
+
|
|
279
|
+
Promotions drive urgency and conversion but must be implemented transparently
|
|
280
|
+
to avoid dark-pattern territory.
|
|
281
|
+
|
|
282
|
+
**Core Components:**
|
|
283
|
+
|
|
284
|
+
- **Banner / announcement bar** -- site-wide promotion messaging (free shipping
|
|
285
|
+
threshold, sitewide sale percentage). Sticky at top, dismissible
|
|
286
|
+
- **Product badges** -- "Sale", "New", "Bestseller", "Limited Edition" overlaid
|
|
287
|
+
on product card images. Strategically placed badges can yield up to a 55%
|
|
288
|
+
increase in conversion rates
|
|
289
|
+
- **Countdown timers** -- use only for genuine time-limited offers. Display end
|
|
290
|
+
date alongside the timer. Never reset or fabricate urgency
|
|
291
|
+
- **Threshold incentives** -- "Add $15 more for free shipping" progress bar in
|
|
292
|
+
the cart. Highly effective at increasing average order value
|
|
293
|
+
- **Promo codes** -- auto-apply where possible. If manual entry is required,
|
|
294
|
+
make the field discoverable but not distracting (collapsed by default in
|
|
295
|
+
checkout). Validate instantly with clear feedback
|
|
296
|
+
- **Bundle and BOGO offers** -- show the effective per-unit price and total
|
|
297
|
+
savings clearly. Use visual grouping to communicate the bundle
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## 2. Best-in-Class Examples
|
|
302
|
+
|
|
303
|
+
### 2.1 Apple Store (apple.com)
|
|
304
|
+
|
|
305
|
+
**What they excel at:**
|
|
306
|
+
|
|
307
|
+
- **Visual storytelling on PDP** -- immersive, full-bleed imagery with scroll-
|
|
308
|
+
triggered animations that showcase product features in context. Interactive
|
|
309
|
+
3D product viewers for hardware
|
|
310
|
+
- **Progressive configuration** -- step-by-step product customization (storage,
|
|
311
|
+
color, accessories) with real-time price updates and visual feedback as
|
|
312
|
+
options are selected
|
|
313
|
+
- **Minimal checkout** -- streamlined flow leveraging Apple ID for pre-filled
|
|
314
|
+
address/payment, Apple Pay as the primary express checkout
|
|
315
|
+
- **Typography and hierarchy** -- San Francisco typeface with carefully weighted
|
|
316
|
+
font sizes creates an effortless scanning experience
|
|
317
|
+
- **Accessibility first** -- VoiceOver-optimized product pages, adjustable text
|
|
318
|
+
size, high-contrast mode support throughout
|
|
319
|
+
|
|
320
|
+
**Key pattern:** Configuration-driven PDP where the product page itself becomes
|
|
321
|
+
a guided selling experience rather than a static spec sheet.
|
|
322
|
+
|
|
323
|
+
### 2.2 Shopify Stores (Shopify Polaris)
|
|
324
|
+
|
|
325
|
+
**What they excel at:**
|
|
326
|
+
|
|
327
|
+
- **Unified design system** -- Polaris provides consistent components across
|
|
328
|
+
Admin, Checkout, and Customer Accounts. Web Components architecture ensures
|
|
329
|
+
framework-agnostic compatibility
|
|
330
|
+
- **Checkout extensibility** -- Shopify's one-page checkout (introduced 2023,
|
|
331
|
+
refined through 2025) reduces form fields while maintaining all necessary
|
|
332
|
+
information collection. Supports Shop Pay for one-tap checkout
|
|
333
|
+
- **Merchant-adaptable patterns** -- themes provide flexible PLP grid layouts,
|
|
334
|
+
PDP templates, and cart drawers that merchants can customize without breaking
|
|
335
|
+
UX conventions
|
|
336
|
+
- **Performance** -- Polaris Web Components are significantly smaller and faster
|
|
337
|
+
than their React predecessors, directly impacting conversion (a site loading
|
|
338
|
+
in 1 second converts at 2.5x the rate of one loading in 5 seconds)
|
|
339
|
+
|
|
340
|
+
**Key pattern:** Platform-level UX standardization that raises the floor for all
|
|
341
|
+
merchants, ensuring basic patterns (cart, checkout, product page) follow
|
|
342
|
+
research-backed conventions regardless of theme customization.
|
|
343
|
+
|
|
344
|
+
### 2.3 Amazon
|
|
345
|
+
|
|
346
|
+
**What they excel at:**
|
|
347
|
+
|
|
348
|
+
- **One-click purchasing** -- patented "Buy Now" eliminates all checkout friction
|
|
349
|
+
for returning customers. Pre-populated shipping and payment from account data
|
|
350
|
+
- **Review ecosystem** -- star ratings with distribution histograms, verified
|
|
351
|
+
purchase badges, photo/video reviews, AI-generated review summaries, Q&A
|
|
352
|
+
sections. Reviews appear next to the product name and price so users connect
|
|
353
|
+
quality with value instantly
|
|
354
|
+
- **Recommendation engine** -- "Frequently bought together", "Customers who
|
|
355
|
+
viewed this also viewed", "Compare with similar items" drive discovery and
|
|
356
|
+
increase average order value
|
|
357
|
+
- **Search and filtering** -- powerful faceted search with category-specific
|
|
358
|
+
filters. Auto-suggest with rich results (product images in suggestions)
|
|
359
|
+
- **Prime integration** -- delivery date prominence ("Get it tomorrow") as a
|
|
360
|
+
conversion driver. Prime badge on listings signals fast, free shipping
|
|
361
|
+
|
|
362
|
+
**Key pattern:** Information density optimized for decision-making. Amazon
|
|
363
|
+
prioritizes utility over aesthetics, surfacing every data point a buyer might
|
|
364
|
+
need (price history, competitive options, delivery estimates) at the cost of
|
|
365
|
+
visual elegance. This works because Amazon's audience is intent-driven.
|
|
366
|
+
|
|
367
|
+
### 2.4 Stripe Checkout
|
|
368
|
+
|
|
369
|
+
**What they excel at:**
|
|
370
|
+
|
|
371
|
+
- **Form minimization** -- every extra field is a potential drop-off point.
|
|
372
|
+
Stripe's checkout collects only what is necessary to process the payment
|
|
373
|
+
- **Real-time validation** -- inline error messages next to the problem field.
|
|
374
|
+
Specific messages ("Card number is incomplete", "Expiration date appears to be
|
|
375
|
+
in the past") rather than generic "Invalid input"
|
|
376
|
+
- **Card brand auto-detection** -- displays the relevant card logo (Visa,
|
|
377
|
+
Mastercard, Amex) as the user types, providing visual reassurance
|
|
378
|
+
- **Trust signals** -- lock icon, "Powered by Stripe" badge, subtle security
|
|
379
|
+
copy. Small, familiar visuals reduce anxiety at the payment step
|
|
380
|
+
- **Adaptive payment methods** -- automatically surfaces region-appropriate
|
|
381
|
+
payment methods (iDEAL in Netherlands, SEPA in EU, PIX in Brazil)
|
|
382
|
+
- **Field ordering** -- follows user mental model: contact info, then shipping,
|
|
383
|
+
then billing, then payment. Progress is visible via numbered steps or a
|
|
384
|
+
progress bar
|
|
385
|
+
|
|
386
|
+
**Key pattern:** Payment-specialized checkout that strips away all non-essential
|
|
387
|
+
elements, creating a focused "payment tunnel" that minimizes cognitive load at
|
|
388
|
+
the highest-anxiety moment of the purchase flow.
|
|
389
|
+
|
|
390
|
+
### 2.5 Nike (nike.com)
|
|
391
|
+
|
|
392
|
+
**What they excel at:**
|
|
393
|
+
|
|
394
|
+
- **Dynamic product imagery** -- lifestyle and action photography alongside
|
|
395
|
+
studio shots. Videos showing products in use (running shoes on a track,
|
|
396
|
+
apparel in motion)
|
|
397
|
+
- **Size and fit guidance** -- integrated size finder tools, fit feedback from
|
|
398
|
+
reviewers ("Runs small -- order a half size up"), size charts with
|
|
399
|
+
measurement guides
|
|
400
|
+
- **Customization (Nike By You)** -- real-time 3D product configurator for
|
|
401
|
+
custom colorways. Configuration choices update the product visualization
|
|
402
|
+
instantly
|
|
403
|
+
- **Member-exclusive access** -- tiered loyalty program driving account creation
|
|
404
|
+
through value (early access, exclusive products) rather than forced registration
|
|
405
|
+
- **Wishlist / Favorites** -- persistent across devices for logged-in members,
|
|
406
|
+
with "Notify me" for out-of-stock items
|
|
407
|
+
|
|
408
|
+
**Key pattern:** Aspirational product presentation combined with practical
|
|
409
|
+
decision-support tools (size finder, fit reviews) that address the primary
|
|
410
|
+
purchase barrier for online apparel and footwear -- fit uncertainty.
|
|
411
|
+
|
|
412
|
+
### 2.6 Glossier (glossier.com)
|
|
413
|
+
|
|
414
|
+
**What they excel at:**
|
|
415
|
+
|
|
416
|
+
- **Conversational product copy** -- tells users what a product DOES and DOES
|
|
417
|
+
NOT DO with a transparency uncommon in beauty retail. Builds trust through
|
|
418
|
+
honesty rather than marketing superlatives
|
|
419
|
+
- **User-generated content** -- real customer photos and unfiltered reviews
|
|
420
|
+
prominently featured. Creates an authentic, relatable shopping experience
|
|
421
|
+
versus traditional aspirational beauty photography
|
|
422
|
+
- **Community-driven social proof** -- reviews feel like conversations, not
|
|
423
|
+
testimonials. Glossier's review section reads more like a forum, increasing
|
|
424
|
+
engagement and time on page
|
|
425
|
+
- **Simplified product line** -- curated, minimal product catalog reduces
|
|
426
|
+
decision fatigue. Each product page focuses on a single hero product with
|
|
427
|
+
clear use-case positioning
|
|
428
|
+
- **Clean visual design** -- generous whitespace, soft color palette, editorial
|
|
429
|
+
photography style. The design itself communicates the brand's "skin first,
|
|
430
|
+
makeup second" philosophy
|
|
431
|
+
|
|
432
|
+
**Key pattern:** Brand-as-community e-commerce where social proof and
|
|
433
|
+
authenticity replace traditional merchandising techniques. The product page
|
|
434
|
+
serves as both a sales page and a community discussion space.
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 3. User Flow Mapping
|
|
439
|
+
|
|
440
|
+
### 3.1 Primary Purchase Flow
|
|
441
|
+
|
|
442
|
+
```
|
|
443
|
+
Browse/Search --> Product Listing --> Product Detail --> Add to Cart
|
|
444
|
+
| | | |
|
|
445
|
+
| [Filter/Sort] [Select Variant] [Mini Cart
|
|
446
|
+
| | | Confirmation]
|
|
447
|
+
| v v |
|
|
448
|
+
| Refine Results Compare Options v
|
|
449
|
+
| View Cart
|
|
450
|
+
| |
|
|
451
|
+
+------------------------------------------------------+
|
|
452
|
+
|
|
|
453
|
+
v
|
|
454
|
+
Checkout
|
|
455
|
+
|
|
|
456
|
+
+---------------+---------------+
|
|
457
|
+
| |
|
|
458
|
+
Guest Checkout Signed-In Checkout
|
|
459
|
+
| |
|
|
460
|
+
Email Entry Pre-filled Data
|
|
461
|
+
| |
|
|
462
|
+
+---------------+---------------+
|
|
463
|
+
|
|
|
464
|
+
v
|
|
465
|
+
Shipping Address
|
|
466
|
+
|
|
|
467
|
+
v
|
|
468
|
+
Shipping Method
|
|
469
|
+
|
|
|
470
|
+
v
|
|
471
|
+
Payment
|
|
472
|
+
|
|
|
473
|
+
v
|
|
474
|
+
Order Review
|
|
475
|
+
|
|
|
476
|
+
v
|
|
477
|
+
Place Order
|
|
478
|
+
|
|
|
479
|
+
v
|
|
480
|
+
Order Confirmation
|
|
481
|
+
(Page + Email)
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### 3.2 Guest Checkout Flow
|
|
485
|
+
|
|
486
|
+
Guest checkout is critical -- 24% of users abandon when forced to create an
|
|
487
|
+
account (Baymard Institute).
|
|
488
|
+
|
|
489
|
+
**Flow Design Principles:**
|
|
490
|
+
|
|
491
|
+
1. **Entry point** -- present "Continue as Guest" and "Sign In" as equal
|
|
492
|
+
options. Never position guest checkout as a secondary, de-emphasized link
|
|
493
|
+
2. **Email collection** -- collect email first (required for order confirmation
|
|
494
|
+
and abandoned cart recovery). Single field, no password
|
|
495
|
+
3. **Deferred account creation** -- after order confirmation, offer "Save your
|
|
496
|
+
information for faster checkout next time" with a single password field. This
|
|
497
|
+
converts 25-30% of guest users to accounts without pre-purchase friction
|
|
498
|
+
4. **Session persistence** -- if a guest user returns (same device/browser),
|
|
499
|
+
pre-fill their email and offer to restore their previous cart
|
|
500
|
+
5. **Order tracking** -- provide a guest-accessible order tracking link via
|
|
501
|
+
email that does not require login. Use order number + email as verification
|
|
502
|
+
|
|
503
|
+
**Implementation Notes:**
|
|
504
|
+
|
|
505
|
+
- Store guest checkout data in a session-based record linked to email
|
|
506
|
+
- Hash the email for abandoned cart recovery triggers
|
|
507
|
+
- Offer "Look up order" functionality using order number + email/zip code
|
|
508
|
+
|
|
509
|
+
### 3.3 Account / Signed-In Checkout Flow
|
|
510
|
+
|
|
511
|
+
For returning customers, the goal is maximum speed through pre-filled data.
|
|
512
|
+
|
|
513
|
+
**Flow Optimizations:**
|
|
514
|
+
|
|
515
|
+
1. **Saved addresses** -- default to last-used shipping address with one-click
|
|
516
|
+
selection of alternatives. Include "Add new address" inline
|
|
517
|
+
2. **Saved payment methods** -- display last four digits and card brand. Default
|
|
518
|
+
to last-used method. PCI-compliant tokenized storage
|
|
519
|
+
3. **Express checkout** -- for single-item or reorder flows, offer "Buy Again"
|
|
520
|
+
with one-click purchase (pre-selected address + payment + shipping)
|
|
521
|
+
4. **Order history integration** -- "Reorder" buttons on past orders that
|
|
522
|
+
add all items to cart with current pricing and availability
|
|
523
|
+
|
|
524
|
+
### 3.4 Abandoned Cart Recovery Flow
|
|
525
|
+
|
|
526
|
+
The global average cart abandonment rate is 70-78% (Baymard Institute, 2026).
|
|
527
|
+
Up to 20% of abandonments can be recovered.
|
|
528
|
+
|
|
529
|
+
**Recovery Sequence:**
|
|
530
|
+
|
|
531
|
+
```
|
|
532
|
+
Cart Abandonment Detected (session timeout or exit)
|
|
533
|
+
|
|
|
534
|
+
v
|
|
535
|
+
[Wait 1 hour]
|
|
536
|
+
|
|
|
537
|
+
v
|
|
538
|
+
Email 1: Reminder
|
|
539
|
+
- Subject: "You left something behind"
|
|
540
|
+
- Content: Cart items with images, names, prices
|
|
541
|
+
- CTA: "Return to your cart" (deep link restoring cart state)
|
|
542
|
+
- Tone: Helpful, not pushy
|
|
543
|
+
|
|
|
544
|
+
v
|
|
545
|
+
[Wait 24 hours]
|
|
546
|
+
|
|
|
547
|
+
v
|
|
548
|
+
Email 2: Social Proof / Urgency
|
|
549
|
+
- Subject: "Still thinking it over?"
|
|
550
|
+
- Content: Cart items + reviews/ratings for those items
|
|
551
|
+
- Include: "X people bought this today" or low-stock warning (if genuine)
|
|
552
|
+
- CTA: "Complete your purchase"
|
|
553
|
+
|
|
|
554
|
+
v
|
|
555
|
+
[Wait 72 hours]
|
|
556
|
+
|
|
|
557
|
+
v
|
|
558
|
+
Email 3: Incentive
|
|
559
|
+
- Subject: "A little something to help you decide"
|
|
560
|
+
- Content: Cart items + discount code or free shipping offer
|
|
561
|
+
- CTA: "Use code SAVE10 at checkout"
|
|
562
|
+
- Include: Expiration on the offer (48-72 hours)
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
**Design Requirements:**
|
|
566
|
+
|
|
567
|
+
- Deep links must restore exact cart state (items, quantities, variants)
|
|
568
|
+
- Emails must be mobile-optimized (60%+ of recovery emails are opened on mobile)
|
|
569
|
+
- Personalize by segment: first-time vs. returning customers, cart value tiers
|
|
570
|
+
- Include unsubscribe and frequency preferences
|
|
571
|
+
- Abandoned cart emails have average open rates of 40-45% (significantly above
|
|
572
|
+
standard marketing email benchmarks)
|
|
573
|
+
|
|
574
|
+
### 3.5 Returns Flow
|
|
575
|
+
|
|
576
|
+
A frictionless returns experience directly impacts repeat purchase rates and
|
|
577
|
+
customer lifetime value.
|
|
578
|
+
|
|
579
|
+
**Flow Steps:**
|
|
580
|
+
|
|
581
|
+
```
|
|
582
|
+
Order History --> Select Order --> Initiate Return
|
|
583
|
+
| |
|
|
584
|
+
v v
|
|
585
|
+
View Order Detail Select Items to Return
|
|
586
|
+
|
|
|
587
|
+
v
|
|
588
|
+
Select Return Reason
|
|
589
|
+
(dropdown + optional comment)
|
|
590
|
+
|
|
|
591
|
+
v
|
|
592
|
+
Choose Return Method
|
|
593
|
+
- Prepaid shipping label (print or QR)
|
|
594
|
+
- Drop-off at partner location
|
|
595
|
+
- Schedule pickup
|
|
596
|
+
|
|
|
597
|
+
v
|
|
598
|
+
Return Confirmation
|
|
599
|
+
(Return ID + instructions + timeline)
|
|
600
|
+
|
|
|
601
|
+
v
|
|
602
|
+
Return Status Tracking
|
|
603
|
+
(Shipped --> Received --> Inspected --> Refunded)
|
|
604
|
+
|
|
|
605
|
+
v
|
|
606
|
+
Refund Processed
|
|
607
|
+
(Email notification + account credit)
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
**Design Principles:**
|
|
611
|
+
|
|
612
|
+
- Make the return policy visible pre-purchase (PDP and checkout) -- it is a
|
|
613
|
+
conversion driver, not just a post-purchase necessity
|
|
614
|
+
- Provide self-service returns without requiring customer support contact
|
|
615
|
+
- Offer exchange as an alternative to refund (retains revenue)
|
|
616
|
+
- Show estimated refund timeline at initiation
|
|
617
|
+
- Send proactive status updates at each stage
|
|
618
|
+
|
|
619
|
+
---
|
|
620
|
+
|
|
621
|
+
## 4. Micro-Interactions
|
|
622
|
+
|
|
623
|
+
### 4.1 Add-to-Cart Animation
|
|
624
|
+
|
|
625
|
+
The add-to-cart moment is the primary conversion micro-interaction. It must
|
|
626
|
+
provide immediate, unmistakable confirmation.
|
|
627
|
+
|
|
628
|
+
**Recommended Pattern:**
|
|
629
|
+
|
|
630
|
+
1. **Trigger** -- user taps/clicks "Add to Cart" button
|
|
631
|
+
2. **Button state change** -- button text changes from "Add to Cart" to
|
|
632
|
+
"Adding..." (with a subtle spinner) then to "Added" (with a checkmark).
|
|
633
|
+
Duration: 300-600ms total
|
|
634
|
+
3. **Product image animation** -- small thumbnail of the product scales down
|
|
635
|
+
and arcs toward the cart icon. Use natural easing (cubic-bezier) to simulate
|
|
636
|
+
physical movement. Duration: 400-500ms
|
|
637
|
+
4. **Cart icon feedback** -- cart icon bounces or pulses, badge count increments
|
|
638
|
+
with a scale animation. Duration: 200-300ms
|
|
639
|
+
5. **Mini-cart reveal** -- optional: slide-in drawer or flyout showing the added
|
|
640
|
+
item with "Continue Shopping" and "View Cart" CTAs. Auto-dismiss after 3-5
|
|
641
|
+
seconds or on outside click
|
|
642
|
+
|
|
643
|
+
**Implementation Notes:**
|
|
644
|
+
|
|
645
|
+
- Use `transform` and `opacity` for animations (GPU-accelerated, no layout
|
|
646
|
+
thrash)
|
|
647
|
+
- Respect `prefers-reduced-motion` -- fall back to a simple checkmark state
|
|
648
|
+
change with no spatial animation
|
|
649
|
+
- On mobile, a toast notification at the bottom of the screen may be more
|
|
650
|
+
appropriate than a flyout cart that obscures content
|
|
651
|
+
|
|
652
|
+
### 4.2 Quantity Stepper
|
|
653
|
+
|
|
654
|
+
**Recommended Pattern:**
|
|
655
|
+
|
|
656
|
+
1. **Layout** -- minus button, numeric display/input, plus button. Minimum
|
|
657
|
+
touch target: 44x44px (WCAG) / 48x48px (Material Design)
|
|
658
|
+
2. **Tap feedback** -- brief haptic pulse (mobile) or button depression state
|
|
659
|
+
(desktop) on each increment/decrement
|
|
660
|
+
3. **Boundary behavior** -- disable minus button at quantity 1 (grayed out,
|
|
661
|
+
`aria-disabled="true"`). Show max quantity message when stock limit is
|
|
662
|
+
reached
|
|
663
|
+
4. **Direct input** -- allow users to tap the number to type a quantity
|
|
664
|
+
directly. Validate on blur. Use `inputmode="numeric"` on mobile
|
|
665
|
+
5. **Price update** -- line total and order summary update in real time as
|
|
666
|
+
quantity changes, with a brief highlight animation (background flash) on the
|
|
667
|
+
updated value. Duration: 200ms
|
|
668
|
+
|
|
669
|
+
### 4.3 Price Update Animation
|
|
670
|
+
|
|
671
|
+
When prices change (variant selection, quantity change, promo applied), the
|
|
672
|
+
transition should be noticeable but not distracting.
|
|
673
|
+
|
|
674
|
+
**Recommended Pattern:**
|
|
675
|
+
|
|
676
|
+
1. **Number transition** -- old price fades out and new price fades in, or
|
|
677
|
+
digits "roll" to new values (odometer effect). Duration: 200-300ms
|
|
678
|
+
2. **Highlight flash** -- brief background color pulse behind the price (e.g.,
|
|
679
|
+
light yellow to transparent). Duration: 400ms
|
|
680
|
+
3. **Savings callout** -- when a discount is applied, animate the "You save
|
|
681
|
+
$X.XX" text appearing with a slide-down and fade-in. Duration: 300ms
|
|
682
|
+
|
|
683
|
+
**Accessibility:**
|
|
684
|
+
|
|
685
|
+
- Use `aria-live="polite"` on price containers so screen readers announce
|
|
686
|
+
changes without interrupting the user
|
|
687
|
+
- Ensure the animation does not prevent the price from being readable at
|
|
688
|
+
any point during transition
|
|
689
|
+
|
|
690
|
+
### 4.4 Checkout Progress Indicator
|
|
691
|
+
|
|
692
|
+
**Recommended Pattern:**
|
|
693
|
+
|
|
694
|
+
1. **Step visualization** -- numbered circles or icons connected by a line.
|
|
695
|
+
Completed steps are filled, current step is highlighted/pulsing, upcoming
|
|
696
|
+
steps are outlined
|
|
697
|
+
2. **Step transition** -- when moving to the next step, the connecting line
|
|
698
|
+
fills with an animated draw (left to right). Current step indicator scales
|
|
699
|
+
up briefly. Duration: 300-400ms
|
|
700
|
+
3. **Step labels** -- always visible on desktop. On mobile, show only the
|
|
701
|
+
current step label with a "Step 2 of 4" counter
|
|
702
|
+
4. **Back navigation** -- completed steps are clickable to allow users to
|
|
703
|
+
return and edit previous sections. Indicate clickability with cursor change
|
|
704
|
+
and hover state
|
|
705
|
+
|
|
706
|
+
### 4.5 Payment Processing
|
|
707
|
+
|
|
708
|
+
The payment processing moment is the highest-anxiety micro-interaction. Users
|
|
709
|
+
need continuous reassurance that their transaction is progressing.
|
|
710
|
+
|
|
711
|
+
**Recommended Pattern:**
|
|
712
|
+
|
|
713
|
+
1. **Button state** -- "Place Order" transitions to "Processing..." with a
|
|
714
|
+
spinner. Disable the button to prevent double-submission
|
|
715
|
+
2. **Progress indication** -- for processing times > 2 seconds, show a
|
|
716
|
+
progress bar or sequential status messages ("Verifying payment...",
|
|
717
|
+
"Confirming order...", "Almost done...")
|
|
718
|
+
3. **Success state** -- green checkmark animation with "Order Confirmed!"
|
|
719
|
+
message. Transition to order confirmation page after 1-2 seconds
|
|
720
|
+
4. **Error state** -- red/orange alert with specific error message and clear
|
|
721
|
+
recovery action ("Try a different card", "Check your card details").
|
|
722
|
+
Re-enable the form with the user's data preserved
|
|
723
|
+
5. **Timeout handling** -- if processing exceeds 15 seconds, show a message:
|
|
724
|
+
"This is taking longer than expected. Please don't close this page." Provide
|
|
725
|
+
a "Check order status" link as a fallback
|
|
726
|
+
|
|
727
|
+
---
|
|
728
|
+
|
|
729
|
+
## 5. Anti-Patterns
|
|
730
|
+
|
|
731
|
+
These patterns degrade user experience, erode trust, and reduce conversion.
|
|
732
|
+
Backed by Baymard Institute, NNG, and Princeton's dark patterns research.
|
|
733
|
+
|
|
734
|
+
### 5.1 Forced Account Creation Before Checkout
|
|
735
|
+
|
|
736
|
+
**Problem:** Requiring users to create an account before they can purchase
|
|
737
|
+
is the second-highest reason for cart abandonment (24% of users -- Baymard).
|
|
738
|
+
|
|
739
|
+
**Why it persists:** Businesses want user data for marketing and analytics.
|
|
740
|
+
|
|
741
|
+
**Better approach:** Offer guest checkout as the primary path. Collect only
|
|
742
|
+
email for order confirmation. Offer account creation post-purchase ("Save your
|
|
743
|
+
info for next time") with a single password field.
|
|
744
|
+
|
|
745
|
+
### 5.2 Hidden Shipping Costs
|
|
746
|
+
|
|
747
|
+
**Problem:** 55% of cart abandonments are caused by unexpected extra costs
|
|
748
|
+
(shipping, taxes, fees) appearing at checkout (Baymard Institute).
|
|
749
|
+
|
|
750
|
+
**Why it persists:** Showing lower prices on PLPs increases click-through.
|
|
751
|
+
|
|
752
|
+
**Better approach:** Display shipping estimates on the PDP and in the cart.
|
|
753
|
+
Show a "Free shipping on orders over $X" banner site-wide. If exact shipping
|
|
754
|
+
cannot be calculated, show a range ("Shipping: $5.99 - $9.99").
|
|
755
|
+
|
|
756
|
+
### 5.3 Overly Complex Multi-Page Checkout
|
|
757
|
+
|
|
758
|
+
**Problem:** 18% of users abandon due to a "too long / complicated checkout
|
|
759
|
+
process." The average checkout has 23.48 form elements; the ideal is 12-14.
|
|
760
|
+
|
|
761
|
+
**Why it persists:** Legal requirements, business data needs, and legacy
|
|
762
|
+
systems accumulate fields over time.
|
|
763
|
+
|
|
764
|
+
**Better approach:** Audit every field. Remove optional fields or move them
|
|
765
|
+
behind a "Add [optional info]" link. Use address autocomplete to replace
|
|
766
|
+
5 fields with 1. Combine billing and shipping address with a "Same as
|
|
767
|
+
shipping" checkbox (default checked).
|
|
768
|
+
|
|
769
|
+
### 5.4 Too Many Form Fields
|
|
770
|
+
|
|
771
|
+
**Problem:** Every additional form field costs approximately 2-3% in
|
|
772
|
+
conversion rate (Baymard). Fields like "Company name", "Fax number",
|
|
773
|
+
"Middle name", or separate "First name" / "Last name" fields (when a single
|
|
774
|
+
"Full name" field suffices) add friction without value.
|
|
775
|
+
|
|
776
|
+
**Better approach:** Implement a single "Full name" field. Remove all optional
|
|
777
|
+
fields from the default view. Use smart defaults (auto-detect country from IP,
|
|
778
|
+
auto-format phone numbers). Pre-fill from browser autofill attributes.
|
|
779
|
+
|
|
780
|
+
### 5.5 No Guest Checkout Option
|
|
781
|
+
|
|
782
|
+
**Problem:** A subset of forced account creation, but worth calling out
|
|
783
|
+
specifically. Some sites literally have no path to purchase without creating
|
|
784
|
+
an account.
|
|
785
|
+
|
|
786
|
+
**Impact:** Direct conversion loss of 24% of potential buyers.
|
|
787
|
+
|
|
788
|
+
**Better approach:** Always provide guest checkout. If the business requires
|
|
789
|
+
accounts (e.g., subscription services), explain clearly why and what value the
|
|
790
|
+
account provides.
|
|
791
|
+
|
|
792
|
+
### 5.6 Misleading Urgency and Scarcity
|
|
793
|
+
|
|
794
|
+
**Problem:** Fake countdown timers that reset on page reload, fabricated stock
|
|
795
|
+
levels ("Only 2 left!" when inventory is abundant), manufactured demand
|
|
796
|
+
("23 people are viewing this right now" when false). Princeton researchers
|
|
797
|
+
found these patterns on 11,000+ shopping websites.
|
|
798
|
+
|
|
799
|
+
**Why it persists:** Short-term conversion lifts of 10-25%.
|
|
800
|
+
|
|
801
|
+
**Long-term damage:** 76% of users say they would stop using a product or
|
|
802
|
+
service if they discovered dark patterns (UX Collective). FTC enforcement is
|
|
803
|
+
increasing.
|
|
804
|
+
|
|
805
|
+
**Better approach:** Use urgency only when genuine (real sale end dates, actual
|
|
806
|
+
low stock). Show real-time stock counts from inventory systems. Use social
|
|
807
|
+
proof based on actual purchase data.
|
|
808
|
+
|
|
809
|
+
### 5.7 Dark Patterns in Pricing (Drip Pricing)
|
|
810
|
+
|
|
811
|
+
**Problem:** Slowly revealing mandatory fees throughout the purchase process.
|
|
812
|
+
Initial price shown on PLP excludes required fees (service charges, handling
|
|
813
|
+
fees, "convenience" fees) that are added at successive checkout steps. Consumer
|
|
814
|
+
Reports estimates hidden fees cost the average family over $3,200 annually.
|
|
815
|
+
Drip pricing increases final amounts by approximately 20% over the displayed
|
|
816
|
+
price.
|
|
817
|
+
|
|
818
|
+
**Better approach:** Show the all-in price from the beginning. Break down cost
|
|
819
|
+
components transparently in the order summary. If fees vary by region, show
|
|
820
|
+
"+ applicable taxes and shipping" clearly on the PLP.
|
|
821
|
+
|
|
822
|
+
### 5.8 Sneaking Items into Cart (Sneak into Basket)
|
|
823
|
+
|
|
824
|
+
**Problem:** Pre-checked add-ons, insurance, or donations that users do not
|
|
825
|
+
explicitly choose. The user must actively opt out to avoid unexpected charges.
|
|
826
|
+
|
|
827
|
+
**Better approach:** All add-ons should be opt-in. Present them clearly as
|
|
828
|
+
optional with unchecked checkboxes. Group them visually separate from the
|
|
829
|
+
main purchase.
|
|
830
|
+
|
|
831
|
+
### 5.9 Confirm-Shaming (Manipulinks)
|
|
832
|
+
|
|
833
|
+
**Problem:** Decline options written to shame the user: "No thanks, I don't
|
|
834
|
+
want to save money" or "I prefer to pay full price." This manipulates through
|
|
835
|
+
emotional pressure rather than value proposition.
|
|
836
|
+
|
|
837
|
+
**Better approach:** Use neutral language for decline options: "No thanks" or
|
|
838
|
+
"Skip". Let the value proposition of the offer speak for itself.
|
|
839
|
+
|
|
840
|
+
### 5.10 Forced Continuity (Subscription Traps)
|
|
841
|
+
|
|
842
|
+
**Problem:** Automatically enrolling users in subscription services after free
|
|
843
|
+
trials without clear notification. Making cancellation require phone calls,
|
|
844
|
+
multi-step processes, or hidden menu options. The FTC's 2024 "Click-to-Cancel"
|
|
845
|
+
rule specifically targets this pattern.
|
|
846
|
+
|
|
847
|
+
**Better approach:** Clearly state when a trial converts to paid. Send
|
|
848
|
+
reminders before charging. Make cancellation as easy as sign-up (same number
|
|
849
|
+
of clicks/steps, accessible from account settings).
|
|
850
|
+
|
|
851
|
+
### 5.11 Obstructing Comparison Shopping
|
|
852
|
+
|
|
853
|
+
**Problem:** Hiding prices until registration, preventing right-click or text
|
|
854
|
+
selection on prices, using images instead of text for pricing, or omitting
|
|
855
|
+
key specs to prevent comparison with competitors.
|
|
856
|
+
|
|
857
|
+
**Better approach:** Display prices publicly. Use structured data (Schema.org)
|
|
858
|
+
for prices to appear in search results. Provide comparison tools that
|
|
859
|
+
include competitor-relevant specs.
|
|
860
|
+
|
|
861
|
+
### 5.12 Bait and Switch Availability
|
|
862
|
+
|
|
863
|
+
**Problem:** Advertising products as in-stock on PLPs/ads that are actually
|
|
864
|
+
out of stock, then redirecting to more expensive alternatives. Or showing a
|
|
865
|
+
low price in ads/search results that is only available under specific,
|
|
866
|
+
undisclosed conditions.
|
|
867
|
+
|
|
868
|
+
**Better approach:** Synchronize inventory in real time. If a product sells
|
|
869
|
+
out between page views, show a clear "Out of stock" state with "Notify me
|
|
870
|
+
when available" and genuine alternative suggestions.
|
|
871
|
+
|
|
872
|
+
### 5.13 Dark Pattern Newsletter Sign-Up
|
|
873
|
+
|
|
874
|
+
**Problem:** Full-screen modal popups appearing within seconds of page load,
|
|
875
|
+
before the user has any relationship with the brand. Popups that obscure
|
|
876
|
+
content, have tiny close buttons, or use confirm-shaming language for the
|
|
877
|
+
dismiss action.
|
|
878
|
+
|
|
879
|
+
**Better approach:** Delay popups until the user has engaged (scrolled 50%+,
|
|
880
|
+
spent 30+ seconds, visited 2+ pages). Use slide-in banners rather than
|
|
881
|
+
modals. Make the close action prominent and neutral.
|
|
882
|
+
|
|
883
|
+
---
|
|
884
|
+
|
|
885
|
+
## 6. Accessibility
|
|
886
|
+
|
|
887
|
+
### 6.1 Price Screen Reader Formatting
|
|
888
|
+
|
|
889
|
+
Prices must be announced clearly and completely by screen readers, with full
|
|
890
|
+
context.
|
|
891
|
+
|
|
892
|
+
**Implementation:**
|
|
893
|
+
|
|
894
|
+
```html
|
|
895
|
+
<!-- BAD: Screen reader announces "$29" and "$39" separately, unclear meaning -->
|
|
896
|
+
<span class="price-current">$29.99</span>
|
|
897
|
+
<span class="price-original">$39.99</span>
|
|
898
|
+
|
|
899
|
+
<!-- GOOD: Full context via aria-label -->
|
|
900
|
+
<div aria-label="Current price: $29.99, originally $39.99, you save 25%">
|
|
901
|
+
<span aria-hidden="true">
|
|
902
|
+
<del>$39.99</del> <strong>$29.99</strong>
|
|
903
|
+
<span class="discount-badge">-25%</span>
|
|
904
|
+
</span>
|
|
905
|
+
</div>
|
|
906
|
+
|
|
907
|
+
<!-- ALTERNATIVE: Visually hidden text for screen readers -->
|
|
908
|
+
<div>
|
|
909
|
+
<span class="sr-only">Original price:</span>
|
|
910
|
+
<del>$39.99</del>
|
|
911
|
+
<span class="sr-only">Sale price:</span>
|
|
912
|
+
<strong>$29.99</strong>
|
|
913
|
+
<span class="sr-only">You save 25 percent</span>
|
|
914
|
+
<span class="discount-badge" aria-hidden="true">-25%</span>
|
|
915
|
+
</div>
|
|
916
|
+
```
|
|
917
|
+
|
|
918
|
+
**Key Rules:**
|
|
919
|
+
|
|
920
|
+
- Use `<del>` element for struck-through original prices (provides semantic
|
|
921
|
+
meaning to screen readers)
|
|
922
|
+
- Ensure currency is announced (use `aria-label` or visually hidden text)
|
|
923
|
+
- Announce savings amount/percentage
|
|
924
|
+
- Use `aria-live="polite"` on price containers that update dynamically (variant
|
|
925
|
+
selection, quantity changes)
|
|
926
|
+
- Format numbers consistently (no ambiguity between "$1,299" and "$1.299"
|
|
927
|
+
across locales)
|
|
928
|
+
|
|
929
|
+
### 6.2 Product Image Alt Text
|
|
930
|
+
|
|
931
|
+
Product images are the primary decision-making tool for sighted users. Alt text
|
|
932
|
+
must provide equivalent information for screen reader users.
|
|
933
|
+
|
|
934
|
+
**Guidelines:**
|
|
935
|
+
|
|
936
|
+
```html
|
|
937
|
+
<!-- BAD -->
|
|
938
|
+
<img src="shoe.jpg" alt="Product image">
|
|
939
|
+
<img src="shoe.jpg" alt="IMG_4392.jpg">
|
|
940
|
+
<img src="shoe.jpg" alt="">
|
|
941
|
+
|
|
942
|
+
<!-- GOOD: Primary product image -->
|
|
943
|
+
<img src="shoe.jpg"
|
|
944
|
+
alt="Men's Air Max 90 Running Shoe in Black/Red, side profile view.
|
|
945
|
+
Breathable mesh upper with leather overlays, visible Air Max cushioning
|
|
946
|
+
unit in heel.">
|
|
947
|
+
|
|
948
|
+
<!-- GOOD: Lifestyle/context image -->
|
|
949
|
+
<img src="shoe-lifestyle.jpg"
|
|
950
|
+
alt="Runner wearing Air Max 90 in Black/Red on a trail path, showing the
|
|
951
|
+
shoe in motion.">
|
|
952
|
+
|
|
953
|
+
<!-- GOOD: Color swatch -->
|
|
954
|
+
<img src="swatch-red.jpg" alt="University Red">
|
|
955
|
+
```
|
|
956
|
+
|
|
957
|
+
**Key Rules:**
|
|
958
|
+
|
|
959
|
+
- Describe the product, not the image file ("Black leather crossbody bag"
|
|
960
|
+
not "bag-photo-3.jpg")
|
|
961
|
+
- Include key visual attributes: color, material, style, orientation/view angle
|
|
962
|
+
- For gallery images, vary descriptions to cover different angles and details
|
|
963
|
+
- Color swatches must have text labels, not just color images -- "Red" not just
|
|
964
|
+
a red square
|
|
965
|
+
- Decorative/duplicate images can use `alt=""` but at least the primary product
|
|
966
|
+
image must have descriptive alt text
|
|
967
|
+
- For user-submitted review photos, use alt text like "Customer photo of
|
|
968
|
+
[product name]" as a minimum
|
|
969
|
+
|
|
970
|
+
### 6.3 Form Accessibility in Checkout
|
|
971
|
+
|
|
972
|
+
Checkout forms are where accessibility failures have the most direct revenue
|
|
973
|
+
impact. 71% of users with disabilities abandon inaccessible e-commerce sites
|
|
974
|
+
(UsableNet).
|
|
975
|
+
|
|
976
|
+
**Implementation Requirements:**
|
|
977
|
+
|
|
978
|
+
```html
|
|
979
|
+
<!-- Every input must have an associated label -->
|
|
980
|
+
<label for="email">Email address</label>
|
|
981
|
+
<input type="email" id="email" name="email"
|
|
982
|
+
autocomplete="email"
|
|
983
|
+
aria-required="true"
|
|
984
|
+
aria-describedby="email-help email-error">
|
|
985
|
+
<span id="email-help" class="help-text">
|
|
986
|
+
We'll send your order confirmation here
|
|
987
|
+
</span>
|
|
988
|
+
<span id="email-error" class="error" role="alert" aria-live="polite">
|
|
989
|
+
<!-- Populated dynamically on validation error -->
|
|
990
|
+
</span>
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
**Key Rules:**
|
|
994
|
+
|
|
995
|
+
- **Labels:** Every form field must have a visible `<label>` element linked
|
|
996
|
+
via `for`/`id`. Do not use placeholder text as the only label (it disappears
|
|
997
|
+
on focus and fails WCAG 1.3.1)
|
|
998
|
+
- **Error handling:** Use `role="alert"` and `aria-live="polite"` on error
|
|
999
|
+
message containers. Errors must be announced when they appear. Provide
|
|
1000
|
+
specific error text ("Enter a valid email address" not "Invalid input").
|
|
1001
|
+
Place error messages adjacent to the field, not only at the top of the form
|
|
1002
|
+
- **Required fields:** Use `aria-required="true"` and a visible indicator
|
|
1003
|
+
(asterisk with "* Required" legend). Do not rely on color alone
|
|
1004
|
+
- **Autocomplete:** Use correct `autocomplete` attributes (`given-name`,
|
|
1005
|
+
`family-name`, `street-address`, `postal-code`, `cc-number`, `cc-exp`, etc.)
|
|
1006
|
+
to enable browser and password manager autofill
|
|
1007
|
+
- **Keyboard navigation:** Ensure tab order follows visual order. All
|
|
1008
|
+
interactive elements must be focusable. Focus must be visible (never
|
|
1009
|
+
`outline: none` without a replacement focus indicator)
|
|
1010
|
+
- **Field grouping:** Use `<fieldset>` and `<legend>` for related field groups
|
|
1011
|
+
(shipping address, payment details). This provides context for screen reader
|
|
1012
|
+
users
|
|
1013
|
+
- **Input types:** Use appropriate `type` attributes (`email`, `tel`, `number`)
|
|
1014
|
+
and `inputmode` to trigger the correct mobile keyboard
|
|
1015
|
+
|
|
1016
|
+
### 6.4 Payment Method Accessibility
|
|
1017
|
+
|
|
1018
|
+
Payment is the highest-stakes form in the checkout flow. Errors here directly
|
|
1019
|
+
prevent purchase.
|
|
1020
|
+
|
|
1021
|
+
**Requirements:**
|
|
1022
|
+
|
|
1023
|
+
- **Card number input:** Use `inputmode="numeric"` and `autocomplete="cc-number"`.
|
|
1024
|
+
Format with spaces (4242 4242 4242 4242) for readability. Announce card brand
|
|
1025
|
+
detection to screen readers via `aria-live` region
|
|
1026
|
+
- **Expiration date:** Use a single input with `MM/YY` format and clear
|
|
1027
|
+
placeholder, or two separate select elements. Auto-advance from month to year
|
|
1028
|
+
field. Use `autocomplete="cc-exp"`
|
|
1029
|
+
- **CVV/CVC:** Provide a help icon that reveals a tooltip showing where to find
|
|
1030
|
+
the code on the card. Tooltip must be keyboard-accessible (triggered by
|
|
1031
|
+
focus, not just hover). Use `autocomplete="cc-csc"`
|
|
1032
|
+
- **Digital wallets:** Apple Pay and Google Pay buttons must meet minimum
|
|
1033
|
+
contrast ratios. Provide text alternatives for the button icons. Ensure the
|
|
1034
|
+
wallet payment sheet is navigable by screen readers
|
|
1035
|
+
- **Payment method selection:** Use radio buttons (not custom-styled divs) for
|
|
1036
|
+
payment method selection. Ensure the selected state is programmatically
|
|
1037
|
+
determinable (`aria-checked="true"`)
|
|
1038
|
+
- **Error recovery:** When payment fails, return focus to the first field
|
|
1039
|
+
with an error. Preserve all correctly entered data. Announce the error
|
|
1040
|
+
via `aria-live`
|
|
1041
|
+
|
|
1042
|
+
### 6.5 General E-Commerce Accessibility Requirements
|
|
1043
|
+
|
|
1044
|
+
**WCAG 2.1 AA Compliance (minimum for e-commerce):**
|
|
1045
|
+
|
|
1046
|
+
- **Color contrast:** 4.5:1 minimum for body text, 3:1 for large text and UI
|
|
1047
|
+
components. Critical for prices, availability status, and CTAs
|
|
1048
|
+
- **Target size:** Interactive elements must be at least 24x24px (WCAG 2.5.8
|
|
1049
|
+
in 2.2), with 44x44px recommended for primary touch targets
|
|
1050
|
+
- **Text resizing:** Content must remain usable at 200% zoom without horizontal
|
|
1051
|
+
scrolling
|
|
1052
|
+
- **Keyboard operability:** All functionality must be operable via keyboard
|
|
1053
|
+
alone (Tab, Enter, Space, Escape, arrow keys)
|
|
1054
|
+
- **Focus management:** Focus must be managed when content changes dynamically
|
|
1055
|
+
(modal open/close, cart update, checkout step transition)
|
|
1056
|
+
- **Semantic HTML:** Use proper heading hierarchy, landmark regions (`<main>`,
|
|
1057
|
+
`<nav>`, `<footer>`), lists, and tables. This is the foundation that makes
|
|
1058
|
+
all other accessibility work
|
|
1059
|
+
- **Skip links:** Provide "Skip to main content" and "Skip to checkout" links
|
|
1060
|
+
for keyboard users
|
|
1061
|
+
|
|
1062
|
+
**Testing Protocol:**
|
|
1063
|
+
|
|
1064
|
+
- Automated: axe, Lighthouse, WAVE -- catches ~30% of issues
|
|
1065
|
+
- Manual: keyboard-only navigation through full purchase flow
|
|
1066
|
+
- Screen reader: test with VoiceOver (macOS/iOS), NVDA (Windows), TalkBack
|
|
1067
|
+
(Android)
|
|
1068
|
+
- Magnification: test at 200% and 400% zoom
|
|
1069
|
+
- Color: test with color blindness simulators (protanopia, deuteranopia,
|
|
1070
|
+
tritanopia)
|
|
1071
|
+
|
|
1072
|
+
---
|
|
1073
|
+
|
|
1074
|
+
## 7. Cross-Platform Adaptation
|
|
1075
|
+
|
|
1076
|
+
### 7.1 Mobile Checkout Optimization
|
|
1077
|
+
|
|
1078
|
+
Mobile abandonment rates are approximately 79% versus 67% on desktop (Stripe,
|
|
1079
|
+
2025). Mobile checkout requires specific design adaptations.
|
|
1080
|
+
|
|
1081
|
+
**Layout:**
|
|
1082
|
+
|
|
1083
|
+
- Single-column layout exclusively -- multi-column forms do not work on small
|
|
1084
|
+
screens
|
|
1085
|
+
- Stack CTAs vertically with the primary action at the bottom of the viewport
|
|
1086
|
+
(thumb-zone accessible)
|
|
1087
|
+
- Use bottom sheets for secondary information (order summary, promo code entry)
|
|
1088
|
+
rather than inline expansion that pushes form fields off screen
|
|
1089
|
+
- Sticky order total bar at the bottom of the screen during checkout
|
|
1090
|
+
|
|
1091
|
+
**Input Optimization:**
|
|
1092
|
+
|
|
1093
|
+
- Trigger the correct mobile keyboard for each field type:
|
|
1094
|
+
- `inputmode="numeric"` for card numbers, CVV, zip code
|
|
1095
|
+
- `inputmode="email"` for email fields
|
|
1096
|
+
- `inputmode="tel"` for phone numbers
|
|
1097
|
+
- Enable autofill via correct `autocomplete` attributes -- this is the single
|
|
1098
|
+
highest-impact mobile checkout optimization
|
|
1099
|
+
- Use address autocomplete (Google Places, Mapbox) to replace 5+ address fields
|
|
1100
|
+
with a single search input
|
|
1101
|
+
- Minimize typing: use selectors/dropdowns for country, state/province,
|
|
1102
|
+
expiration month/year
|
|
1103
|
+
|
|
1104
|
+
**Touch Targets:**
|
|
1105
|
+
|
|
1106
|
+
- Minimum 48x48px for all interactive elements (buttons, links, form fields,
|
|
1107
|
+
checkboxes, radio buttons)
|
|
1108
|
+
- Minimum 8px spacing between adjacent tap targets
|
|
1109
|
+
- Stepper controls (quantity +/-) must be large enough for reliable tapping
|
|
1110
|
+
|
|
1111
|
+
**Performance:**
|
|
1112
|
+
|
|
1113
|
+
- Target < 3 second load time for checkout page on 4G
|
|
1114
|
+
- Lazy-load non-critical elements (product thumbnails in order summary)
|
|
1115
|
+
- Minimize JavaScript execution -- every 100ms of input delay increases
|
|
1116
|
+
abandonment
|
|
1117
|
+
|
|
1118
|
+
### 7.2 Apple Pay / Google Pay Integration
|
|
1119
|
+
|
|
1120
|
+
Digital wallets increase mobile conversion by 12-18% and account for
|
|
1121
|
+
approximately 30% of online transactions.
|
|
1122
|
+
|
|
1123
|
+
**Placement Strategy:**
|
|
1124
|
+
|
|
1125
|
+
- Present digital wallet options BEFORE manual card entry, not after. Most
|
|
1126
|
+
checkouts hide Apple Pay / Google Pay at the bottom of payment selection,
|
|
1127
|
+
after users have already started typing card numbers. Reversing this order
|
|
1128
|
+
increases wallet adoption and reduces abandonment
|
|
1129
|
+
- Show wallet buttons on: PDP (Buy with Apple Pay), Cart page, Checkout
|
|
1130
|
+
payment step
|
|
1131
|
+
- Use the official button styles and guidelines from Apple and Google -- custom
|
|
1132
|
+
styling reduces trust and violates platform terms
|
|
1133
|
+
|
|
1134
|
+
**Implementation:**
|
|
1135
|
+
|
|
1136
|
+
```
|
|
1137
|
+
+------------------------------------------+
|
|
1138
|
+
| Express Checkout |
|
|
1139
|
+
| +------------------+ +---------------+ |
|
|
1140
|
+
| | Apple Pay | | Google Pay | |
|
|
1141
|
+
| +------------------+ +---------------+ |
|
|
1142
|
+
| |
|
|
1143
|
+
| ── or pay with card ────────────────── |
|
|
1144
|
+
| |
|
|
1145
|
+
| Card number: [ ] |
|
|
1146
|
+
| Expiration: [ ] CVV: [ ] |
|
|
1147
|
+
| ... |
|
|
1148
|
+
+------------------------------------------+
|
|
1149
|
+
```
|
|
1150
|
+
|
|
1151
|
+
**UX Considerations:**
|
|
1152
|
+
|
|
1153
|
+
- Detect wallet availability via JavaScript APIs before rendering buttons
|
|
1154
|
+
(do not show Apple Pay on Android or Google Pay on iOS)
|
|
1155
|
+
- Handle wallet-specific flows gracefully: Apple Pay presents a native payment
|
|
1156
|
+
sheet that collects shipping address and method. Your checkout must update
|
|
1157
|
+
shipping costs in real time within the sheet
|
|
1158
|
+
- Provide clear fallback messaging if a wallet transaction fails: "Apple Pay
|
|
1159
|
+
could not process your payment. Please try again or use a different payment
|
|
1160
|
+
method."
|
|
1161
|
+
|
|
1162
|
+
### 7.3 Responsive Product Grids
|
|
1163
|
+
|
|
1164
|
+
Product grids must adapt fluidly across breakpoints while maintaining
|
|
1165
|
+
scannability and usability.
|
|
1166
|
+
|
|
1167
|
+
**Breakpoint Strategy:**
|
|
1168
|
+
|
|
1169
|
+
| Viewport | Columns | Card Content | Filter Position |
|
|
1170
|
+
|----------------|---------|---------------------------|--------------------|
|
|
1171
|
+
| Desktop (1200+)| 3-4 | Image, title, price, | Left sidebar, |
|
|
1172
|
+
| | | rating, quick-add | always visible |
|
|
1173
|
+
| Tablet (768) | 2-3 | Image, title, price, | Collapsible sidebar|
|
|
1174
|
+
| | | rating | or top bar |
|
|
1175
|
+
| Mobile (< 768) | 1-2 | Image, title, price | Bottom sheet or |
|
|
1176
|
+
| | | | filter drawer |
|
|
1177
|
+
|
|
1178
|
+
**Responsive Considerations:**
|
|
1179
|
+
|
|
1180
|
+
- Use CSS Grid or Flexbox with `minmax()` for fluid column counts rather than
|
|
1181
|
+
fixed breakpoints alone
|
|
1182
|
+
- Product card images should maintain consistent aspect ratios (1:1 or 4:3)
|
|
1183
|
+
across breakpoints to prevent layout shift
|
|
1184
|
+
- On mobile, consider a horizontal scrolling product row for "Recommended"
|
|
1185
|
+
sections (saves vertical space)
|
|
1186
|
+
- "Quick view" modals should become full-screen on mobile
|
|
1187
|
+
- Filter counts update in real time on all viewport sizes
|
|
1188
|
+
- Sort controls remain accessible (sticky or within thumb reach) on mobile
|
|
1189
|
+
|
|
1190
|
+
**Image Optimization:**
|
|
1191
|
+
|
|
1192
|
+
- Serve responsive images via `srcset` and `sizes` attributes
|
|
1193
|
+
- Use WebP/AVIF formats with JPEG fallback
|
|
1194
|
+
- Implement lazy loading for below-fold product cards (`loading="lazy"`)
|
|
1195
|
+
- Placeholder aspect-ratio boxes prevent cumulative layout shift (CLS)
|
|
1196
|
+
|
|
1197
|
+
---
|
|
1198
|
+
|
|
1199
|
+
## 8. Decision Tree
|
|
1200
|
+
|
|
1201
|
+
### 8.1 Single-Page vs. Multi-Step Checkout
|
|
1202
|
+
|
|
1203
|
+
Use this decision framework to choose the right checkout architecture:
|
|
1204
|
+
|
|
1205
|
+
```
|
|
1206
|
+
START: What is your primary use case?
|
|
1207
|
+
|
|
|
1208
|
+
+-- Average order value < $150 AND 70%+ mobile traffic?
|
|
1209
|
+
| |
|
|
1210
|
+
| YES --> Single-page checkout
|
|
1211
|
+
| | - 10-15% higher conversion vs. multi-step
|
|
1212
|
+
| | - Reduces perceived steps
|
|
1213
|
+
| | - Ideal for impulse/convenience purchases
|
|
1214
|
+
| |
|
|
1215
|
+
| NO --> Continue evaluation
|
|
1216
|
+
|
|
|
1217
|
+
+-- Complex product configuration (custom items, B2B, subscriptions)?
|
|
1218
|
+
| |
|
|
1219
|
+
| YES --> Multi-step checkout
|
|
1220
|
+
| | - Each step handles distinct concerns
|
|
1221
|
+
| | - Easier to validate complex inputs per step
|
|
1222
|
+
| | - Better analytics (identify exact drop-off step)
|
|
1223
|
+
| |
|
|
1224
|
+
| NO --> Continue evaluation
|
|
1225
|
+
|
|
|
1226
|
+
+-- Average order value > $200?
|
|
1227
|
+
| |
|
|
1228
|
+
| YES --> Consider multi-step
|
|
1229
|
+
| | - Completion rates of 82.4% vs. 78.1% for single-page
|
|
1230
|
+
| | - Higher-value purchases benefit from structured review
|
|
1231
|
+
| | - Each step provides a "commitment checkpoint"
|
|
1232
|
+
| |
|
|
1233
|
+
| NO --> Continue evaluation
|
|
1234
|
+
|
|
|
1235
|
+
+-- Few SKUs, simple product catalog, standard shipping?
|
|
1236
|
+
| |
|
|
1237
|
+
| YES --> Single-page checkout
|
|
1238
|
+
| | - Less complexity = fewer fields = single page works
|
|
1239
|
+
| |
|
|
1240
|
+
| NO --> Multi-step checkout
|
|
1241
|
+
| - Handle complexity in manageable chunks
|
|
1242
|
+
|
|
|
1243
|
+
UNIVERSAL RULES (regardless of choice):
|
|
1244
|
+
- Maximum 12-14 form elements total
|
|
1245
|
+
- Always offer guest checkout
|
|
1246
|
+
- Always show order summary alongside form fields
|
|
1247
|
+
- Always provide express checkout (digital wallets)
|
|
1248
|
+
- Always show progress/step context
|
|
1249
|
+
- Test your specific audience -- these are guidelines, not absolutes
|
|
1250
|
+
```
|
|
1251
|
+
|
|
1252
|
+
### 8.2 When to Require Account Creation
|
|
1253
|
+
|
|
1254
|
+
```
|
|
1255
|
+
START: Does the user need an account to use your product?
|
|
1256
|
+
|
|
|
1257
|
+
+-- Subscription / recurring service?
|
|
1258
|
+
| |
|
|
1259
|
+
| YES --> Require account, but explain why clearly
|
|
1260
|
+
| | "You'll need an account to manage your subscription,
|
|
1261
|
+
| | update preferences, and pause/cancel anytime."
|
|
1262
|
+
| | - Collect only email + password
|
|
1263
|
+
| | - Defer profile completion to post-purchase
|
|
1264
|
+
| |
|
|
1265
|
+
| NO --> Continue evaluation
|
|
1266
|
+
|
|
|
1267
|
+
+-- One-time purchase (physical goods, digital downloads)?
|
|
1268
|
+
| |
|
|
1269
|
+
| YES --> NEVER require account before checkout
|
|
1270
|
+
| | - Offer guest checkout as primary path
|
|
1271
|
+
| | - Post-purchase: "Save your info for next time?"
|
|
1272
|
+
| | - 25-30% of guest users convert to accounts this way
|
|
1273
|
+
| |
|
|
1274
|
+
| NO --> Continue evaluation
|
|
1275
|
+
|
|
|
1276
|
+
+-- Marketplace / platform (user-to-user transactions)?
|
|
1277
|
+
| |
|
|
1278
|
+
| YES --> Require account for sellers, optional for buyers
|
|
1279
|
+
| | - Buyers can guest checkout for first purchase
|
|
1280
|
+
| | - Prompt account creation for order tracking
|
|
1281
|
+
| |
|
|
1282
|
+
| NO --> Evaluate case by case
|
|
1283
|
+
|
|
|
1284
|
+
ACCOUNT CREATION PRINCIPLES:
|
|
1285
|
+
- Social login (Google, Apple) reduces friction by ~40%
|
|
1286
|
+
- Email + password is the minimum viable account
|
|
1287
|
+
- Never require phone number, address, or demographics at sign-up
|
|
1288
|
+
- Clearly communicate the value of having an account:
|
|
1289
|
+
* Order tracking
|
|
1290
|
+
* Faster future checkout
|
|
1291
|
+
* Wishlist persistence
|
|
1292
|
+
* Exclusive member pricing or early access
|
|
1293
|
+
- If you offer a loyalty program, frame account creation as
|
|
1294
|
+
"joining" the program rather than "registering"
|
|
1295
|
+
```
|
|
1296
|
+
|
|
1297
|
+
### 8.3 When to Use a Cart Drawer vs. Cart Page
|
|
1298
|
+
|
|
1299
|
+
```
|
|
1300
|
+
START: What is your catalog and purchase behavior?
|
|
1301
|
+
|
|
|
1302
|
+
+-- Primarily single-item purchases?
|
|
1303
|
+
| |
|
|
1304
|
+
| YES --> Cart drawer (slide-in mini cart)
|
|
1305
|
+
| | - Faster path to checkout
|
|
1306
|
+
| | - User stays in browsing context
|
|
1307
|
+
| | - Skip the dedicated cart page entirely
|
|
1308
|
+
| |
|
|
1309
|
+
| NO --> Continue
|
|
1310
|
+
|
|
|
1311
|
+
+-- Multi-item shopping typical (grocery, office supplies)?
|
|
1312
|
+
| |
|
|
1313
|
+
| YES --> Full cart page
|
|
1314
|
+
| | - Better for reviewing many items
|
|
1315
|
+
| | - Easier quantity editing across items
|
|
1316
|
+
| | - More space for upsells and saved-for-later
|
|
1317
|
+
| |
|
|
1318
|
+
| NO --> Continue
|
|
1319
|
+
|
|
|
1320
|
+
+-- Average 2-4 items per order?
|
|
1321
|
+
|
|
|
1322
|
+
YES --> Cart drawer with "View full cart" link
|
|
1323
|
+
- Quick confirmation for small additions
|
|
1324
|
+
- Full page available for detailed review
|
|
1325
|
+
```
|
|
1326
|
+
|
|
1327
|
+
---
|
|
1328
|
+
|
|
1329
|
+
## 9. Quick Reference Checklist
|
|
1330
|
+
|
|
1331
|
+
### Product Listing Page
|
|
1332
|
+
- [ ] Product cards show: image, title, price, rating, availability
|
|
1333
|
+
- [ ] Grid/list view toggle available (consumer catalogs)
|
|
1334
|
+
- [ ] Filters are multi-select (checkboxes, not radio buttons)
|
|
1335
|
+
- [ ] Filters update results in real time (no "Apply" button)
|
|
1336
|
+
- [ ] Sort options include relevance, price, rating, newest
|
|
1337
|
+
- [ ] Mobile filters accessible via sticky button or bottom sheet
|
|
1338
|
+
- [ ] Result count and applied filters visible
|
|
1339
|
+
- [ ] Color swatches have text labels, not just color circles
|
|
1340
|
+
|
|
1341
|
+
### Product Detail Page
|
|
1342
|
+
- [ ] Primary image above the fold with zoom capability
|
|
1343
|
+
- [ ] Price, availability, and CTA above the fold
|
|
1344
|
+
- [ ] Variant selection updates product image
|
|
1345
|
+
- [ ] Star rating with review count near product title
|
|
1346
|
+
- [ ] Shipping estimate and return policy visible
|
|
1347
|
+
- [ ] "Add to Cart" is visually dominant CTA
|
|
1348
|
+
- [ ] Product description uses progressive disclosure
|
|
1349
|
+
- [ ] Related/recommended products below the fold
|
|
1350
|
+
- [ ] Alt text is descriptive for all product images
|
|
1351
|
+
|
|
1352
|
+
### Cart
|
|
1353
|
+
- [ ] Line items show thumbnail, name, variant, price, quantity, total
|
|
1354
|
+
- [ ] Quantity stepper with direct numeric input option
|
|
1355
|
+
- [ ] Real-time price updates on quantity change
|
|
1356
|
+
- [ ] Order summary shows subtotal, shipping, tax, total
|
|
1357
|
+
- [ ] Promo code field is collapsible (not prominent)
|
|
1358
|
+
- [ ] Express checkout options (Apple Pay, Google Pay) visible
|
|
1359
|
+
- [ ] Empty cart state is helpful (not blank)
|
|
1360
|
+
- [ ] "Save for Later" option available
|
|
1361
|
+
- [ ] Cart persists across sessions
|
|
1362
|
+
|
|
1363
|
+
### Checkout
|
|
1364
|
+
- [ ] Guest checkout offered as equal option to sign-in
|
|
1365
|
+
- [ ] Maximum 12-14 form elements
|
|
1366
|
+
- [ ] Address autocomplete implemented
|
|
1367
|
+
- [ ] Correct autocomplete attributes on all fields
|
|
1368
|
+
- [ ] Digital wallets presented BEFORE manual card entry
|
|
1369
|
+
- [ ] All costs shown before payment step (no hidden fees)
|
|
1370
|
+
- [ ] Progress indicator visible (steps or progress bar)
|
|
1371
|
+
- [ ] Real-time inline validation with specific error messages
|
|
1372
|
+
- [ ] Order summary visible throughout checkout (sticky sidebar / expandable)
|
|
1373
|
+
- [ ] "Place Order" button shows total amount
|
|
1374
|
+
- [ ] Form fields have visible labels (not placeholder-only)
|
|
1375
|
+
- [ ] Back navigation to previous steps is available
|
|
1376
|
+
|
|
1377
|
+
### Accessibility
|
|
1378
|
+
- [ ] All prices announced correctly by screen readers
|
|
1379
|
+
- [ ] Product images have descriptive alt text
|
|
1380
|
+
- [ ] Form fields have associated labels and error messages
|
|
1381
|
+
- [ ] Keyboard navigation works through entire purchase flow
|
|
1382
|
+
- [ ] Color contrast meets WCAG 2.1 AA (4.5:1 text, 3:1 UI)
|
|
1383
|
+
- [ ] Touch targets are 44x44px minimum (48x48px preferred)
|
|
1384
|
+
- [ ] Focus indicators are visible on all interactive elements
|
|
1385
|
+
- [ ] `aria-live` regions for dynamic content (price updates, cart count)
|
|
1386
|
+
- [ ] `prefers-reduced-motion` respected for animations
|
|
1387
|
+
- [ ] Skip links provided for keyboard users
|
|
1388
|
+
|
|
1389
|
+
### Mobile
|
|
1390
|
+
- [ ] Single-column checkout layout
|
|
1391
|
+
- [ ] Correct input types trigger appropriate mobile keyboards
|
|
1392
|
+
- [ ] Autofill enabled via autocomplete attributes
|
|
1393
|
+
- [ ] Sticky order total visible during checkout
|
|
1394
|
+
- [ ] Touch targets meet minimum size requirements
|
|
1395
|
+
- [ ] Page load < 3 seconds on 4G
|
|
1396
|
+
- [ ] Digital wallet buttons detect platform availability
|
|
1397
|
+
- [ ] Product grid adapts column count to viewport
|
|
1398
|
+
|
|
1399
|
+
### Trust & Transparency
|
|
1400
|
+
- [ ] No hidden fees or drip pricing
|
|
1401
|
+
- [ ] No forced account creation before checkout
|
|
1402
|
+
- [ ] No pre-checked add-ons (opt-in only)
|
|
1403
|
+
- [ ] No fake urgency or fabricated scarcity
|
|
1404
|
+
- [ ] No confirm-shaming on decline options
|
|
1405
|
+
- [ ] Return policy visible pre-purchase
|
|
1406
|
+
- [ ] Security indicators on payment forms
|
|
1407
|
+
- [ ] Real-time order tracking available post-purchase
|
|
1408
|
+
|
|
1409
|
+
---
|
|
1410
|
+
|
|
1411
|
+
## 10. Sources & Citations
|
|
1412
|
+
|
|
1413
|
+
### Research Institutions
|
|
1414
|
+
|
|
1415
|
+
- **Baymard Institute** -- E-Commerce Checkout Usability research (41,000+
|
|
1416
|
+
checkout performance scores, 650+ UX guidelines, 327 benchmarked sites).
|
|
1417
|
+
Key findings: 35% conversion increase achievable through checkout UX fixes;
|
|
1418
|
+
average 70-78% cart abandonment rate; 23.48 average form elements vs. 12-14
|
|
1419
|
+
ideal. https://baymard.com/research/checkout-usability
|
|
1420
|
+
- **Baymard Institute** -- Cart Abandonment Rate Statistics (50+ data points,
|
|
1421
|
+
meta-analysis of 49 studies). https://baymard.com/lists/cart-abandonment-rate
|
|
1422
|
+
- **Baymard Institute** -- Product Page UX Best Practices 2025.
|
|
1423
|
+
https://baymard.com/blog/current-state-ecommerce-product-page-ux
|
|
1424
|
+
- **Baymard Institute** -- E-Commerce Accessibility Research.
|
|
1425
|
+
https://baymard.com/research/accessibility
|
|
1426
|
+
- **Nielsen Norman Group (NNG)** -- E-Commerce UX Research Reports (1,073
|
|
1427
|
+
design guidelines across 13 volumes, 350+ websites tested across 5 countries).
|
|
1428
|
+
https://www.nngroup.com/reports/ecommerce-user-experience/
|
|
1429
|
+
- **NNG** -- Product Page UX Guidelines (108 guidelines).
|
|
1430
|
+
https://www.nngroup.com/reports/ecommerce-ux-product-pages-including-reviews/
|
|
1431
|
+
- **NNG** -- Trust and Credibility in E-Commerce (53 UX guidelines).
|
|
1432
|
+
https://www.nngroup.com/reports/ecommerce-ux-trust-and-credibility/
|
|
1433
|
+
- **Princeton University** -- Dark Patterns at Scale: Findings from a Crawl of
|
|
1434
|
+
11K Shopping Websites.
|
|
1435
|
+
https://webtransparency.cs.princeton.edu/dark-patterns/
|
|
1436
|
+
|
|
1437
|
+
### Design Systems & Platform Documentation
|
|
1438
|
+
|
|
1439
|
+
- **Shopify Polaris** -- Design system for e-commerce, unified Web Components
|
|
1440
|
+
across Admin, Checkout, and Customer Accounts.
|
|
1441
|
+
https://polaris-react.shopify.com/
|
|
1442
|
+
- **Shopify Polaris** -- 2025 unified and web-first architecture.
|
|
1443
|
+
https://www.shopify.com/partners/blog/polaris-unified-and-for-the-web
|
|
1444
|
+
- **Stripe** -- Payment Page Template Best Practices.
|
|
1445
|
+
https://stripe.com/resources/more/payment-page-template-best-practices
|
|
1446
|
+
- **Stripe** -- Checkout UI Design Strategies.
|
|
1447
|
+
https://stripe.com/resources/more/checkout-ui-strategies-for-faster-and-more-intuitive-transactions
|
|
1448
|
+
- **Stripe** -- Mobile Checkout UI Best Practices.
|
|
1449
|
+
https://stripe.com/resources/more/mobile-checkout-ui
|
|
1450
|
+
- **Stripe** -- Credit Card Checkout UI Design Guide.
|
|
1451
|
+
https://stripe.com/resources/more/credit-card-checkout-ui-design
|
|
1452
|
+
- **Stripe** -- One-Page Checkout vs. Multistep Checkout.
|
|
1453
|
+
https://stripe.com/resources/more/one-page-checkout-vs-multistep-checkout
|
|
1454
|
+
- **Google** -- Google Pay UX Best Practices.
|
|
1455
|
+
https://developers.google.com/pay/api/web/guides/ux-best-practices
|
|
1456
|
+
|
|
1457
|
+
### Accessibility Standards
|
|
1458
|
+
|
|
1459
|
+
- **W3C WCAG 2.1 AA** -- Web Content Accessibility Guidelines (minimum
|
|
1460
|
+
compliance standard for e-commerce).
|
|
1461
|
+
- **AllAccessible** -- E-Commerce Accessibility 2025 WCAG Compliance Guide.
|
|
1462
|
+
https://www.allaccessible.org/blog/ecommerce-accessibility-complete-guide-wcag
|
|
1463
|
+
- **TestParty** -- E-Commerce Checkout Accessibility WCAG Compliance Guide.
|
|
1464
|
+
https://testparty.ai/blog/ecommerce-checkout-accessibility
|
|
1465
|
+
- **UsableNet** -- E-Commerce Website Accessibility Guide (71% of users with
|
|
1466
|
+
disabilities abandon inaccessible sites; 4,605 ADA lawsuits in 2024, 68%
|
|
1467
|
+
targeting e-commerce).
|
|
1468
|
+
https://blog.usablenet.com/ecommerce-website-accessibility-guide
|
|
1469
|
+
|
|
1470
|
+
### Industry Data & Case Studies
|
|
1471
|
+
|
|
1472
|
+
- **Statista** -- Global Digital Shopping Cart Abandonment Rate 2026.
|
|
1473
|
+
https://www.statista.com/statistics/477804/online-shopping-cart-abandonment-rate-worldwide/
|
|
1474
|
+
- **Spiegel Research Center** -- 95% of consumers consult reviews before
|
|
1475
|
+
purchasing.
|
|
1476
|
+
- **Consumer Reports** -- Hidden fees cost the average family $3,200+ annually.
|
|
1477
|
+
- **UX Collective** -- 76% of users would stop using a product if they
|
|
1478
|
+
discovered dark patterns.
|
|
1479
|
+
- **FTC** -- Negative Option Rule amendment (2024), "Click-to-Cancel" provision.
|
|
1480
|
+
- **Baymard Institute** -- Apple UX Case Study.
|
|
1481
|
+
https://baymard.com/ux-benchmark/case-studies/apple
|
|
1482
|
+
- **Baymard Institute** -- Nike UX Case Study.
|
|
1483
|
+
https://baymard.com/ux-benchmark/case-studies/nike
|
|
1484
|
+
- **Baymard Institute** -- Amazon UX Case Study.
|
|
1485
|
+
https://baymard.com/ux-benchmark/case-studies/amazon
|
|
1486
|
+
|
|
1487
|
+
---
|
|
1488
|
+
|
|
1489
|
+
*Last updated: 2026-03-07. This document synthesizes findings from Baymard
|
|
1490
|
+
Institute (41,000+ checkout scores, 650+ guidelines), Nielsen Norman Group
|
|
1491
|
+
(1,073 e-commerce design guidelines, 5 rounds of international testing),
|
|
1492
|
+
Shopify Polaris design system documentation, Stripe checkout research, and
|
|
1493
|
+
WCAG 2.1 AA accessibility standards. Statistics reflect 2025-2026 data where
|
|
1494
|
+
available.*
|