@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,800 @@
|
|
|
1
|
+
# Navigation Patterns
|
|
2
|
+
|
|
3
|
+
> **Module Type:** Pattern
|
|
4
|
+
> **Domain:** UI/UX Design
|
|
5
|
+
> **Last Updated:** 2026-03-07
|
|
6
|
+
> **Authoritative Sources:** Apple HIG, Material Design 3, Nielsen Norman Group, W3C WAI-ARIA, WCAG 2.2
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Navigation is the skeletal system of any digital product. It determines how users move
|
|
13
|
+
through content, find features, and build a mental model of the application. Poor
|
|
14
|
+
navigation is the single most common reason users abandon an app or website. This module
|
|
15
|
+
covers the anatomy of navigation patterns, when to use each variant, cross-platform
|
|
16
|
+
adaptation strategies, accessibility requirements, and common anti-patterns to avoid.
|
|
17
|
+
|
|
18
|
+
**Core principle:** Navigation should be invisible when it works and immediately obvious
|
|
19
|
+
when a user needs it. The best navigation systems let users answer three questions at
|
|
20
|
+
any point: Where am I? Where can I go? How do I get back?
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. Pattern Anatomy
|
|
25
|
+
|
|
26
|
+
### 1.1 Navigation Categories
|
|
27
|
+
|
|
28
|
+
Navigation systems fall into three functional categories:
|
|
29
|
+
|
|
30
|
+
| Category | Purpose | Examples |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| **Global (Persistent)** | Always visible; provides access to top-level destinations | Tab bar, sidebar, top nav bar |
|
|
33
|
+
| **Local (Contextual)** | Appears within a section; navigates sub-content | Breadcrumbs, segmented controls, section tabs |
|
|
34
|
+
| **Supplemental (Shortcuts)** | Accelerates access to frequent or related content | Search, deep links, quick actions, shortcuts |
|
|
35
|
+
|
|
36
|
+
**Global navigation** remains consistent across the entire application. It anchors the
|
|
37
|
+
user's mental model and should never change structure based on context. Limit global
|
|
38
|
+
navigation to 3-7 top-level destinations.
|
|
39
|
+
|
|
40
|
+
**Local navigation** is scoped to the current section and adapts to context. Breadcrumbs,
|
|
41
|
+
in-page tabs, and section headers all serve local navigation. Local navigation should
|
|
42
|
+
visually nest under global navigation so hierarchy is clear.
|
|
43
|
+
|
|
44
|
+
**Supplemental navigation** includes search bars, command palettes (Cmd+K), recently
|
|
45
|
+
visited lists, and contextual quick actions. These do not replace global or local
|
|
46
|
+
navigation but provide shortcuts for power users and return visitors.
|
|
47
|
+
|
|
48
|
+
### 1.2 Navigation Variants
|
|
49
|
+
|
|
50
|
+
#### Tab Bar (Bottom Navigation)
|
|
51
|
+
|
|
52
|
+
- **When to use:** Mobile apps with 3-5 equally important top-level destinations.
|
|
53
|
+
- **Platform:** iOS (standard), Android (Material Design navigation bar).
|
|
54
|
+
- **Behavior:** Tapping a tab switches the view; long-press may reveal sub-options.
|
|
55
|
+
Each tab maintains its own navigation stack. Re-tapping the active tab scrolls
|
|
56
|
+
to top or pops to root.
|
|
57
|
+
- **Apple HIG:** Use 3-5 tabs on iPhone. Use SF Symbols that automatically adapt
|
|
58
|
+
between regular and compact contexts. Tab titles should be concrete nouns or verbs.
|
|
59
|
+
Avoid overflow ("More") tabs whenever possible.
|
|
60
|
+
- **Material Design 3:** Navigation bar supports 3-5 destinations. Each destination
|
|
61
|
+
has an icon and an optional text label. Active destination uses a filled icon with
|
|
62
|
+
a pill-shaped indicator behind it.
|
|
63
|
+
|
|
64
|
+
#### Sidebar Navigation
|
|
65
|
+
|
|
66
|
+
- **When to use:** Desktop and tablet apps with 5+ destinations, or apps with
|
|
67
|
+
hierarchical content (file managers, project tools, messaging).
|
|
68
|
+
- **Platform:** macOS (primary pattern), iPadOS (replaces tab bar), web (common).
|
|
69
|
+
- **Behavior:** Persistent left-aligned panel. Can be collapsible (icon-only mode)
|
|
70
|
+
or expandable. Supports nested items via accordions or tree views.
|
|
71
|
+
- **Best for:** Productivity tools (Notion, Linear, Slack), admin dashboards,
|
|
72
|
+
content management systems.
|
|
73
|
+
|
|
74
|
+
#### Navigation Drawer (Hamburger Menu)
|
|
75
|
+
|
|
76
|
+
- **When to use:** Secondary navigation on mobile when bottom tabs handle primary
|
|
77
|
+
destinations; or as the sole navigation only when the app has many destinations
|
|
78
|
+
that cannot fit in a tab bar.
|
|
79
|
+
- **Platform:** Android (being deprecated in M3 Expressive in favor of expanded
|
|
80
|
+
navigation rail), web (responsive fallback).
|
|
81
|
+
- **Critical caveat:** NNGroup research with 179 participants found that hidden
|
|
82
|
+
navigation reduces content discoverability by over 20% compared to visible
|
|
83
|
+
navigation. On desktop, users engaged with hidden navigation only 27% of the
|
|
84
|
+
time vs. nearly double for visible navigation. Use visible navigation whenever
|
|
85
|
+
screen space permits.
|
|
86
|
+
|
|
87
|
+
#### Top Navigation Bar
|
|
88
|
+
|
|
89
|
+
- **When to use:** Websites with 4-8 top-level sections. Marketing sites,
|
|
90
|
+
documentation, e-commerce.
|
|
91
|
+
- **Platform:** Web (standard), desktop apps (secondary to sidebar).
|
|
92
|
+
- **Behavior:** Horizontal bar at the top of the viewport. May include dropdowns
|
|
93
|
+
(mega menus) for sub-navigation. Sticky positioning keeps it accessible during
|
|
94
|
+
scroll.
|
|
95
|
+
- **Guidelines:** Front-load keywords in labels. Use clear category names, not
|
|
96
|
+
clever branding terms. Keep dropdowns to one level deep when possible.
|
|
97
|
+
|
|
98
|
+
#### Bottom Navigation (Android Specific)
|
|
99
|
+
|
|
100
|
+
- **When to use:** Android apps with 3-5 primary destinations.
|
|
101
|
+
- **M3 Expressive update (2025):** Short bottom bars have returned. Navigation
|
|
102
|
+
drawers on phones are being deprecated in favor of the bottom navigation bar
|
|
103
|
+
plus an expanded/collapsed navigation rail system.
|
|
104
|
+
|
|
105
|
+
#### Navigation Rail
|
|
106
|
+
|
|
107
|
+
- **When to use:** Tablet and foldable devices; medium-width screens (600-840dp).
|
|
108
|
+
- **Platform:** Android/Material Design.
|
|
109
|
+
- **Behavior:** Vertical strip on the leading edge with 3-7 icon+label destinations.
|
|
110
|
+
Can include a FAB. M3 Expressive introduces collapsed (icon-only) and expanded
|
|
111
|
+
(icon+label, replacing drawer) states.
|
|
112
|
+
|
|
113
|
+
#### Breadcrumbs
|
|
114
|
+
|
|
115
|
+
- **When to use:** Hierarchical content with 3+ levels. E-commerce categories,
|
|
116
|
+
documentation, file systems.
|
|
117
|
+
- **Platform:** Web (primary), desktop apps.
|
|
118
|
+
- **Behavior:** Horizontal trail showing the path from root to current page.
|
|
119
|
+
Each segment is a link except the current page. Placed below global navigation,
|
|
120
|
+
above page heading.
|
|
121
|
+
- **NNGroup guideline:** Breadcrumbs should always show the current page (even if
|
|
122
|
+
the title is repeated). They supplement -- never replace -- primary navigation.
|
|
123
|
+
- **Mobile:** Generally not recommended. Use a stepper for multi-step flows instead.
|
|
124
|
+
|
|
125
|
+
#### Stepper / Wizard
|
|
126
|
+
|
|
127
|
+
- **When to use:** Linear multi-step processes: checkout, onboarding, form wizards.
|
|
128
|
+
- **Behavior:** Shows numbered steps with current position highlighted. Completed
|
|
129
|
+
steps may be clickable for editing. Forward progress requires validation.
|
|
130
|
+
- **Guidelines:** Limit to 3-7 steps. Show a progress indicator. Allow backward
|
|
131
|
+
navigation to completed steps. On mobile, a stepper is preferred over breadcrumbs
|
|
132
|
+
for multi-step flows.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 2. Best-in-Class Examples
|
|
137
|
+
|
|
138
|
+
### 2.1 Spotify -- Bottom Tab Bar (3 tabs: Home, Search, Library)
|
|
139
|
+
- Minimal tab count keeps decisions simple and thumb-friendly.
|
|
140
|
+
- Gradient-blended tab bar creates seamless visual transition with content.
|
|
141
|
+
- Hides on scroll-down, reappears on scroll-up; each tab preserves its own stack.
|
|
142
|
+
- "Now Playing" bar above tab bar serves as persistent supplemental navigation.
|
|
143
|
+
|
|
144
|
+
### 2.2 Airbnb -- Bottom Tab Bar (5 tabs, icon + label)
|
|
145
|
+
- Unified cross-platform experience: moved Android from drawer to bottom tabs
|
|
146
|
+
matching iOS for consistency.
|
|
147
|
+
- Category filter chips (horizontal scroll) act as local navigation within Explore,
|
|
148
|
+
avoiding a separate filter screen.
|
|
149
|
+
- Deep linking preserves a synthetic back stack to the parent category.
|
|
150
|
+
|
|
151
|
+
### 2.3 Linear -- Collapsible Sidebar + Tabs + Cmd+K
|
|
152
|
+
- Three-section sidebar (Product, Customers, Company) collapsible to icon-only.
|
|
153
|
+
- In-app tabs (List, Board, Timeline) for contextual view switching.
|
|
154
|
+
- Cmd+K command palette for power-user supplemental navigation.
|
|
155
|
+
- Works identically in Electron and browser with adaptive nav buttons.
|
|
156
|
+
|
|
157
|
+
### 2.4 Notion -- Accordion Sidebar + Breadcrumbs + Search
|
|
158
|
+
- Accordion tree structure supports infinite nesting while keeping top level scannable.
|
|
159
|
+
- Four persistent top items (Search, AI, Home, Inbox) always accessible.
|
|
160
|
+
- Breadcrumbs at page top enable quick jumps to any ancestor.
|
|
161
|
+
- Drag-and-drop reordering; user-resizable sidebar that remembers state.
|
|
162
|
+
|
|
163
|
+
### 2.5 Instagram -- Bottom Tab Bar (5 tabs, icon-only)
|
|
164
|
+
- Filled (solid) vs. outlined (stroke) icons for active/inactive -- industry standard.
|
|
165
|
+
- Swipe gestures for Stories and Feed as natural supplemental navigation.
|
|
166
|
+
- Camera and messaging via edge swipes keeps tab bar clean.
|
|
167
|
+
|
|
168
|
+
### 2.6 GitHub -- Top Nav + Contextual Tabs + Breadcrumbs
|
|
169
|
+
- Repository-scoped tab bar (Code, Issues, PRs, Actions) within a consistent shell.
|
|
170
|
+
- Breadcrumb-style file path navigation in the code browser.
|
|
171
|
+
- Keyboard shortcuts (`?` for help) as supplemental navigation for developers.
|
|
172
|
+
|
|
173
|
+
### 2.7 Slack -- Dual-Panel Sidebar + Cmd+K
|
|
174
|
+
- Hierarchical channel sidebar with collapsible sections and unread badges.
|
|
175
|
+
- Cmd+K quick switcher for instant navigation to any channel, person, or file.
|
|
176
|
+
- Thread side sheet maintains main channel context; mobile adapts to single-panel.
|
|
177
|
+
|
|
178
|
+
### 2.8 Figma -- Three-Panel Layout (Layers | Canvas | Properties)
|
|
179
|
+
- Panel layout matches the mental model: structure left, canvas center, properties right.
|
|
180
|
+
- Page tabs in the left panel; all panels independently collapsible.
|
|
181
|
+
- Breadcrumb-style component path for nested component navigation.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 3. User Flow Mapping
|
|
186
|
+
|
|
187
|
+
### 3.1 Navigation Hierarchy Design
|
|
188
|
+
|
|
189
|
+
**Mobile:** Limit to 2-3 levels of hierarchy maximum.
|
|
190
|
+
- Level 1: Tab bar / bottom navigation (3-5 destinations)
|
|
191
|
+
- Level 2: Lists, cards, or section headers within a tab
|
|
192
|
+
- Level 3: Detail views pushed onto the navigation stack
|
|
193
|
+
|
|
194
|
+
**Desktop/Web:** Can support 3-4 levels with care.
|
|
195
|
+
- Level 1: Sidebar or top nav (global)
|
|
196
|
+
- Level 2: Sub-sections within sidebar or breadcrumb path
|
|
197
|
+
- Level 3: Page-level content tabs or segmented controls
|
|
198
|
+
- Level 4: Detail panels, modals, or side sheets
|
|
199
|
+
|
|
200
|
+
**Rule of thumb:** If a user cannot describe where they are in under 5 seconds, the
|
|
201
|
+
hierarchy is too deep.
|
|
202
|
+
|
|
203
|
+
### 3.2 Deep Linking Considerations
|
|
204
|
+
|
|
205
|
+
Deep links must produce a coherent navigation state even when the user enters the
|
|
206
|
+
app at an arbitrary point.
|
|
207
|
+
|
|
208
|
+
**Synthetic back stack:** When a user opens a deep link (e.g., a shared message or
|
|
209
|
+
product URL), the system must construct a back stack that simulates the path they
|
|
210
|
+
would have taken from the root. Android Navigation component handles this
|
|
211
|
+
automatically if the navigation graph is well-defined. iOS requires manual
|
|
212
|
+
configuration of the NavigationStack path.
|
|
213
|
+
|
|
214
|
+
**Authentication gates:** If a deep link targets authenticated content, queue the
|
|
215
|
+
destination and redirect through login, then resume navigation post-auth. Never
|
|
216
|
+
drop the intended destination.
|
|
217
|
+
|
|
218
|
+
**URL structure:** Web deep links should mirror the information architecture.
|
|
219
|
+
`/projects/acme/issues/42` is self-documenting. Avoid opaque IDs without context:
|
|
220
|
+
`/p/x7f3k` tells the user nothing.
|
|
221
|
+
|
|
222
|
+
**State serialization:** Deep links should encode enough state to restore the view:
|
|
223
|
+
active filters, sort order, scroll position (where practical). Consider URL query
|
|
224
|
+
parameters or fragment identifiers for web.
|
|
225
|
+
|
|
226
|
+
### 3.3 State Preservation During Navigation
|
|
227
|
+
|
|
228
|
+
- **Tab state:** Each tab in a bottom navigation should maintain its own navigation
|
|
229
|
+
stack. Switching from Tab A to Tab B and back should return to Tab A's previous
|
|
230
|
+
state (scroll position, sub-page).
|
|
231
|
+
- **Form state:** Navigating away from an in-progress form should either auto-save
|
|
232
|
+
or prompt the user. Never silently discard input.
|
|
233
|
+
- **Scroll position:** Returning to a list should restore the previous scroll position.
|
|
234
|
+
Infinite-scroll lists require careful state management to avoid content jumps.
|
|
235
|
+
- **Selection state:** Selected items in a list should persist when navigating to
|
|
236
|
+
detail and back. Multi-select mode should survive orientation changes.
|
|
237
|
+
|
|
238
|
+
### 3.4 Back Navigation Behavior
|
|
239
|
+
|
|
240
|
+
| Platform | Back Mechanism | Expected Behavior |
|
|
241
|
+
|---|---|---|
|
|
242
|
+
| **iOS** | Swipe from left edge / back button | Pops the current view from the navigation stack. If at root, no action. |
|
|
243
|
+
| **Android** | System back button / gesture | Pops the current view. At root of a tab, switches to the start tab. At the start tab's root, exits the app. |
|
|
244
|
+
| **Web** | Browser back button | Navigates to the previous URL in browser history. SPAs must manage history.pushState correctly. |
|
|
245
|
+
| **Desktop** | Cmd/Ctrl+[ or back button | Varies by app. Should mirror the platform's web or native convention. |
|
|
246
|
+
|
|
247
|
+
**Android "exit through home" pattern:** When the user presses back on a non-start
|
|
248
|
+
tab, navigate to the start tab first, then exit the app on the next back press.
|
|
249
|
+
This creates predictable behavior regardless of which tab the user is on.
|
|
250
|
+
|
|
251
|
+
### 3.5 Edge Cases
|
|
252
|
+
|
|
253
|
+
**Deep nesting:** Users lose context after 3+ levels on mobile. Mitigation: use
|
|
254
|
+
breadcrumbs (web/desktop), show a persistent header with the parent context
|
|
255
|
+
(mobile), or flatten the hierarchy.
|
|
256
|
+
|
|
257
|
+
**Circular navigation:** Occurs when navigation paths form loops (A -> B -> C -> A).
|
|
258
|
+
This disorients users who rely on the back button. Prevention: ensure the back
|
|
259
|
+
button always pops the stack rather than pushing a new destination. Never link a
|
|
260
|
+
detail page back to itself or to a page that links back to it outside of the
|
|
261
|
+
normal stack.
|
|
262
|
+
|
|
263
|
+
**Dead ends:** Pages with no onward navigation and no clear way to return. Common
|
|
264
|
+
in confirmation pages ("Your order is placed" with no link to order details or
|
|
265
|
+
home). Fix: always provide at least two exits -- a primary action ("View Order")
|
|
266
|
+
and a secondary link ("Return to Home").
|
|
267
|
+
|
|
268
|
+
**Modal dead ends:** Full-screen modals on mobile that lack a close button or
|
|
269
|
+
have a close button only in a non-obvious location. Always include a visible
|
|
270
|
+
close affordance in a platform-standard position (top-left on iOS, top-right
|
|
271
|
+
on Android/web).
|
|
272
|
+
|
|
273
|
+
**Navigation during async operations:** If a user navigates away during a
|
|
274
|
+
background upload or save, the operation should continue. Use a persistent
|
|
275
|
+
indicator (toast, badge, or notification) to report completion.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 4. Micro-Interactions
|
|
280
|
+
|
|
281
|
+
### 4.1 Tab Switching Animations
|
|
282
|
+
|
|
283
|
+
| Technique | Description | Best For |
|
|
284
|
+
|---|---|---|
|
|
285
|
+
| **Cross-fade** | Old content fades out, new content fades in simultaneously | Content-heavy tabs (feeds, lists) |
|
|
286
|
+
| **Slide** | Content slides horizontally in the direction of the selected tab | Adjacent tabs with spatial relationship |
|
|
287
|
+
| **No animation** | Instant swap | High-frequency switching (e.g., dev tools) |
|
|
288
|
+
| **Shared element transition** | A specific element morphs between views | Detail-to-detail navigation |
|
|
289
|
+
|
|
290
|
+
**Timing:** Tab content transitions should complete in 200-300ms. Use ease-out
|
|
291
|
+
(deceleration) curves for entering content and ease-in (acceleration) for exiting
|
|
292
|
+
content. Material Design recommends 300ms for standard transitions. Apple HIG
|
|
293
|
+
defaults to ~350ms for push/pop but tab switches are typically faster at ~250ms.
|
|
294
|
+
|
|
295
|
+
### 4.2 Active State Indication
|
|
296
|
+
|
|
297
|
+
| Indicator Type | Visual Treatment | Platform Precedent |
|
|
298
|
+
|---|---|---|
|
|
299
|
+
| **Filled icon** | Active = filled/solid; Inactive = outlined/stroke | Instagram, iOS tab bars |
|
|
300
|
+
| **Pill indicator** | Colored pill shape behind the active icon | Material Design 3 |
|
|
301
|
+
| **Underline** | Colored bar below the active tab label | Web top nav, Material tabs |
|
|
302
|
+
| **Background highlight** | Subtle background color on active item | Sidebar navigation (Linear, Notion) |
|
|
303
|
+
| **Color change** | Active icon/label uses brand or accent color | Cross-platform standard |
|
|
304
|
+
| **Weight change** | Active label uses bold/semibold; inactive uses regular | Supplemental to other indicators |
|
|
305
|
+
|
|
306
|
+
**Best practice:** Combine at least two indicators (e.g., filled icon + color change)
|
|
307
|
+
to ensure the active state is perceivable by users with color vision deficiency.
|
|
308
|
+
|
|
309
|
+
### 4.3 Transition Timing Reference
|
|
310
|
+
|
|
311
|
+
| Interaction | Duration | Easing | Notes |
|
|
312
|
+
|---|---|---|---|
|
|
313
|
+
| Tab switch (content swap) | 200-300ms | ease-out | Avoid slide for non-adjacent tabs |
|
|
314
|
+
| Page push (drill down) | 300-350ms | ease-in-out | Match platform default |
|
|
315
|
+
| Page pop (back) | 250-300ms | ease-in-out | Slightly faster than push feels snappier |
|
|
316
|
+
| Sidebar expand/collapse | 200-250ms | ease-out | Use transform, not width animation |
|
|
317
|
+
| Drawer open | 250-300ms | ease-out (deceleration) | Scrim fades in simultaneously |
|
|
318
|
+
| Drawer close | 200-250ms | ease-in (acceleration) | Faster close feels responsive |
|
|
319
|
+
| Dropdown menu open | 150-200ms | ease-out | Stagger items by 30-50ms for polish |
|
|
320
|
+
| Breadcrumb hover underline | 150ms | ease-in-out | Subtle, not distracting |
|
|
321
|
+
|
|
322
|
+
**Performance rule:** Only animate `transform` and `opacity` properties. These are
|
|
323
|
+
GPU-composited and avoid layout recalculation. Animating `width`, `height`, `top`,
|
|
324
|
+
or `left` causes layout thrashing and jank, especially on lower-end devices.
|
|
325
|
+
|
|
326
|
+
### 4.4 Haptic Feedback
|
|
327
|
+
|
|
328
|
+
- **iOS:** Use light impact feedback (UIImpactFeedbackGenerator) on tab selection.
|
|
329
|
+
Use selection feedback for scrolling through picker-style navigation.
|
|
330
|
+
- **Android:** Use HapticFeedbackConstants.CLOCK_TICK for tab selection.
|
|
331
|
+
- **When to skip:** Rapid repeated navigation (e.g., swiping through pages). Haptics
|
|
332
|
+
on every scroll event is overwhelming.
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## 5. Anti-Patterns
|
|
337
|
+
|
|
338
|
+
### 5.1 Hamburger Menu as Primary Navigation
|
|
339
|
+
|
|
340
|
+
**Problem:** Hiding primary navigation behind a hamburger icon reduces discoverability
|
|
341
|
+
by over 20% (NNGroup research, 179 participants). Users on desktop engaged with
|
|
342
|
+
hidden navigation only 27% of the time.
|
|
343
|
+
|
|
344
|
+
**Fix:** Use a bottom tab bar on mobile. Use a visible sidebar or top nav on desktop.
|
|
345
|
+
Reserve the hamburger for secondary navigation or settings.
|
|
346
|
+
|
|
347
|
+
### 5.2 Too Many Navigation Levels
|
|
348
|
+
|
|
349
|
+
**Problem:** More than 3 levels on mobile (or 4 on desktop) creates cognitive overload.
|
|
350
|
+
Users lose their sense of position and cannot predict what the back button will do.
|
|
351
|
+
|
|
352
|
+
**Fix:** Flatten the hierarchy. Use search, filters, and tags to surface deep content
|
|
353
|
+
without requiring deep drilling. If depth is unavoidable, use breadcrumbs (desktop)
|
|
354
|
+
or persistent context headers (mobile).
|
|
355
|
+
|
|
356
|
+
### 5.3 Inconsistent Back Behavior
|
|
357
|
+
|
|
358
|
+
**Problem:** The back button sometimes pops the stack, sometimes navigates to a
|
|
359
|
+
different section, sometimes closes a modal. Users cannot build a reliable mental
|
|
360
|
+
model.
|
|
361
|
+
|
|
362
|
+
**Fix:** Back always reverses the most recent navigation action. Modals use a
|
|
363
|
+
separate close/dismiss action (X button), not the back button on Android. On web,
|
|
364
|
+
ensure `history.pushState` is called correctly so the browser back button works
|
|
365
|
+
predictably.
|
|
366
|
+
|
|
367
|
+
### 5.4 Hidden Navigation on Desktop
|
|
368
|
+
|
|
369
|
+
**Problem:** Collapsing navigation into a hamburger on desktop when there is ample
|
|
370
|
+
screen real estate. This adds unnecessary interaction cost.
|
|
371
|
+
|
|
372
|
+
**Fix:** Always show navigation on screens wider than 1024px. Use a collapsible
|
|
373
|
+
sidebar that defaults to expanded on desktop.
|
|
374
|
+
|
|
375
|
+
### 5.5 Icon-Only Navigation Without Labels
|
|
376
|
+
|
|
377
|
+
**Problem:** Users cannot reliably identify navigation destinations from icons alone,
|
|
378
|
+
except for universally understood icons (home, search, profile). Custom or abstract
|
|
379
|
+
icons require labels.
|
|
380
|
+
|
|
381
|
+
**Fix:** Always pair icons with text labels in primary navigation. Icon-only is
|
|
382
|
+
acceptable only for well-established patterns (e.g., a sidebar collapse toggle)
|
|
383
|
+
or when a tooltip is always available on hover (desktop only).
|
|
384
|
+
|
|
385
|
+
### 5.6 More Than 5 Bottom Tabs
|
|
386
|
+
|
|
387
|
+
**Problem:** Cramming 6+ tabs into a mobile bottom bar makes tap targets too small
|
|
388
|
+
(below the 44x44pt iOS / 48x48dp Android minimum) and overwhelms users with choices.
|
|
389
|
+
|
|
390
|
+
**Fix:** Limit to 5 tabs maximum. Move lower-priority destinations to a "More" tab,
|
|
391
|
+
a profile/settings screen, or a navigation drawer.
|
|
392
|
+
|
|
393
|
+
### 5.7 Navigation That Changes Based on Context
|
|
394
|
+
|
|
395
|
+
**Problem:** Global navigation items that appear, disappear, or reorder based on the
|
|
396
|
+
current screen. Users rely on spatial memory to find navigation items.
|
|
397
|
+
|
|
398
|
+
**Fix:** Global navigation must be structurally identical on every screen. Only
|
|
399
|
+
the active state should change. Contextual navigation belongs in local navigation
|
|
400
|
+
(sub-tabs, toolbars), not in the global shell.
|
|
401
|
+
|
|
402
|
+
### 5.8 Jailbreak Navigation (Breaking the Stack)
|
|
403
|
+
|
|
404
|
+
**Problem:** Pushing a view that logically belongs to a different tab onto the current
|
|
405
|
+
tab's stack. Example: tapping a user profile in a messaging tab pushes a profile
|
|
406
|
+
view that "feels" like it should be in the profile tab.
|
|
407
|
+
|
|
408
|
+
**Fix:** If cross-tab navigation is necessary, switch to the destination tab and
|
|
409
|
+
push onto that tab's stack. Or open the content in a modal/sheet that overlays
|
|
410
|
+
the current tab without disrupting its stack.
|
|
411
|
+
|
|
412
|
+
### 5.9 Dead-End Pages
|
|
413
|
+
|
|
414
|
+
**Problem:** Confirmation pages, error pages, or empty states that offer no onward
|
|
415
|
+
navigation. Users are stranded.
|
|
416
|
+
|
|
417
|
+
**Fix:** Every page must have at least one clear exit. Confirmation pages should
|
|
418
|
+
offer "View Details" and "Return Home." Error pages should offer retry and a path
|
|
419
|
+
to a known good state. Empty states should offer an action to create content.
|
|
420
|
+
|
|
421
|
+
### 5.10 Swipe Conflicts
|
|
422
|
+
|
|
423
|
+
**Problem:** Swipe-to-go-back conflicts with in-page carousels or swipe-to-delete.
|
|
424
|
+
**Fix:** Use edge-initiated swipe (first 20px from screen edge) for back navigation.
|
|
425
|
+
Disable back-swipe on screens with critical horizontal gestures.
|
|
426
|
+
|
|
427
|
+
### 5.11 Auto-Hiding Navigation Without Recovery
|
|
428
|
+
|
|
429
|
+
**Problem:** Nav bar hides on scroll and only reappears at scroll-to-top.
|
|
430
|
+
**Fix:** Reveal navigation on any upward scroll, not just scroll-to-top.
|
|
431
|
+
|
|
432
|
+
### 5.12 Inconsistent Navigation Across Platforms
|
|
433
|
+
|
|
434
|
+
**Problem:** Different primary nav patterns on iOS vs. Android creates friction.
|
|
435
|
+
**Fix:** Converge on a unified pattern. Airbnb moved Android from a left drawer
|
|
436
|
+
to bottom tabs matching iOS for cross-platform consistency.
|
|
437
|
+
|
|
438
|
+
### 5.13 Pagination Instead of Continuity
|
|
439
|
+
|
|
440
|
+
**Problem:** Numbered pages for content feeds force repeated "Next" clicks.
|
|
441
|
+
**Fix:** Use infinite scroll or "Load More" for feeds. Reserve pagination for
|
|
442
|
+
structured data tables.
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## 6. Accessibility Requirements
|
|
447
|
+
|
|
448
|
+
### 6.1 Keyboard Navigation
|
|
449
|
+
|
|
450
|
+
Navigation must be fully operable without a mouse or touch input.
|
|
451
|
+
|
|
452
|
+
| Key | Action |
|
|
453
|
+
|---|---|
|
|
454
|
+
| **Tab** | Move focus to the next interactive element in the navigation |
|
|
455
|
+
| **Shift+Tab** | Move focus to the previous interactive element |
|
|
456
|
+
| **Enter / Space** | Activate the focused navigation item |
|
|
457
|
+
| **Arrow Left/Right** | Move between sibling tabs or menu items (within a tab list) |
|
|
458
|
+
| **Arrow Up/Down** | Move between items in vertical menus or dropdowns |
|
|
459
|
+
| **Escape** | Close an open dropdown, submenu, or drawer |
|
|
460
|
+
| **Home / End** | Jump to the first / last item in a menu |
|
|
461
|
+
|
|
462
|
+
**Tab list pattern (WAI-ARIA):** Only the active tab should be in the tab order
|
|
463
|
+
(`tabindex="0"`). Other tabs should have `tabindex="-1"`. Arrow keys move focus
|
|
464
|
+
between tabs. This is the "roving tabindex" pattern.
|
|
465
|
+
|
|
466
|
+
### 6.2 Skip Navigation Links
|
|
467
|
+
|
|
468
|
+
WCAG 2.4.1 (Bypass Blocks) requires a mechanism to skip repetitive navigation.
|
|
469
|
+
|
|
470
|
+
- Place a "Skip to main content" link as the first focusable element on every page.
|
|
471
|
+
- The link can be visually hidden by default but must become visible on focus.
|
|
472
|
+
- The link target should be the `<main>` element or a container with
|
|
473
|
+
`id="main-content"`.
|
|
474
|
+
- In SPAs, skip links must remain functional after client-side route changes.
|
|
475
|
+
|
|
476
|
+
```html
|
|
477
|
+
<a href="#main-content" class="skip-link">Skip to main content</a>
|
|
478
|
+
<!-- ... navigation ... -->
|
|
479
|
+
<main id="main-content" tabindex="-1">
|
|
480
|
+
<!-- Page content -->
|
|
481
|
+
</main>
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
The `tabindex="-1"` on `<main>` allows it to receive programmatic focus without
|
|
485
|
+
being in the natural tab order.
|
|
486
|
+
|
|
487
|
+
### 6.3 ARIA Landmarks
|
|
488
|
+
|
|
489
|
+
Use semantic HTML elements with implicit ARIA roles. Explicit ARIA roles are
|
|
490
|
+
only needed when semantic elements cannot be used.
|
|
491
|
+
|
|
492
|
+
| HTML Element | Implicit ARIA Role | Purpose |
|
|
493
|
+
|---|---|---|
|
|
494
|
+
| `<nav>` | `navigation` | Wraps navigation links |
|
|
495
|
+
| `<main>` | `main` | Primary content area |
|
|
496
|
+
| `<header>` | `banner` | Site-wide header (when child of `<body>`) |
|
|
497
|
+
| `<footer>` | `contentinfo` | Site-wide footer (when child of `<body>`) |
|
|
498
|
+
| `<aside>` | `complementary` | Sidebar or supplemental content |
|
|
499
|
+
| `<form>` | `form` | When given an accessible name |
|
|
500
|
+
| `<section>` | `region` | When given an accessible name |
|
|
501
|
+
|
|
502
|
+
**Multiple `<nav>` elements:** If a page has more than one navigation region
|
|
503
|
+
(e.g., primary nav and footer nav), label each with `aria-label`:
|
|
504
|
+
|
|
505
|
+
```html
|
|
506
|
+
<nav aria-label="Primary">...</nav>
|
|
507
|
+
<nav aria-label="Footer">...</nav>
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
Screen reader users can press a single key to cycle through landmarks, making
|
|
511
|
+
it critical that landmarks are correctly labeled and not overused.
|
|
512
|
+
|
|
513
|
+
### 6.4 Screen Reader Announcements on Navigation
|
|
514
|
+
|
|
515
|
+
When the page or view changes in an SPA, screen readers must be informed:
|
|
516
|
+
|
|
517
|
+
- **Route change announcement:** Use an `aria-live="polite"` region to announce
|
|
518
|
+
the new page title. Alternatively, update `document.title` and move focus to
|
|
519
|
+
the `<h1>` of the new page.
|
|
520
|
+
- **Focus management:** After a route change, move focus to the main content area
|
|
521
|
+
or the `<h1>` heading. This prevents screen reader users from being stranded at
|
|
522
|
+
the top of the DOM after a navigation event.
|
|
523
|
+
- **Loading states:** If navigation triggers a loading state, announce "Loading"
|
|
524
|
+
via aria-live. When content is ready, announce the page title and move focus.
|
|
525
|
+
|
|
526
|
+
```javascript
|
|
527
|
+
// Example: SPA route change focus management
|
|
528
|
+
function onRouteChange(newTitle) {
|
|
529
|
+
document.title = newTitle;
|
|
530
|
+
const heading = document.querySelector('main h1');
|
|
531
|
+
if (heading) {
|
|
532
|
+
heading.setAttribute('tabindex', '-1');
|
|
533
|
+
heading.focus();
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
### 6.5 Current Page Indication
|
|
539
|
+
|
|
540
|
+
The active navigation item must be programmatically indicated, not just visually:
|
|
541
|
+
|
|
542
|
+
- Use `aria-current="page"` on the link to the current page.
|
|
543
|
+
- For tab-based navigation, use `role="tablist"` on the container, `role="tab"`
|
|
544
|
+
on each tab, and `aria-selected="true"` on the active tab.
|
|
545
|
+
|
|
546
|
+
```html
|
|
547
|
+
<nav aria-label="Primary">
|
|
548
|
+
<a href="/home" aria-current="page">Home</a>
|
|
549
|
+
<a href="/about">About</a>
|
|
550
|
+
<a href="/contact">Contact</a>
|
|
551
|
+
</nav>
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### 6.6 Touch Target Sizes
|
|
555
|
+
|
|
556
|
+
- **WCAG 2.5.8 (AAA):** Minimum target size of 24x24 CSS pixels.
|
|
557
|
+
- **WCAG 2.5.5 (AAA) / best practice:** 44x44 CSS pixels.
|
|
558
|
+
- **Apple HIG:** Minimum 44x44 points.
|
|
559
|
+
- **Material Design:** Minimum 48x48 dp.
|
|
560
|
+
- Ensure adequate spacing between navigation items to prevent accidental activation.
|
|
561
|
+
|
|
562
|
+
### 6.7 Motion and Reduced Motion
|
|
563
|
+
|
|
564
|
+
Respect the user's `prefers-reduced-motion` media query:
|
|
565
|
+
|
|
566
|
+
```css
|
|
567
|
+
@media (prefers-reduced-motion: reduce) {
|
|
568
|
+
* {
|
|
569
|
+
animation-duration: 0.01ms !important;
|
|
570
|
+
transition-duration: 0.01ms !important;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
Navigation transitions should gracefully degrade to instant swaps when reduced
|
|
576
|
+
motion is preferred. Never gate functionality behind an animation.
|
|
577
|
+
|
|
578
|
+
---
|
|
579
|
+
|
|
580
|
+
## 7. Cross-Platform Adaptation
|
|
581
|
+
|
|
582
|
+
### 7.1 iOS
|
|
583
|
+
|
|
584
|
+
| Component | Usage |
|
|
585
|
+
|---|---|
|
|
586
|
+
| **Tab Bar** (bottom) | 3-5 top-level destinations. Standard for iPhone. |
|
|
587
|
+
| **Navigation Bar** (top) | Title, back button, and action items for the current screen. |
|
|
588
|
+
| **Sidebar** | iPad primary navigation (replaces tab bar on wide screens). |
|
|
589
|
+
| **Search Bar** | Integrated into navigation bar or as a tab destination. |
|
|
590
|
+
|
|
591
|
+
**Key conventions:**
|
|
592
|
+
- Back button appears in the top-left with the previous screen's title as the label.
|
|
593
|
+
- Swipe from left edge to go back (interruptible gesture).
|
|
594
|
+
- Tab bar uses filled/outlined icon pairs for active/inactive states.
|
|
595
|
+
- Large titles collapse on scroll for a dynamic, spacious feel.
|
|
596
|
+
|
|
597
|
+
### 7.2 Android
|
|
598
|
+
|
|
599
|
+
| Component | Usage |
|
|
600
|
+
|---|---|
|
|
601
|
+
| **Bottom Navigation Bar** | 3-5 primary destinations. Standard for phones. |
|
|
602
|
+
| **Navigation Rail** | 3-7 destinations on tablets and foldables (collapsed or expanded). |
|
|
603
|
+
| **Top App Bar** | Title, navigation icon, and action items. |
|
|
604
|
+
| **Navigation Drawer** | Being deprecated in M3 Expressive; use expanded rail instead. |
|
|
605
|
+
|
|
606
|
+
**Key conventions:**
|
|
607
|
+
- System back gesture (swipe from either edge) or back button.
|
|
608
|
+
- Predictive back animation (Android 14+) shows a preview of the previous screen.
|
|
609
|
+
- Top app bar scrolls off screen (standard) or stays pinned (prominent).
|
|
610
|
+
- FAB can be integrated into the navigation rail.
|
|
611
|
+
|
|
612
|
+
### 7.3 Web
|
|
613
|
+
|
|
614
|
+
| Component | Usage |
|
|
615
|
+
|---|---|
|
|
616
|
+
| **Top Navigation Bar** | Horizontal bar with dropdowns. Standard for marketing sites. |
|
|
617
|
+
| **Sidebar** | Persistent or collapsible. Standard for web apps and dashboards. |
|
|
618
|
+
| **Breadcrumbs** | Hierarchical wayfinding for content-heavy sites. |
|
|
619
|
+
| **Mega Menu** | Large dropdown panels for sites with many categories (e-commerce). |
|
|
620
|
+
|
|
621
|
+
**Key conventions:**
|
|
622
|
+
- Logo in top-left links to homepage.
|
|
623
|
+
- Active page indicated by underline, color change, or bold text.
|
|
624
|
+
- Sticky navigation on scroll (top bar or sidebar).
|
|
625
|
+
- Responsive breakpoints: top nav collapses to hamburger below ~768px.
|
|
626
|
+
Consider bottom tab bar for mobile web apps (progressive web apps).
|
|
627
|
+
|
|
628
|
+
### 7.4 Desktop (Native Applications)
|
|
629
|
+
|
|
630
|
+
| Component | Usage |
|
|
631
|
+
|---|---|
|
|
632
|
+
| **Sidebar + Top Bar** | Standard for productivity apps (VS Code, Slack, Figma). |
|
|
633
|
+
| **Menu Bar** | macOS/Windows native menu bar for less-frequent actions. |
|
|
634
|
+
| **Command Palette** | Cmd+K / Ctrl+K for keyboard-driven navigation. |
|
|
635
|
+
| **Tab Strip** | Browser-style tabs for multi-document interfaces. |
|
|
636
|
+
|
|
637
|
+
**Key conventions:**
|
|
638
|
+
- Sidebar is the primary navigation, always visible by default.
|
|
639
|
+
- Top bar contains search, notifications, and user profile.
|
|
640
|
+
- Keyboard shortcuts for all primary navigation destinations.
|
|
641
|
+
- Window management (split views, detachable panels) as supplemental navigation.
|
|
642
|
+
|
|
643
|
+
### 7.5 Responsive Adaptation Strategy
|
|
644
|
+
|
|
645
|
+
```
|
|
646
|
+
Screen Width Navigation Pattern
|
|
647
|
+
----------------- ----------------------------------
|
|
648
|
+
< 600px (phone) Bottom tab bar (3-5 tabs)
|
|
649
|
+
600-840px (tablet) Navigation rail (collapsed)
|
|
650
|
+
840-1200px (tablet) Navigation rail (expanded) or sidebar
|
|
651
|
+
> 1200px (desktop) Full sidebar + top bar
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
**The adaptation principle:** Do not simply hide desktop navigation behind a hamburger
|
|
655
|
+
on mobile. Restructure navigation to match each form factor's interaction model.
|
|
656
|
+
Bottom tab bars for thumb-driven phones; sidebars for pointer-driven desktops; rails
|
|
657
|
+
for the in-between.
|
|
658
|
+
|
|
659
|
+
---
|
|
660
|
+
|
|
661
|
+
## 8. Decision Tree
|
|
662
|
+
|
|
663
|
+
Use this decision tree to select the appropriate navigation pattern:
|
|
664
|
+
|
|
665
|
+
```
|
|
666
|
+
START: How many primary destinations?
|
|
667
|
+
|
|
|
668
|
+
+-- 1-2 destinations
|
|
669
|
+
| |
|
|
670
|
+
| +-- Is it a linear flow? --> STEPPER / WIZARD
|
|
671
|
+
| +-- Is it a toggle? -------> SEGMENTED CONTROL / TOGGLE
|
|
672
|
+
|
|
|
673
|
+
+-- 3-5 destinations
|
|
674
|
+
| |
|
|
675
|
+
| +-- What platform?
|
|
676
|
+
| | |
|
|
677
|
+
| | +-- Mobile (iOS/Android) --> BOTTOM TAB BAR
|
|
678
|
+
| | +-- Tablet ----------------> NAVIGATION RAIL
|
|
679
|
+
| | +-- Desktop/Web -----------> TOP NAV BAR or SIDEBAR
|
|
680
|
+
| |
|
|
681
|
+
| +-- Are destinations equally important?
|
|
682
|
+
| |
|
|
683
|
+
| +-- Yes --> BOTTOM TAB BAR (mobile) / TOP NAV (web)
|
|
684
|
+
| +-- No ---> Promote top 3-4 to tabs; demote others to profile/settings
|
|
685
|
+
|
|
|
686
|
+
+-- 6-10 destinations
|
|
687
|
+
| |
|
|
688
|
+
| +-- What platform?
|
|
689
|
+
| | |
|
|
690
|
+
| | +-- Mobile --> BOTTOM TAB BAR (top 5) + "More" tab or profile menu
|
|
691
|
+
| | +-- Tablet --> NAVIGATION RAIL (expanded)
|
|
692
|
+
| | +-- Desktop -> SIDEBAR (collapsible)
|
|
693
|
+
| | +-- Web -----> SIDEBAR or TOP NAV with DROPDOWNS
|
|
694
|
+
| |
|
|
695
|
+
| +-- Is content hierarchical?
|
|
696
|
+
| |
|
|
697
|
+
| +-- Yes --> SIDEBAR with accordion/tree + BREADCRUMBS
|
|
698
|
+
| +-- No ---> SIDEBAR with flat list + SEARCH
|
|
699
|
+
|
|
|
700
|
+
+-- 10+ destinations
|
|
701
|
+
|
|
|
702
|
+
+-- SIDEBAR (with sections, search, and collapsible groups)
|
|
703
|
+
+-- Add COMMAND PALETTE (Cmd+K) as supplemental navigation
|
|
704
|
+
+-- Consider SEARCH as a primary navigation method
|
|
705
|
+
|
|
706
|
+
SUPPLEMENTAL QUESTIONS:
|
|
707
|
+
|
|
|
708
|
+
+-- Is the content deeply hierarchical (3+ levels)?
|
|
709
|
+
| +-- Add BREADCRUMBS (web/desktop)
|
|
710
|
+
| +-- Use persistent CONTEXT HEADERS (mobile)
|
|
711
|
+
|
|
|
712
|
+
+-- Do users perform multi-step tasks?
|
|
713
|
+
| +-- Add STEPPER within the content area
|
|
714
|
+
|
|
|
715
|
+
+-- Are power users a primary audience?
|
|
716
|
+
| +-- Add COMMAND PALETTE and KEYBOARD SHORTCUTS
|
|
717
|
+
|
|
|
718
|
+
+-- Does the app have user-generated content structure?
|
|
719
|
+
+-- Use ACCORDION SIDEBAR (like Notion) for user-defined hierarchy
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
---
|
|
723
|
+
|
|
724
|
+
## 9. Quick Reference Checklist
|
|
725
|
+
|
|
726
|
+
Use this checklist when designing or reviewing navigation:
|
|
727
|
+
|
|
728
|
+
### Structure
|
|
729
|
+
- [ ] Primary destinations limited to 3-5 for mobile, 5-8 for desktop
|
|
730
|
+
- [ ] Navigation hierarchy does not exceed 3 levels on mobile
|
|
731
|
+
- [ ] Every page has at least one clear exit (no dead ends)
|
|
732
|
+
- [ ] Global navigation is consistent across all screens (no contextual changes)
|
|
733
|
+
- [ ] Back button behavior is predictable and stack-based
|
|
734
|
+
- [ ] Deep links construct a synthetic back stack to the root
|
|
735
|
+
|
|
736
|
+
### Visual Design
|
|
737
|
+
- [ ] Active state uses at least two visual indicators (icon + color, underline + weight)
|
|
738
|
+
- [ ] Navigation labels are concise, concrete nouns or verbs
|
|
739
|
+
- [ ] Icons are paired with text labels in primary navigation
|
|
740
|
+
- [ ] Touch targets meet minimum size (44x44pt iOS, 48x48dp Android, 24x24px WCAG)
|
|
741
|
+
- [ ] Sufficient contrast between active and inactive states (4.5:1 for text)
|
|
742
|
+
|
|
743
|
+
### Interaction
|
|
744
|
+
- [ ] Tab switching animations complete in 200-300ms
|
|
745
|
+
- [ ] Only `transform` and `opacity` are animated (GPU-composited)
|
|
746
|
+
- [ ] Each tab preserves its own navigation stack and scroll position
|
|
747
|
+
- [ ] Form state is preserved or saved when navigating away
|
|
748
|
+
- [ ] Navigation hides on scroll-down and reappears on any scroll-up
|
|
749
|
+
- [ ] Haptic feedback on tab selection (mobile, where appropriate)
|
|
750
|
+
|
|
751
|
+
### Accessibility
|
|
752
|
+
- [ ] Skip navigation link is the first focusable element
|
|
753
|
+
- [ ] All navigation regions use `<nav>` with descriptive `aria-label`
|
|
754
|
+
- [ ] Active page marked with `aria-current="page"`
|
|
755
|
+
- [ ] Tab list uses `role="tablist"` / `role="tab"` / `aria-selected`
|
|
756
|
+
- [ ] Keyboard navigation works: Tab, Arrow keys, Enter, Escape
|
|
757
|
+
- [ ] Focus moves to main content on route change (SPA)
|
|
758
|
+
- [ ] Page title updates on route change
|
|
759
|
+
- [ ] `prefers-reduced-motion` is respected
|
|
760
|
+
|
|
761
|
+
### Cross-Platform
|
|
762
|
+
- [ ] Mobile uses bottom tab bar (not hamburger for primary nav)
|
|
763
|
+
- [ ] Tablet uses navigation rail or sidebar
|
|
764
|
+
- [ ] Desktop uses sidebar or top nav (always visible)
|
|
765
|
+
- [ ] Responsive breakpoints adapt the navigation pattern, not just hide it
|
|
766
|
+
- [ ] Platform-specific back behavior is respected (swipe on iOS, system back on Android)
|
|
767
|
+
|
|
768
|
+
### Content
|
|
769
|
+
- [ ] Breadcrumbs show the current page (non-linked)
|
|
770
|
+
- [ ] Search is available as supplemental navigation
|
|
771
|
+
- [ ] Empty states include navigation guidance (not blank pages)
|
|
772
|
+
- [ ] Error pages provide navigation to a known good state
|
|
773
|
+
|
|
774
|
+
---
|
|
775
|
+
|
|
776
|
+
## References
|
|
777
|
+
|
|
778
|
+
### Platform Guidelines
|
|
779
|
+
- Apple HIG: Navigation and Search -- developer.apple.com/design/human-interface-guidelines/navigation-and-search
|
|
780
|
+
- Apple HIG: Tab Bars -- developer.apple.com/design/human-interface-guidelines/tab-bars
|
|
781
|
+
- Material Design 3: Navigation Bar -- m3.material.io/components/navigation-bar/guidelines
|
|
782
|
+
- Material Design 3: Navigation Rail -- m3.material.io/components/navigation-rail/guidelines
|
|
783
|
+
- Android Developers: Principles of Navigation -- developer.android.com/guide/navigation/principles
|
|
784
|
+
|
|
785
|
+
### Research
|
|
786
|
+
- NNGroup: Hamburger Menus and Hidden Navigation Hurt UX Metrics -- nngroup.com/articles/hamburger-menus/
|
|
787
|
+
- NNGroup: Beyond the Hamburger -- nngroup.com/articles/find-navigation-mobile-even-hamburger/
|
|
788
|
+
- NNGroup: Basic Patterns for Mobile Navigation -- nngroup.com/articles/mobile-navigation-patterns/
|
|
789
|
+
- NNGroup: Menu Design Checklist (17 UX Guidelines) -- nngroup.com/articles/menu-design/
|
|
790
|
+
- NNGroup: Breadcrumbs (11 Design Guidelines) -- nngroup.com/articles/breadcrumbs/
|
|
791
|
+
|
|
792
|
+
### Accessibility Standards
|
|
793
|
+
- W3C WAI-ARIA: Navigation Role -- developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/navigation_role
|
|
794
|
+
- WebAIM: Skip Navigation Links -- webaim.org/techniques/skipnav/
|
|
795
|
+
- WCAG 2.2: SC 2.4.1 Bypass Blocks, SC 2.5.8 Target Size (Minimum)
|
|
796
|
+
|
|
797
|
+
### Industry Analysis
|
|
798
|
+
- Smashing Magazine: The Golden Rules of Bottom Navigation Design -- smashingmagazine.com/2016/11/the-golden-rules-of-mobile-navigation-design/
|
|
799
|
+
- Smashing Magazine: Decision Trees for UI Components -- smashingmagazine.com/2024/05/decision-trees-ui-components/
|
|
800
|
+
- Linear Blog: How We Redesigned the Linear UI -- linear.app/now/how-we-redesigned-the-linear-ui
|