@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,680 @@
|
|
|
1
|
+
# UX Anti-Patterns
|
|
2
|
+
|
|
3
|
+
> User experience anti-patterns are design decisions that actively harm usability, erode user trust, and drive abandonment. Unlike visual bugs, UX anti-patterns are often invisible in screenshots -- they reveal themselves only when a real human tries to accomplish a real task. These patterns are especially dangerous because they frequently survive design reviews ("it looks fine") while silently destroying conversion rates, accessibility, and user satisfaction.
|
|
4
|
+
|
|
5
|
+
> **Domain:** Design
|
|
6
|
+
> **Anti-patterns covered:** 21
|
|
7
|
+
> **Highest severity:** Critical
|
|
8
|
+
|
|
9
|
+
## Anti-Patterns
|
|
10
|
+
|
|
11
|
+
### AP-01: Mystery Meat Navigation
|
|
12
|
+
|
|
13
|
+
**Also known as:** Unlabeled icons, icon-only navigation, "guess what this does" UI
|
|
14
|
+
**Frequency:** Very Common
|
|
15
|
+
**Severity:** High
|
|
16
|
+
**Detection difficulty:** Moderate
|
|
17
|
+
|
|
18
|
+
**What it looks like:**
|
|
19
|
+
Navigation elements that rely entirely on abstract icons, unlabeled graphics, or hover-dependent labels. Users must mouse over every element to discover what it does. Common manifestations include icon-only toolbars with no tooltips, navigation items that only reveal their purpose on hover, and creative but ambiguous iconography that prioritizes aesthetics over clarity.
|
|
20
|
+
|
|
21
|
+
**Why developers do it:**
|
|
22
|
+
Designers pursue visual minimalism and assume icons are universally understood. The hamburger menu icon took years of mainstream adoption before recognition rates climbed above 50%. Teams often test with internal users who already know what every icon means, creating a false sense of clarity. "Clean" interfaces win design awards; labeled interfaces do not.
|
|
23
|
+
|
|
24
|
+
**What goes wrong:**
|
|
25
|
+
Users click randomly hoping to find the right function, a behavior known as "pogo-sticking." Web Pages That Suck documented hundreds of real-world mystery meat navigation examples where users could not identify clickable elements without hovering over every pixel. Interaction Design Foundation research shows that unclear navigation increases time-on-task by 2-3x and dramatically raises bounce rates. Users who cannot find a feature within 10-15 seconds assume it does not exist.
|
|
26
|
+
|
|
27
|
+
**The fix:**
|
|
28
|
+
- Always pair icons with text labels, especially in primary navigation.
|
|
29
|
+
- Use tooltips as a supplement, never as the only label.
|
|
30
|
+
- Test with five users who have never seen the interface -- if any hesitate on navigation, add labels.
|
|
31
|
+
- Follow the "5-second test": show the screen for 5 seconds, then ask users to identify the primary actions.
|
|
32
|
+
|
|
33
|
+
**Detection rule:**
|
|
34
|
+
If a navigation component renders icons without adjacent text labels and has no `aria-label` or visible text within the interactive element, suspect AP-01.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### AP-02: Infinite Scroll Without Position Memory
|
|
39
|
+
|
|
40
|
+
**Also known as:** Scroll amnesia, bottomless pit, scroll purgatory
|
|
41
|
+
**Frequency:** Very Common
|
|
42
|
+
**Severity:** High
|
|
43
|
+
**Detection difficulty:** Easy
|
|
44
|
+
|
|
45
|
+
**What it looks like:**
|
|
46
|
+
Content loads endlessly as the user scrolls down, but the interface provides no way to bookmark a position, return to a previous spot, or understand how much content remains. Clicking an item and pressing "Back" returns the user to the top of the feed, losing all scroll progress. The footer is unreachable. The scrollbar thumb shrinks to a pixel.
|
|
47
|
+
|
|
48
|
+
**Why developers do it:**
|
|
49
|
+
Infinite scroll increases engagement metrics (time on page, content views) and is technically simpler than pagination. Product managers see social media apps using it and assume it works universally. It avoids the "dead end" of reaching the last page. The American Psychological Association has flagged infinite scroll as "particularly risky" for younger users because it exploits psychological patterns around variable-ratio reinforcement.
|
|
50
|
+
|
|
51
|
+
**What goes wrong:**
|
|
52
|
+
Smashing Magazine's 2022 research documented that infinite scroll causes disorientation when users lose their position, especially on content-heavy or e-commerce sites. Users cannot share a specific position with others. The browser back button resets to the top, which Nielsen Norman Group identifies as a severe usability violation. Memory usage grows unbounded -- on low-end mobile devices, pages with 500+ dynamically loaded items cause crashes and severe jank. Keyboard-only users and screen reader users face extreme difficulty navigating, as they must tab through every single loaded item.
|
|
53
|
+
|
|
54
|
+
**The fix:**
|
|
55
|
+
- Implement scroll position restoration on back-navigation (use `history.scrollRestoration` or cache scroll offsets).
|
|
56
|
+
- Show a "You were here" marker when users return.
|
|
57
|
+
- Display a progress indicator (e.g., "Showing items 1-50 of ~2,400").
|
|
58
|
+
- Virtualize the DOM -- only render items in and near the viewport.
|
|
59
|
+
- Provide a "Back to top" button and consider hybrid pagination ("Load more" button instead of auto-loading).
|
|
60
|
+
- Ensure the footer remains accessible via a persistent link.
|
|
61
|
+
|
|
62
|
+
**Detection rule:**
|
|
63
|
+
If a scrollable list dynamically appends content on scroll but does not persist scroll position across navigation events or store position in the URL/history state, suspect AP-02.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### AP-03: Modal Overload
|
|
68
|
+
|
|
69
|
+
**Also known as:** Dialog fatigue, interruptive modals, pop-up hell
|
|
70
|
+
**Frequency:** Very Common
|
|
71
|
+
**Severity:** High
|
|
72
|
+
**Detection difficulty:** Easy
|
|
73
|
+
|
|
74
|
+
**What it looks like:**
|
|
75
|
+
Modal dialogs used for non-critical information: newsletter sign-up prompts on first visit, cookie consent overlays stacked with notification permission requests, "rate our app" modals triggered mid-task, or informational messages that could be inline banners. Users face a cascade of modals before they can interact with any content.
|
|
76
|
+
|
|
77
|
+
**Why developers do it:**
|
|
78
|
+
Modals guarantee visibility -- unlike banners, users cannot scroll past them. Marketing teams push for email capture modals because they do capture some percentage of emails (typically 2-5%). Product teams use modals for announcements because inline notices get ignored. The ease of implementing modal libraries (a single component call) lowers the barrier to overuse.
|
|
79
|
+
|
|
80
|
+
**What goes wrong:**
|
|
81
|
+
Research published on Medium ("The High Cost of Interruption") documents that each modal interruption forces a context switch that costs 15-25 seconds of recovery time. Nielsen Norman Group's guidelines on modal and nonmodal dialogs show that repeated interruptions train users to dismiss all modals reflexively -- including critical ones like unsaved-changes warnings. UX research firm Baymard found that aggressive modal usage on e-commerce sites correlates with higher abandonment rates. When a modal obscures background content, users lose the context they need to make the decision the modal is asking about, increasing cognitive load.
|
|
82
|
+
|
|
83
|
+
**The fix:**
|
|
84
|
+
- Reserve modals exclusively for: (1) confirming destructive/irreversible actions, (2) critical blocking errors, (3) essential input that cannot proceed without.
|
|
85
|
+
- Use inline banners, toast notifications, or collapsible sections for everything else.
|
|
86
|
+
- Never show a modal before the user has interacted with the page.
|
|
87
|
+
- Limit to one modal per user session for non-critical prompts.
|
|
88
|
+
- Always provide a clear, visible close/dismiss mechanism (X button, click-outside, Escape key).
|
|
89
|
+
|
|
90
|
+
**Detection rule:**
|
|
91
|
+
If a modal is triggered by a page load event, a timer, or a scroll threshold rather than by an explicit user action, suspect AP-03.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### AP-04: Registration Wall Before Value
|
|
96
|
+
|
|
97
|
+
**Also known as:** Forced registration, sign-up gate, premature commitment
|
|
98
|
+
**Frequency:** Very Common
|
|
99
|
+
**Severity:** Critical
|
|
100
|
+
**Detection difficulty:** Easy
|
|
101
|
+
|
|
102
|
+
**What it looks like:**
|
|
103
|
+
Users are required to create an account before they can see any content, use any features, or evaluate whether the product is worth their time. The first screen is a login/registration form with no preview of what lies behind it. Common in SaaS tools, news sites, and apps that gate even their landing page content.
|
|
104
|
+
|
|
105
|
+
**Why developers do it:**
|
|
106
|
+
Product teams want user data for analytics, marketing, and engagement tracking. There is pressure to show "registered user" growth as a metric. Developers assume that if users found the site, they are already committed enough to register. Gating content creates a sense of exclusivity.
|
|
107
|
+
|
|
108
|
+
**What goes wrong:**
|
|
109
|
+
Baymard Institute's checkout research found that requiring account creation increases abandonment by 35%. The Interaction Design Foundation defines forced registration as a well-documented anti-pattern that turns potential users into bounced visitors. On mobile, the friction is amplified -- filling out multi-field registration forms on a smartphone keyboard is a high-friction activity that most users will abandon. Search engines see increased bounce rates from registration walls, which can lower search rankings and reduce organic traffic over time, crippling growth.
|
|
110
|
+
|
|
111
|
+
**The fix:**
|
|
112
|
+
- Follow the "Lazy Registration" pattern: let users experience value first, then prompt registration when they try to save, share, or access premium features.
|
|
113
|
+
- Offer guest checkout for e-commerce (Baymard data shows a 35% conversion improvement).
|
|
114
|
+
- Show a preview of content or features before requiring sign-up.
|
|
115
|
+
- If registration is required, minimize fields to email + password only and defer profile completion.
|
|
116
|
+
- Offer social sign-in (OAuth) to reduce form friction.
|
|
117
|
+
|
|
118
|
+
**Detection rule:**
|
|
119
|
+
If the first routed view a new user sees is a registration or login form with no skip/preview/guest option, suspect AP-04.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### AP-05: Breaking the Back Button
|
|
124
|
+
|
|
125
|
+
**Also known as:** History hijacking, navigation trap, back button sabotage
|
|
126
|
+
**Frequency:** Common
|
|
127
|
+
**Severity:** Critical
|
|
128
|
+
**Detection difficulty:** Moderate
|
|
129
|
+
|
|
130
|
+
**What it looks like:**
|
|
131
|
+
Pressing the browser back button does not return the user to their previous page. Instead, it reloads the current page, traps the user in a redirect loop, returns them to a completely unexpected location, or resets multi-step form progress. Single-page applications that manipulate `history.pushState` incorrectly are frequent offenders.
|
|
132
|
+
|
|
133
|
+
**Why developers do it:**
|
|
134
|
+
SPAs manage their own routing and often fail to synchronize with browser history. Some sites deliberately hijack the back button to keep users on the page (especially ad-heavy sites). Multi-step flows use client-side state that is not reflected in the URL, so the browser has no meaningful "previous state" to restore. Developers test with forward navigation and forget to test backward.
|
|
135
|
+
|
|
136
|
+
**What goes wrong:**
|
|
137
|
+
Baymard Institute's 2022 research found that 59% of e-commerce sites have at least one checkout flow that violates back-button expectations, with four distinct design patterns that break user expectations. Google Chrome engineers worked on blocking back-button hijacking after documenting widespread abuse where malicious sites pushed fake history entries to trap users. In multi-step forms (checkout, applications), a broken back button means lost data -- users who have filled out three pages of a form and cannot go back will abandon the entire process.
|
|
138
|
+
|
|
139
|
+
**The fix:**
|
|
140
|
+
- Every distinct view state should have a unique URL (use `pushState` or framework routing correctly).
|
|
141
|
+
- Test the back button at every step of every flow -- this should be a standard QA checklist item.
|
|
142
|
+
- Never push duplicate or fake history entries.
|
|
143
|
+
- In multi-step flows, persist form data so that navigating back restores the previous step with data intact.
|
|
144
|
+
- Use `beforeunload` or route guards to warn users before losing unsaved state, not to trap them.
|
|
145
|
+
|
|
146
|
+
**Detection rule:**
|
|
147
|
+
If `history.pushState` or `history.replaceState` is called without a corresponding URL change that reflects a meaningful state transition, or if the same URL is pushed multiple times, suspect AP-05.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
### AP-06: Autoplay Audio and Video
|
|
152
|
+
|
|
153
|
+
**Also known as:** Surprise media, unwanted playback, bandwidth theft
|
|
154
|
+
**Frequency:** Common
|
|
155
|
+
**Severity:** High
|
|
156
|
+
**Detection difficulty:** Easy
|
|
157
|
+
|
|
158
|
+
**What it looks like:**
|
|
159
|
+
Audio or video begins playing automatically when a page loads or when the user scrolls past an element, without the user requesting playback. Particularly egregious when the media plays with sound, but even muted autoplay videos consume bandwidth, CPU, and battery.
|
|
160
|
+
|
|
161
|
+
**Why developers do it:**
|
|
162
|
+
Autoplay increases video view counts and "engagement" metrics. Advertisers pay more for auto-played video ads. Marketing teams believe that if users see the video, they will be convinced by the content. Sticky video players (videos that follow the user as they scroll) maximize view duration metrics.
|
|
163
|
+
|
|
164
|
+
**What goes wrong:**
|
|
165
|
+
User backlash against autoplay was so severe that all major browsers implemented autoplay blocking. Chrome 66 (2018) was the first major browser to block video autoplay based on Media Engagement Index scores. Mozilla's Bugzilla tracker (Bug #1420389) documents extensive UX specification work for autoplay policies driven by user complaints. Foliovision's 2023 analysis of sticky video UX found that auto-playing sticky videos that follow users as they scroll are "extremely annoying" and violate the principle that site behavior must be predictable. Silent autoplay videos still consume bandwidth -- on metered mobile connections, this costs users real money.
|
|
166
|
+
|
|
167
|
+
**The fix:**
|
|
168
|
+
- Never autoplay with sound. Period.
|
|
169
|
+
- For muted autoplay, only use it when the video IS the content (e.g., a background hero video) and keep it short.
|
|
170
|
+
- Always show play/pause controls prominently.
|
|
171
|
+
- Respect the `prefers-reduced-motion` media query.
|
|
172
|
+
- Use `loading="lazy"` for video elements below the fold.
|
|
173
|
+
- Let the user initiate playback -- a thumbnail with a play button converts better than forced autoplay for actual engagement.
|
|
174
|
+
|
|
175
|
+
**Detection rule:**
|
|
176
|
+
If a `<video>` or `<audio>` element has the `autoplay` attribute, or if JavaScript calls `.play()` without a preceding user gesture event, suspect AP-06.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
### AP-07: Scroll Hijacking
|
|
181
|
+
|
|
182
|
+
**Also known as:** Scrolljacking, scroll override, parallax abuse
|
|
183
|
+
**Frequency:** Common
|
|
184
|
+
**Severity:** High
|
|
185
|
+
**Detection difficulty:** Easy
|
|
186
|
+
|
|
187
|
+
**What it looks like:**
|
|
188
|
+
The website overrides the browser's native scroll behavior -- changing scroll speed, direction, snapping to sections, or triggering animations that prevent smooth scrolling. Parallax effects that decouple content movement from scroll input. Horizontal scrolling triggered by vertical scroll gestures. Scroll-locked sections that require clicking "next" to advance.
|
|
189
|
+
|
|
190
|
+
**Why developers do it:**
|
|
191
|
+
Scroll hijacking creates dramatic visual effects that win design awards and impress stakeholders in demo meetings. Agencies use it to differentiate portfolio sites. Product teams believe it creates a more "immersive" experience. The availability of libraries like fullPage.js makes implementation trivial.
|
|
192
|
+
|
|
193
|
+
**What goes wrong:**
|
|
194
|
+
Nielsen Norman Group's "Scrolljacking 101" analysis found that scroll hijacking "significantly threatens user control and freedom, discoverability, attention, efficiency, and task success." Apple's Mac Pro site was widely criticized for scroll hijacking that forced users to browse at a predetermined speed regardless of their scroll input. The Atlantic Theater website was documented as having an opening transition that "jumps abruptly and prevents scrolling." Oatly's site was noted for "scroll locking until clicking next, limiting consumption of content." Users with trackpads, mouse wheels, touch screens, and keyboard navigation all experience scroll hijacking differently, making consistent behavior nearly impossible. Accessibility is severely impacted -- screen readers and keyboard navigation depend on predictable scroll behavior.
|
|
195
|
+
|
|
196
|
+
**The fix:**
|
|
197
|
+
- Do not override native scroll behavior. The browser's scroll is the result of decades of platform-specific optimization.
|
|
198
|
+
- If animations must respond to scroll position, use `IntersectionObserver` to trigger them without altering scroll mechanics.
|
|
199
|
+
- If section-snapping is needed, use CSS `scroll-snap-type` which respects native scroll physics.
|
|
200
|
+
- Test with trackpad, mouse wheel, touch, and keyboard. If any feel wrong, remove the override.
|
|
201
|
+
- The one documented success case: BBC's interactive storytelling used scroll-driven content reveal to aid comprehension -- but the scroll itself behaved normally.
|
|
202
|
+
|
|
203
|
+
**Detection rule:**
|
|
204
|
+
If JavaScript attaches a listener to the `wheel`, `scroll`, or `touchmove` event and calls `preventDefault()`, or if `overflow: hidden` is set on `<body>` while custom scroll logic handles movement, suspect AP-07.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
### AP-08: Cryptic Error Messages
|
|
209
|
+
|
|
210
|
+
**Also known as:** "Something went wrong," error message theater, unhelpful errors
|
|
211
|
+
**Frequency:** Very Common
|
|
212
|
+
**Severity:** High
|
|
213
|
+
**Detection difficulty:** Easy
|
|
214
|
+
|
|
215
|
+
**What it looks like:**
|
|
216
|
+
Error messages that say "Something went wrong," "An error occurred," "Error: 500," "Invalid input," or "Please try again later" without explaining what failed, why it failed, or what the user can do about it. Technical jargon shown to non-technical users ("ECONNREFUSED," "null reference," "403 Forbidden").
|
|
217
|
+
|
|
218
|
+
**Why developers do it:**
|
|
219
|
+
Developers write error handling for the happy path and treat errors as edge cases. Generic catch-all messages are faster to implement than context-specific ones. Security concerns lead teams to hide all error details (a valid concern for server internals, but not for user-facing guidance). Backend developers write error responses; frontend developers display them verbatim without translating them into user language.
|
|
220
|
+
|
|
221
|
+
**What goes wrong:**
|
|
222
|
+
Smashing Magazine's 2022 guide on error message UX design documents that users abandon tasks and shopping carts due to confusing, vague, or meaningless error messages. Wix's UX team published research showing that when users encounter "Something went wrong" with no guidance, they assume the entire system is broken rather than that they made a specific, fixable mistake. Password validation is a particularly painful example: users submit a password, get "Invalid password," and must guess which of 5-8 unstated requirements they violated. Form validation errors that appear only after submission (rather than inline, in real time) force users to hunt for the problem field.
|
|
223
|
+
|
|
224
|
+
**The fix:**
|
|
225
|
+
- Every error message must answer three questions: (1) What happened? (2) Why? (3) What can the user do about it?
|
|
226
|
+
- Use plain language. "We couldn't save your changes because the file is too large (max 10MB). Try compressing the image or choosing a smaller file." is correct. "Error: PAYLOAD_TOO_LARGE" is not.
|
|
227
|
+
- Show form validation requirements BEFORE the user types, not after they fail.
|
|
228
|
+
- For password fields, display all requirements upfront and check them in real time with visual indicators.
|
|
229
|
+
- Log technical details server-side; show human-readable guidance client-side.
|
|
230
|
+
|
|
231
|
+
**Detection rule:**
|
|
232
|
+
If an error message string contains only a generic phrase ("Something went wrong," "An error occurred," "Please try again") without a specific cause or actionable next step, suspect AP-08.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### AP-09: No Loading Indicators
|
|
237
|
+
|
|
238
|
+
**Also known as:** Silent loading, frozen UI, dead screen
|
|
239
|
+
**Frequency:** Common
|
|
240
|
+
**Severity:** Medium
|
|
241
|
+
**Detection difficulty:** Easy
|
|
242
|
+
|
|
243
|
+
**What it looks like:**
|
|
244
|
+
The user performs an action (clicks a button, submits a form, navigates to a page) and nothing visibly happens for several seconds. No spinner, no skeleton screen, no progress bar, no disabled-state on the button. The user assumes the click did not register and clicks again, potentially triggering duplicate submissions. Or they assume the app is broken and leave.
|
|
245
|
+
|
|
246
|
+
**Why developers do it:**
|
|
247
|
+
Loading states add implementation overhead to every async operation. Developers on fast local networks never experience the delays that real users on 3G or congested Wi-Fi face. Loading indicators are often deprioritized as "polish" work that gets cut from sprints. The optimistic assumption that APIs will respond quickly makes loading states seem unnecessary during development.
|
|
248
|
+
|
|
249
|
+
**What goes wrong:**
|
|
250
|
+
Nielsen Norman Group research on response time thresholds establishes that users perceive delays over 1 second as a system problem if there is no feedback. Without loading indicators, users double-click buttons (creating duplicate orders, duplicate API calls, duplicate database entries). Carbon Design System's loading pattern documentation notes that skeleton screens improve perceived performance by up to 30% compared to blank screens, even when actual load time is identical. Users on slow connections interpret a blank screen as a crash and abandon the task entirely.
|
|
251
|
+
|
|
252
|
+
**The fix:**
|
|
253
|
+
- Show a spinner or skeleton screen for any operation that may take more than 300ms.
|
|
254
|
+
- Disable interactive elements (buttons, forms) during submission to prevent double-clicks.
|
|
255
|
+
- For operations over 3 seconds, show a progress bar or status message.
|
|
256
|
+
- For operations over 10 seconds, explain what is happening and provide a way to cancel.
|
|
257
|
+
- Use skeleton screens instead of spinners for page-level content loading -- they set correct expectations about layout.
|
|
258
|
+
- Implement optimistic UI updates where safe (e.g., show the message as "sent" immediately while confirming in the background).
|
|
259
|
+
|
|
260
|
+
**Detection rule:**
|
|
261
|
+
If an async operation (fetch, form submit, navigation) does not set a loading/pending state variable that triggers a visual indicator in the UI, suspect AP-09.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
### AP-10: Hidden Password Requirements
|
|
266
|
+
|
|
267
|
+
**Also known as:** Guess-the-rules, post-hoc validation, password frustration loop
|
|
268
|
+
**Frequency:** Very Common
|
|
269
|
+
**Severity:** Medium
|
|
270
|
+
**Detection difficulty:** Easy
|
|
271
|
+
|
|
272
|
+
**What it looks like:**
|
|
273
|
+
The user creates a password, clicks submit, and only then learns that the password must contain an uppercase letter, a number, a special character, be between 8-64 characters, and cannot contain their username. Each requirement is revealed one at a time with each failed submission. The requirements are never shown together upfront.
|
|
274
|
+
|
|
275
|
+
**Why developers do it:**
|
|
276
|
+
Password validation is handled server-side, and the server returns a single error at a time. Developers display whatever the backend returns without adding client-side pre-validation. Showing all requirements upfront is perceived as "cluttering" the form. Password policies evolve over time, and the frontend is not updated to reflect new rules.
|
|
277
|
+
|
|
278
|
+
**What goes wrong:**
|
|
279
|
+
CXL's research on password UX found that hidden requirements are one of the top sources of form abandonment. RunSignUp's 2025 UX case study on password reset redesign documented that users cycle through 3-5 submission attempts when requirements are hidden, with each failure increasing frustration and abandonment likelihood. Users who are forced to create complex passwords they did not plan for resort to predictable patterns ("Password1!") that technically meet requirements but provide minimal security. The frustration of repeatedly failing validation leads users to abandon registration entirely or use password managers to generate and forget credentials, reducing engagement.
|
|
280
|
+
|
|
281
|
+
**The fix:**
|
|
282
|
+
- Display all password requirements visibly next to the password field before the user types anything.
|
|
283
|
+
- Validate each requirement in real time as the user types, with visual checkmarks or color changes.
|
|
284
|
+
- Show a password strength meter that updates live.
|
|
285
|
+
- Allow password visibility toggle (show/hide).
|
|
286
|
+
- If requirements change, update both backend and frontend simultaneously.
|
|
287
|
+
|
|
288
|
+
**Detection rule:**
|
|
289
|
+
If a password input field does not have adjacent, always-visible requirement text, and validation only occurs on form submission rather than on input change, suspect AP-10.
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
### AP-11: Hamburger Menu for Primary Actions
|
|
294
|
+
|
|
295
|
+
**Also known as:** Hidden navigation, buried features, the three-line graveyard
|
|
296
|
+
**Frequency:** Very Common
|
|
297
|
+
**Severity:** High
|
|
298
|
+
**Detection difficulty:** Moderate
|
|
299
|
+
|
|
300
|
+
**What it looks like:**
|
|
301
|
+
All navigation -- including the most important, most-used actions -- is hidden behind a hamburger menu icon on both mobile and desktop. Users must tap the icon, scan the revealed list, and tap again to reach any destination. Primary call-to-action items like "Create," "Search," or "Dashboard" are buried alongside "Settings," "Help," and "Legal."
|
|
302
|
+
|
|
303
|
+
**Why developers do it:**
|
|
304
|
+
Hamburger menus are a convention that "solves" responsive design -- one pattern works on all screen sizes. They create a visually clean header. Designers see apps like Facebook and Gmail using hamburger menus and assume it works for all contexts. Adding visible navigation items requires making layout decisions about prioritization, which is harder than hiding everything.
|
|
305
|
+
|
|
306
|
+
**What goes wrong:**
|
|
307
|
+
Nielsen Norman Group's research found that hiding navigation behind a hamburger menu decreases content discoverability by more than 20% and increases perceived task difficulty by 21% compared to visible navigation. CXL's revenue impact analysis found that hamburger menus reduce engagement by nearly half. When primary actions are hidden, new users cannot discover core features, power users cannot access frequent actions quickly, and conversion-critical paths (sign up, purchase, create) suffer reduced traffic. The hamburger icon's recognition rate, while improved from early years, still does not approach 100% -- a significant minority of users do not know what it means.
|
|
308
|
+
|
|
309
|
+
**The fix:**
|
|
310
|
+
- Show the top 4-5 navigation items visibly. Use a hamburger menu only for secondary/tertiary items.
|
|
311
|
+
- On mobile, use a bottom tab bar for primary navigation (the pattern used by the most successful mobile apps).
|
|
312
|
+
- On desktop, there is no reason to hide primary navigation -- use a standard horizontal nav bar.
|
|
313
|
+
- Prioritize ruthlessly: if everything is in the hamburger menu, nothing is discoverable.
|
|
314
|
+
- A/B test visible vs. hidden navigation and measure task completion rates, not just aesthetics.
|
|
315
|
+
|
|
316
|
+
**Detection rule:**
|
|
317
|
+
If the primary navigation component on desktop renders all items behind a toggle/hamburger and no persistent visible navigation items exist, suspect AP-11.
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
### AP-12: Checkout/Signup Flow Bloat
|
|
322
|
+
|
|
323
|
+
**Also known as:** Form marathon, death by a thousand fields, over-collecting
|
|
324
|
+
**Frequency:** Very Common
|
|
325
|
+
**Severity:** Critical
|
|
326
|
+
**Detection difficulty:** Easy
|
|
327
|
+
|
|
328
|
+
**What it looks like:**
|
|
329
|
+
A checkout, registration, or onboarding flow that requires too many steps, too many form fields, or collects information the system does not actually need to complete the transaction. Mandatory fields for phone number, company name, "How did you hear about us?", secondary email, and demographics during a simple purchase. Multi-page flows that could be a single page.
|
|
330
|
+
|
|
331
|
+
**Why developers do it:**
|
|
332
|
+
Marketing wants data for segmentation. Analytics wants attribution. Legal wants terms acceptance on a separate page. Each team adds "just one more field" without seeing the cumulative impact. The checkout process averages 5.1 steps from cart to order review according to Baymard Institute -- unchanged since 2012 because organizations add steps but never remove them.
|
|
333
|
+
|
|
334
|
+
**What goes wrong:**
|
|
335
|
+
The global average cart abandonment rate is 70.22%. Baymard's research shows that 17% of shoppers abandon specifically because the checkout process is too long or complicated, and 21% leave when the checkout experience is too lengthy. Each additional form field reduces conversion rate. Baymard found that the ideal checkout has 7-8 form fields (12-14 form elements), and most sites can achieve a 20-60% reduction in form elements. Their data shows that a 35% conversion improvement is achievable through checkout design changes alone. Requiring account creation before purchase increases abandonment by 35%.
|
|
336
|
+
|
|
337
|
+
**The fix:**
|
|
338
|
+
- Audit every field: if the transaction can complete without it, make it optional or remove it.
|
|
339
|
+
- Target 7-8 form fields maximum for checkout.
|
|
340
|
+
- Offer guest checkout -- do not require account creation to purchase.
|
|
341
|
+
- Combine related fields (full name instead of first + middle + last).
|
|
342
|
+
- Use address autocomplete to reduce fields.
|
|
343
|
+
- Show progress indicators so users know how many steps remain.
|
|
344
|
+
- Request optional data (surveys, preferences) after the transaction is complete, not during.
|
|
345
|
+
|
|
346
|
+
**Detection rule:**
|
|
347
|
+
If a checkout or signup flow has more than 8 required form fields or more than 3 page transitions, suspect AP-12.
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
### AP-13: No Undo for Destructive Actions
|
|
352
|
+
|
|
353
|
+
**Also known as:** Permanent delete without safety net, one-click catastrophe, irreversible action
|
|
354
|
+
**Frequency:** Common
|
|
355
|
+
**Severity:** Critical
|
|
356
|
+
**Detection difficulty:** Moderate
|
|
357
|
+
|
|
358
|
+
**What it looks like:**
|
|
359
|
+
Destructive actions (delete, archive, send, publish, overwrite) execute immediately on a single click with no confirmation dialog, no undo period, and no recovery mechanism. The user accidentally clicks "Delete" on a project with 6 months of work, and it is gone instantly.
|
|
360
|
+
|
|
361
|
+
**Why developers do it:**
|
|
362
|
+
Confirmation dialogs add friction, and teams want the UI to feel "fast" and "responsive." Implementing soft-delete with a recovery window requires additional backend work (flagging records, scheduling cleanup, building an undo UI). Developers reason that "users will be careful" -- but accidental clicks, touchscreen mis-taps, and keyboard shortcuts happen constantly. Some teams believe that a confirmation dialog ("Are you sure?") is sufficient, but dialog fatigue means users click "Yes" reflexively.
|
|
363
|
+
|
|
364
|
+
**What goes wrong:**
|
|
365
|
+
Nielsen Norman Group's usability heuristic #3 (User Control and Freedom) explicitly requires an "emergency exit" for mistaken actions. GitLab's 2017 incident, where a database was accidentally deleted, illustrates the catastrophic consequences of irreversible actions at scale. At the individual user level, accidental deletion of files, emails, messages, or creative work causes disproportionate emotional distress and loss of trust in the platform. Users who have experienced data loss become anxious about using the product, reducing engagement.
|
|
366
|
+
|
|
367
|
+
**The fix:**
|
|
368
|
+
- Implement soft-delete with a recovery window (Gmail's "Undo Send" 30-second window is the gold standard).
|
|
369
|
+
- Show a toast notification with an "Undo" button after destructive actions, rather than a pre-action confirmation dialog.
|
|
370
|
+
- For high-stakes actions (deleting an account, removing a team member), require deliberate confirmation: type the item name to confirm, or require re-authentication.
|
|
371
|
+
- Maintain a "Trash" or "Recently Deleted" section with a 30-day retention period.
|
|
372
|
+
- Distinguish severity: quick undo for low-stakes (archive email), deliberate confirmation for high-stakes (delete account).
|
|
373
|
+
|
|
374
|
+
**Detection rule:**
|
|
375
|
+
If a delete/remove/destroy action handler directly mutates state or calls an API without first setting a pending/undo state or showing a confirmation mechanism, suspect AP-13.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
### AP-14: Inconsistent Interaction Patterns
|
|
380
|
+
|
|
381
|
+
**Also known as:** Frankenstein UI, mixed metaphors, unpredictable behavior
|
|
382
|
+
**Frequency:** Common
|
|
383
|
+
**Severity:** Medium
|
|
384
|
+
**Detection difficulty:** Hard
|
|
385
|
+
|
|
386
|
+
**What it looks like:**
|
|
387
|
+
The same action behaves differently in different parts of the application. Swiping deletes in one list but archives in another. Some forms save on blur, others require a "Save" button. Some buttons navigate, others open modals, others submit forms -- all styled identically. Confirmation works via dialog in one flow and inline in another. Date pickers use different formats across screens.
|
|
388
|
+
|
|
389
|
+
**Why developers do it:**
|
|
390
|
+
Different developers or teams build different sections of the app, each making independent design decisions. Features are added incrementally over months or years without a central design system. Third-party components are mixed with custom components, each bringing their own interaction conventions. Rapid iteration and A/B testing leave behind a patchwork of behaviors.
|
|
391
|
+
|
|
392
|
+
**What goes wrong:**
|
|
393
|
+
Inconsistency breaks users' mental models, which increases cognitive load on every interaction. Users cannot transfer knowledge from one part of the app to another, making the learning curve perpetual. Versions.com's research on visual consistency and cognitive flow documents that inconsistent patterns force users to "re-learn" the interface repeatedly. The cumulative effect is that users feel the app is unreliable and unprofessional. Error rates increase because users apply the wrong mental model (e.g., expecting swipe-to-delete but triggering swipe-to-archive).
|
|
394
|
+
|
|
395
|
+
**The fix:**
|
|
396
|
+
- Establish and enforce a design system with documented interaction patterns.
|
|
397
|
+
- Create a component library where each component has one defined behavior.
|
|
398
|
+
- Conduct a consistency audit: catalog every instance of common interactions (save, delete, navigate, confirm) and align them.
|
|
399
|
+
- Define and document platform conventions (Material Design, HIG) and follow them consistently.
|
|
400
|
+
- When adding new interactions, check existing patterns first -- never invent a new pattern for an already-solved interaction.
|
|
401
|
+
|
|
402
|
+
**Detection rule:**
|
|
403
|
+
If the same semantic action (e.g., "delete") is implemented with different UI patterns (dialog vs. inline vs. swipe) across different screens in the same application, suspect AP-14.
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
### AP-15: Information Overload
|
|
408
|
+
|
|
409
|
+
**Also known as:** Choice paralysis, option overwhelm, the paradox of choice, kitchen-sink UI
|
|
410
|
+
**Frequency:** Very Common
|
|
411
|
+
**Severity:** High
|
|
412
|
+
**Detection difficulty:** Moderate
|
|
413
|
+
|
|
414
|
+
**What it looks like:**
|
|
415
|
+
A screen that presents too many options, too much data, or too many possible actions simultaneously. Navigation with 15+ top-level items. Dashboards with 30 widgets. Settings pages with 50+ options on a single screen. Product listing pages showing 150 items without filtering or categorization.
|
|
416
|
+
|
|
417
|
+
**Why developers do it:**
|
|
418
|
+
Every feature team wants their feature visible. Removing options feels like removing value. Data-oriented teams believe more data equals more transparency. Product managers equate feature count with product quality. The fear of hiding something important leads to showing everything, which hides everything equally.
|
|
419
|
+
|
|
420
|
+
**What goes wrong:**
|
|
421
|
+
Sheena Iyengar's famous "jam study" demonstrated that while a display of 24 jam varieties attracted more browsers than a display of 6, purchase rates were 6x higher from the smaller display (30% vs. 3%). This "paradox of choice" is well-documented in UX research. Netflix struggles with "Netflix paralysis" where users spend more time scrolling than watching. Project management tools with 50+ customization settings create daunting onboarding experiences. Nielsen Norman Group's research on choice overload shows that excessive options reduce decision quality, increase anxiety, and decrease satisfaction with the final selection.
|
|
422
|
+
|
|
423
|
+
**The fix:**
|
|
424
|
+
- Limit primary navigation to 5-7 items (Miller's Law: 7 plus or minus 2).
|
|
425
|
+
- Use progressive disclosure: show essential options first, reveal advanced options on demand.
|
|
426
|
+
- Implement smart defaults so users only need to change what matters to them.
|
|
427
|
+
- Provide filtering, search, and categorization for large datasets rather than displaying everything.
|
|
428
|
+
- Use recommendations or "most popular" to guide users toward good choices.
|
|
429
|
+
- Amazon shows 4-7 recommended options despite having millions of products -- follow their model.
|
|
430
|
+
|
|
431
|
+
**Detection rule:**
|
|
432
|
+
If a single view presents more than 7 primary navigation items, more than 10 actionable buttons/links, or more than 20 data points without filtering/pagination, suspect AP-15.
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
### AP-16: Empty State Neglect
|
|
437
|
+
|
|
438
|
+
**Also known as:** Blank screen, zero-data state, ghost town UI
|
|
439
|
+
**Frequency:** Common
|
|
440
|
+
**Severity:** Medium
|
|
441
|
+
**Detection difficulty:** Easy
|
|
442
|
+
|
|
443
|
+
**What it looks like:**
|
|
444
|
+
When a user first opens a section with no data (empty inbox, new project with no tasks, search with no results, filtered list with no matches), the screen is completely blank or shows only a container with no content. No guidance, no call to action, no explanation of why it is empty or what to do next.
|
|
445
|
+
|
|
446
|
+
**Why developers do it:**
|
|
447
|
+
Developers build features for the populated state and never test with zero data. Sample data in development environments masks the empty state. Empty states are considered an edge case that "users will only see once," so they are deprioritized. The assumption is that users will figure out they need to add content.
|
|
448
|
+
|
|
449
|
+
**What goes wrong:**
|
|
450
|
+
Pencil & Paper's research on empty state UX patterns documents that empty states are often the first impression a new user has of a feature -- and a blank screen communicates "broken" or "useless." Eleken's analysis of empty state UX examples shows that treating empty states as dead ends causes users to leave rather than engage. First-time users who encounter blank screens during onboarding may never return. "No results found" with no suggestions for broadening the search creates a dead end. Empty states in collaborative tools suggest that the tool has no activity, which can discourage adoption.
|
|
451
|
+
|
|
452
|
+
**The fix:**
|
|
453
|
+
- Design every empty state intentionally. It should include: (1) an explanation of what this area is for, (2) a clear call-to-action to add content, and (3) optional illustration or example to set expectations.
|
|
454
|
+
- For "no results" states, suggest alternative searches, show popular items, or offer to broaden filters.
|
|
455
|
+
- For first-time states, provide onboarding guidance or sample data.
|
|
456
|
+
- For error states, explain what went wrong and how to fix it.
|
|
457
|
+
- Test every feature with zero data as part of QA.
|
|
458
|
+
|
|
459
|
+
**Detection rule:**
|
|
460
|
+
If a list, grid, or content area renders an empty container (no children, no placeholder text) when the data array has length 0, suspect AP-16.
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
### AP-17: Forced Updates Interrupting Work
|
|
465
|
+
|
|
466
|
+
**Also known as:** Mandatory restart, update hijacking, work-destroying updates
|
|
467
|
+
**Frequency:** Common
|
|
468
|
+
**Severity:** Critical
|
|
469
|
+
**Detection difficulty:** Easy
|
|
470
|
+
|
|
471
|
+
**What it looks like:**
|
|
472
|
+
The application or operating system forces an update that interrupts the user's current work. Updates install and restart without explicit user consent. Modal dialogs demand immediate restart with only "Restart Now" and "Restart in 15 Minutes" as options. Updates that cannot be deferred block the user from continuing their task.
|
|
473
|
+
|
|
474
|
+
**Why developers do it:**
|
|
475
|
+
Security teams need patches deployed quickly to close vulnerabilities. Maintaining multiple versions is expensive. Forced updates reduce the support burden of old versions. Product teams want users on the latest version to access new features. The assumption is that a brief interruption is acceptable for long-term benefit.
|
|
476
|
+
|
|
477
|
+
**What goes wrong:**
|
|
478
|
+
Microsoft's forced Windows Update restarts are among the most documented UX failures in software history. Microsoft Q&A forums contain thousands of reports of users losing work: one user reported losing 16 hours of work to a forced reboot with no warning. Another reported losing a 23-page master's degree paper when a forced overnight update placed them in a temporary account, making their files inaccessible. A TenForums thread documents a user who was "typing in Word" when a forced update restarted their machine and lost everything. Major updates have caused boot loops, blue screens, and BitLocker recovery prompts. The pattern teaches users to distrust the platform and resist ALL updates, including critical security patches, which paradoxically makes the system less secure.
|
|
479
|
+
|
|
480
|
+
**The fix:**
|
|
481
|
+
- Never force-restart without explicit, informed user consent.
|
|
482
|
+
- Offer "Update on next restart" as a persistent option.
|
|
483
|
+
- Save application state before any forced operation and restore it afterward.
|
|
484
|
+
- Use background updates that apply on the next natural restart (Chrome's model).
|
|
485
|
+
- For critical security updates, use prominent but non-blocking notifications that explain the urgency.
|
|
486
|
+
- Auto-save user work continuously so that forced restarts do not cause data loss.
|
|
487
|
+
|
|
488
|
+
**Detection rule:**
|
|
489
|
+
If an update mechanism triggers a restart, process termination, or blocking modal without checking for unsaved user work and without offering an indefinite deferral option, suspect AP-17.
|
|
490
|
+
|
|
491
|
+
---
|
|
492
|
+
|
|
493
|
+
### AP-18: Form State Amnesia
|
|
494
|
+
|
|
495
|
+
**Also known as:** Lost form data, navigation data loss, the vanishing form
|
|
496
|
+
**Frequency:** Common
|
|
497
|
+
**Severity:** High
|
|
498
|
+
**Detection difficulty:** Moderate
|
|
499
|
+
|
|
500
|
+
**What it looks like:**
|
|
501
|
+
The user fills out a multi-field form, navigates away (accidentally or to check information), returns, and finds the form completely reset. All entered data is gone. This happens with back-navigation, accidental link clicks, tab switching in mobile browsers, or session timeouts. Multi-step forms that lose all data when the user navigates back one step.
|
|
502
|
+
|
|
503
|
+
**Why developers do it:**
|
|
504
|
+
Form state is stored only in component state (React `useState`, Vue reactive data) which is destroyed on unmount. Developers do not persist form data to `sessionStorage`, `localStorage`, or URL parameters. Multi-step forms use independent component instances per step without a shared state store. Session timeouts reset state without warning. The assumption that users will complete forms in a single, uninterrupted session does not match real-world behavior.
|
|
505
|
+
|
|
506
|
+
**What goes wrong:**
|
|
507
|
+
Smashing Magazine's research on back button UX design documents that users are "often afraid of losing their data" when navigating, and this fear is frequently justified. In multi-step checkout flows, navigating back often "brings users to the very start of the process rather than to the previous page, with all data evaporated." On mobile, context switches (answering a call, checking a message, switching apps) can cause the browser to unload the page, destroying form state. Users who lose 10+ minutes of form input data will not re-enter it -- they will abandon the task permanently.
|
|
508
|
+
|
|
509
|
+
**The fix:**
|
|
510
|
+
- Persist form data to `sessionStorage` on every input change for single-page forms.
|
|
511
|
+
- For multi-step forms, store accumulated data in a shared state store or `sessionStorage` that survives navigation between steps.
|
|
512
|
+
- Implement `beforeunload` warnings when forms have unsaved changes.
|
|
513
|
+
- Use the `autocomplete` attribute so browsers can help restore data.
|
|
514
|
+
- On mobile, use the Page Lifecycle API to save state when the page is hidden.
|
|
515
|
+
- For long forms, implement periodic auto-save with a visible "Draft saved" indicator.
|
|
516
|
+
|
|
517
|
+
**Detection rule:**
|
|
518
|
+
If a form component stores input data only in local component state without writing to `sessionStorage`, a state store, or the URL, and the form has more than 3 fields, suspect AP-18.
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
### AP-19: Ignoring Mobile Context
|
|
523
|
+
|
|
524
|
+
**Also known as:** Desktop-first tunnel vision, responsive afterthought, mobile neglect
|
|
525
|
+
**Frequency:** Very Common
|
|
526
|
+
**Severity:** High
|
|
527
|
+
**Detection difficulty:** Moderate
|
|
528
|
+
|
|
529
|
+
**What it looks like:**
|
|
530
|
+
A desktop interface shrunk to fit a mobile screen. Tiny tap targets that require precision clicking. Hover-dependent interactions that have no touch equivalent. Forms optimized for keyboard + mouse but painful on touchscreen keyboards. Content that requires horizontal scrolling on mobile. Pop-ups and modals that overflow the mobile viewport. Features that assume a continuous, stable internet connection.
|
|
531
|
+
|
|
532
|
+
**Why developers do it:**
|
|
533
|
+
Developers work on desktop machines with large monitors, mice, and fast connections. Responsive design is often treated as "make it not break on small screens" rather than "design for mobile context." Testing on real mobile devices is slower and more cumbersome than resizing a browser window (which misses touch, network, and performance differences). Desktop designs are approved by stakeholders viewing presentations on desktop screens.
|
|
534
|
+
|
|
535
|
+
**What goes wrong:**
|
|
536
|
+
Mobile traffic exceeds desktop traffic for most consumer applications, making desktop-first design a decision to optimize for the minority. BayTech Consulting documented real cases where business websites look fine on desktop but have tiny text, hard-to-tap buttons, and require zooming on mobile. WordPress theme failures are common: hero images overlap headlines, navigation menus fail to open, and submit buttons are partially hidden on certain phones. Contact forms that work on desktop but fail on mobile due to viewport issues result in "lost leads." The core problem identified by Web Designer Depot is that responsive design assumes content and functionality should be identical across devices, which is not true -- mobile users have different tasks, contexts, and constraints.
|
|
537
|
+
|
|
538
|
+
**The fix:**
|
|
539
|
+
- Adopt mobile-first design: design for mobile constraints first, then enhance for larger screens.
|
|
540
|
+
- Minimum tap target size: 44x44 CSS pixels (Apple HIG) or 48x48dp (Material Design).
|
|
541
|
+
- Replace hover interactions with tap-accessible alternatives.
|
|
542
|
+
- Use appropriate mobile input types (`type="tel"`, `type="email"`, `inputmode="numeric"`).
|
|
543
|
+
- Test on real devices, not just browser DevTools -- touch behavior, keyboard appearance, and performance differ.
|
|
544
|
+
- Consider mobile-specific context: intermittent connectivity, one-handed use, interruptions, sunlight glare.
|
|
545
|
+
|
|
546
|
+
**Detection rule:**
|
|
547
|
+
If interactive elements have dimensions below 44x44px, if `:hover` pseudo-classes are used for essential functionality without corresponding touch handlers, or if the viewport meta tag is missing, suspect AP-19.
|
|
548
|
+
|
|
549
|
+
---
|
|
550
|
+
|
|
551
|
+
### AP-20: Silent Action Feedback
|
|
552
|
+
|
|
553
|
+
**Also known as:** Did it work?, ghost actions, no confirmation
|
|
554
|
+
**Frequency:** Common
|
|
555
|
+
**Severity:** Medium
|
|
556
|
+
**Detection difficulty:** Easy
|
|
557
|
+
|
|
558
|
+
**What it looks like:**
|
|
559
|
+
The user performs an action (saves a document, adds an item to cart, sends a message, changes a setting) and receives no visual, auditory, or haptic confirmation that the action succeeded. The button does not change state. No toast or notification appears. The user is left wondering: did it work? Should I click again?
|
|
560
|
+
|
|
561
|
+
**Why developers do it:**
|
|
562
|
+
Developers see the network request succeed in DevTools and assume the user knows too. Feedback mechanisms (toasts, animations, state changes) are treated as polish and deprioritized. The assumption is that the absence of an error message implies success. Rapid development cycles focus on functionality, not communication.
|
|
563
|
+
|
|
564
|
+
**What goes wrong:**
|
|
565
|
+
Without feedback, users repeat actions (double-ordering, duplicate-sending, re-saving). Nielsen Norman Group's heuristic #1 (Visibility of System Status) states that the system should always keep users informed about what is going on through appropriate feedback within a reasonable time. Users who are unsure whether their action succeeded develop anxiety about using the system and resort to workarounds (refreshing the page, checking via another channel). In e-commerce, silent "add to cart" leads to users checking the cart after every addition, adding friction. In messaging apps, no sent confirmation creates uncertainty about whether the message was delivered.
|
|
566
|
+
|
|
567
|
+
**The fix:**
|
|
568
|
+
- Every user action must produce visible feedback within 100ms.
|
|
569
|
+
- Use appropriate feedback for the action: toast notifications for saves, button state changes for toggles, inline confirmations for form submissions, animation for additions/removals.
|
|
570
|
+
- Follow the feedback hierarchy: subtle (button state change) for frequent low-stakes actions, moderate (toast) for important confirmations, prominent (page change, modal) for major completions.
|
|
571
|
+
- Include state in interactive elements: buttons should have default, hover, active, loading, success, and error states.
|
|
572
|
+
- Provide status for async operations: "Saving...", "Saved", "Failed to save -- retry?"
|
|
573
|
+
|
|
574
|
+
**Detection rule:**
|
|
575
|
+
If a click/submit handler fires an async operation and does not update any UI state (loading indicator, disabled state, toast, or confirmation message) upon resolution, suspect AP-20.
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
### AP-21: Forced Linear Wizard for Non-Linear Tasks
|
|
580
|
+
|
|
581
|
+
**Also known as:** Wizard anti-pattern, rigid step flow, unnecessary sequencing
|
|
582
|
+
**Frequency:** Common
|
|
583
|
+
**Severity:** Medium
|
|
584
|
+
**Detection difficulty:** Hard
|
|
585
|
+
|
|
586
|
+
**What it looks like:**
|
|
587
|
+
A multi-step wizard that forces users through a rigid, linear sequence for a task that is not inherently sequential. Users cannot skip optional steps, cannot complete steps in their preferred order, cannot see an overview of all required information, and cannot jump directly to the step they need to edit. Editing a previous step requires navigating back through all intermediate steps.
|
|
588
|
+
|
|
589
|
+
**Why developers do it:**
|
|
590
|
+
Wizards are a well-established UI pattern that simplifies complex tasks by breaking them into smaller pieces. Developers apply the pattern universally without evaluating whether the task is truly linear. Wizard components in UI libraries make implementation easy. The step-by-step approach "feels" helpful and structured. Product managers request wizards because they can track step-by-step completion funnels.
|
|
591
|
+
|
|
592
|
+
**What goes wrong:**
|
|
593
|
+
Eleken's research on wizard UI patterns found that "a fully linear flow can sometimes frustrate users who may want to skip certain steps, or complete the process in an order that better suits their needs." Nielsen Norman Group's wizard design recommendations warn that "because the process is presented one step at a time, there is danger that users will miss the context, get confused, or not realize how long the progression will be." Users who need to change one field in step 2 of a 6-step wizard must navigate through steps 1 and 2, make the change, then navigate forward through steps 3-6 again (or worse, lose steps 3-6 data). Profile setup wizards that force users through interests, avatar, bio, and notification settings when the user just wants to start using the product create abandonment at each unnecessary step.
|
|
594
|
+
|
|
595
|
+
**The fix:**
|
|
596
|
+
- Use wizards only for tasks that are genuinely sequential (e.g., payment flow where shipping address must come before shipping method).
|
|
597
|
+
- For non-linear tasks, use a single scrollable form, tabbed sections, or a checklist/dashboard pattern.
|
|
598
|
+
- If a wizard is appropriate, allow direct navigation to any step (clickable step indicators).
|
|
599
|
+
- Show a summary/overview of all steps so users know what is coming.
|
|
600
|
+
- Preserve all entered data when navigating between steps.
|
|
601
|
+
- Allow optional steps to be skipped with a clear "Skip" action.
|
|
602
|
+
|
|
603
|
+
**Detection rule:**
|
|
604
|
+
If a multi-step form enforces `step > currentStep` navigation (preventing forward jumps) and the steps have no data dependency on each other, suspect AP-21.
|
|
605
|
+
|
|
606
|
+
---
|
|
607
|
+
|
|
608
|
+
## Root Cause Analysis
|
|
609
|
+
|
|
610
|
+
| Anti-Pattern | Root Cause | Prevention |
|
|
611
|
+
|---|---|---|
|
|
612
|
+
| AP-01: Mystery Meat Navigation | Prioritizing aesthetics over usability | Always pair icons with text labels; run 5-second tests |
|
|
613
|
+
| AP-02: Infinite Scroll Without Position | Chasing engagement metrics without considering usability | Implement scroll restoration and progress indicators |
|
|
614
|
+
| AP-03: Modal Overload | Marketing pressure overriding UX principles | Reserve modals for destructive/critical actions only |
|
|
615
|
+
| AP-04: Registration Wall | Metric-driven design (registration counts) | Deliver value before asking for commitment |
|
|
616
|
+
| AP-05: Breaking Back Button | SPA routing ignorance; insufficient testing | Map every view state to a unique URL; test backward nav |
|
|
617
|
+
| AP-06: Autoplay Audio/Video | Chasing view count metrics | Respect user-initiated playback; never autoplay with sound |
|
|
618
|
+
| AP-07: Scroll Hijacking | Award-chasing design; agency showcase mindset | Never override native scroll behavior |
|
|
619
|
+
| AP-08: Cryptic Error Messages | Developer convenience; security overcorrection | Answer: what happened, why, what can the user do |
|
|
620
|
+
| AP-09: No Loading Indicators | Fast dev networks mask real-world latency | Show feedback for any operation over 300ms |
|
|
621
|
+
| AP-10: Hidden Password Requirements | Backend-driven validation without frontend sync | Display all requirements upfront with real-time checking |
|
|
622
|
+
| AP-11: Hamburger Menu Abuse | Avoiding prioritization decisions | Show top 4-5 items visibly; hamburger for secondary only |
|
|
623
|
+
| AP-12: Checkout Flow Bloat | Every team adds fields, nobody removes them | Audit and minimize to 7-8 fields; offer guest checkout |
|
|
624
|
+
| AP-13: No Undo for Destructive Actions | Premature optimization of flow speed | Implement soft-delete with recovery window |
|
|
625
|
+
| AP-14: Inconsistent Patterns | Multiple teams, no design system | Establish and enforce a design system |
|
|
626
|
+
| AP-15: Information Overload | Feature-count-as-value thinking | Progressive disclosure; limit primary options to 5-7 |
|
|
627
|
+
| AP-16: Empty State Neglect | Testing only with populated data | Design every empty state with guidance and CTAs |
|
|
628
|
+
| AP-17: Forced Updates | Security/support pressure to unify versions | Background updates; never restart without consent |
|
|
629
|
+
| AP-18: Form State Amnesia | Storing state only in component memory | Persist form data to sessionStorage or shared state |
|
|
630
|
+
| AP-19: Ignoring Mobile Context | Developing on desktop; responsive as afterthought | Mobile-first design; test on real devices |
|
|
631
|
+
| AP-20: Silent Action Feedback | Assuming success is self-evident | Every action must produce visible feedback within 100ms |
|
|
632
|
+
| AP-21: Forced Linear Wizard | Misapplying sequential pattern to non-sequential tasks | Use wizards only for genuinely sequential tasks |
|
|
633
|
+
|
|
634
|
+
## Self-Check Questions
|
|
635
|
+
|
|
636
|
+
1. Can a first-time user identify every navigation element without hovering or guessing?
|
|
637
|
+
2. If I press the back button at any point in this flow, will I return to a sensible previous state with my data intact?
|
|
638
|
+
3. Am I showing this modal because the user needs to see it RIGHT NOW, or because I want them to see it?
|
|
639
|
+
4. Can a user get value from this product before I ask them to register?
|
|
640
|
+
5. If this operation takes 5 seconds on a 3G connection, what will the user see?
|
|
641
|
+
6. Does every error message tell the user (a) what happened, (b) why, and (c) what to do?
|
|
642
|
+
7. If the user accidentally triggers a destructive action, can they recover within 30 seconds?
|
|
643
|
+
8. Would this interaction work identically if I used a touchscreen with one hand on a moving bus?
|
|
644
|
+
9. Have I tested this screen with zero data? What does a new user see?
|
|
645
|
+
10. If I squint at this screen, can I identify the 2-3 most important actions, or does everything compete equally for attention?
|
|
646
|
+
11. Are all password/validation requirements visible BEFORE the user attempts to submit?
|
|
647
|
+
12. Is this wizard genuinely sequential, or could the user reasonably complete these steps in any order?
|
|
648
|
+
13. Does every button click produce visible feedback, even for operations that will take zero perceived time?
|
|
649
|
+
14. If the user switches apps on their phone and comes back to this form, will their data still be there?
|
|
650
|
+
15. Am I hiding this navigation to make the design cleaner, or because the user genuinely does not need it?
|
|
651
|
+
|
|
652
|
+
## Code Smell Quick Reference
|
|
653
|
+
|
|
654
|
+
| If you see... | Suspect... | Verify... |
|
|
655
|
+
|---|---|---|
|
|
656
|
+
| Icon-only navigation with no `aria-label` or adjacent text | AP-01: Mystery Meat Navigation | Hover/tap each element -- can you tell what it does without hovering? |
|
|
657
|
+
| Scroll event listener appending content with no history/URL state update | AP-02: Infinite Scroll Without Position | Press back after scrolling 50 items -- do you return to your position? |
|
|
658
|
+
| Modal triggered on page load, timer, or scroll event | AP-03: Modal Overload | Is this modal for a critical/destructive action? If not, use a banner |
|
|
659
|
+
| Login/register route as the app's default/index route | AP-04: Registration Wall | Can a new visitor see ANY value before authenticating? |
|
|
660
|
+
| `history.pushState` without corresponding URL change | AP-05: Breaking Back Button | Test back button on every screen in the flow |
|
|
661
|
+
| `<video autoplay>` or `.play()` without user gesture | AP-06: Autoplay Media | Does the user explicitly choose to play? |
|
|
662
|
+
| `wheel`/`scroll` event with `preventDefault()` | AP-07: Scroll Hijacking | Does scrolling feel native? Test trackpad, mouse, touch, keyboard |
|
|
663
|
+
| Error string containing only "Something went wrong" or "Error occurred" | AP-08: Cryptic Errors | Does the message explain what, why, and how to fix? |
|
|
664
|
+
| Async operation with no loading state variable | AP-09: No Loading Indicators | Throttle network to 3G and retry the action |
|
|
665
|
+
| Password field with no adjacent requirement text | AP-10: Hidden Password Rules | Submit an empty password -- are requirements shown before or after? |
|
|
666
|
+
| All nav items inside a hamburger toggle on desktop | AP-11: Hamburger Abuse | Are the top 4-5 items visible without clicking? |
|
|
667
|
+
| Checkout form with >8 required fields | AP-12: Flow Bloat | Can the transaction complete without each field? |
|
|
668
|
+
| Delete handler calling API directly with no undo/confirm | AP-13: No Undo | Click delete -- can you recover within 30 seconds? |
|
|
669
|
+
| Same action (delete/save) implemented differently across screens | AP-14: Inconsistent Patterns | Catalog all delete interactions -- are they the same? |
|
|
670
|
+
| Single view with >10 action buttons or >7 nav items | AP-15: Information Overload | Can a new user identify the primary action in 3 seconds? |
|
|
671
|
+
| Empty array rendering empty `<div>` or `<ul>` | AP-16: Empty State Neglect | View with zero data -- is guidance shown? |
|
|
672
|
+
| Update mechanism with `process.exit()` or forced restart | AP-17: Forced Updates | Can the user defer indefinitely? Is work auto-saved? |
|
|
673
|
+
| Form data stored only in `useState`/reactive state | AP-18: Form Amnesia | Navigate away and back -- is data preserved? |
|
|
674
|
+
| Interactive elements with `width`/`height` < 44px | AP-19: Mobile Neglect | Tap on a real phone -- can you hit every target? |
|
|
675
|
+
| Click handler with no UI state change on success | AP-20: Silent Feedback | Perform the action -- how do you know it worked? |
|
|
676
|
+
| Multi-step form with `step === n` guard preventing forward navigation | AP-21: Wizard Anti-Pattern | Can you jump to step 4 from step 1 if steps are independent? |
|
|
677
|
+
|
|
678
|
+
---
|
|
679
|
+
|
|
680
|
+
*Researched: 2026-03-08 | Sources: [Nielsen Norman Group - Hamburger Menus](https://www.nngroup.com/articles/hamburger-menus/), [Nielsen Norman Group - Scrolljacking 101](https://www.nngroup.com/articles/scrolljacking-101/), [Nielsen Norman Group - Modal Dialogs](https://www.nngroup.com/articles/modal-nonmodal-dialog/), [Nielsen Norman Group - Infinite Scrolling Tips](https://www.nngroup.com/articles/infinite-scrolling-tips/), [Baymard Institute - Cart Abandonment Statistics](https://baymard.com/lists/cart-abandonment-rate), [Baymard Institute - Back Button UX](https://baymard.com/blog/back-button-expectations), [Smashing Magazine - Error Messages UX](https://www.smashingmagazine.com/2022/08/error-messages-ux-design/), [Smashing Magazine - Back Button UX](https://www.smashingmagazine.com/2022/08/back-button-ux-design/), [Smashing Magazine - Infinite Scroll](https://www.smashingmagazine.com/2022/03/designing-better-infinite-scroll/), [Interaction Design Foundation - Forced Registration](https://ixdf.org/literature/topics/forced-registration), [CXL - Password UX](https://cxl.com/blog/password-ux/), [CXL - Hamburger Icon Revenue](https://cxl.com/blog/testing-hamburger-icon-revenue/), [Snapchat Redesign Backlash - TechCrunch](https://techcrunch.com/2018/02/21/snapchat-responds-to-the-change-org-petition-complaining-about-the-apps-redesign/), [Snapchat Petition - CNBC](https://www.cnbc.com/2018/02/15/snapchat-redesign-petition-to-scrap-update-hits-1-million-votes.html), [Microsoft Forced Updates - MS Q&A](https://learn.microsoft.com/en-us/answers/questions/4370448/furious-about-forced-windows-update-reboot-critica), [Windows Update Lost Work - TenForums](https://www.tenforums.com/microsoft-office-365/172492-forced-windows-update-while-typing-word-lost-everything.html), [Foliovision - Sticky Video UX](https://foliovision.com/2023/03/sticky-video-ux), [Chrome Autoplay Policy - Bugzilla](https://bugzilla.mozilla.org/show_bug.cgi?id=1420389), [Eleken - Dark Patterns](https://www.eleken.co/blog-posts/dark-patterns-examples), [Eleken - Empty State UX](https://www.eleken.co/blog-posts/empty-state-ux), [Eleken - Wizard UI](https://www.eleken.co/blog-posts/wizard-ui-pattern-explained), [Pencil & Paper - Empty States](https://www.pencilandpaper.io/articles/empty-states), [Wix UX - Error Messages](https://wix-ux.com/when-life-gives-you-lemons-write-better-error-messages-46c5223e1a2f), [RunSignUp - Password UX Case Study](https://info.runsignup.com/2025/05/05/ux-case-study-redesigning-the-reset-password-experience/), [Medium - Modal Interruption Cost](https://medium.com/@adamshriki/the-high-cost-of-interruption-re-evaluating-the-modal-dialog-in-modern-ux-e448fb7559ff), [Dark Patterns Hall of Shame](https://hallofshame.design/), [ICS - UX Anti-Patterns](https://www.ics.com/blog/anti-patterns-user-experience-design)*
|