@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,768 @@
|
|
|
1
|
+
# Settings and Preferences -- Design Pattern Module
|
|
2
|
+
|
|
3
|
+
> **Module Type:** Pattern
|
|
4
|
+
> **Domain:** UI/UX Design Systems
|
|
5
|
+
> **Last Updated:** 2026-03-07
|
|
6
|
+
> **Applies To:** iOS, Android, Web, Desktop, Cross-Platform
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Quick Reference Checklist
|
|
11
|
+
|
|
12
|
+
Before shipping any settings interface, verify:
|
|
13
|
+
|
|
14
|
+
- [ ] Settings are grouped into logical categories with clear headings
|
|
15
|
+
- [ ] A search bar is present if total settings exceed ~15 items
|
|
16
|
+
- [ ] Toggles apply instantly; form-based settings use explicit save
|
|
17
|
+
- [ ] Destructive settings (delete account, reset) require multi-step confirmation
|
|
18
|
+
- [ ] Every control has a visible label and, where needed, a description
|
|
19
|
+
- [ ] Current values are visible at a glance without opening sub-screens
|
|
20
|
+
- [ ] A "Restore Defaults" or reset option is accessible
|
|
21
|
+
- [ ] System-wide preferences (accessibility, language) are respected, not duplicated
|
|
22
|
+
- [ ] Screen reader users can navigate settings and hear toggle states
|
|
23
|
+
- [ ] Settings that require app restart display a clear warning before applying
|
|
24
|
+
- [ ] Dangerous options are visually distinct and physically separated from benign ones
|
|
25
|
+
- [ ] Mobile touch targets are at least 44x44pt (iOS) / 48x48dp (Android)
|
|
26
|
+
- [ ] Changes provide immediate visual feedback (animation, toast, preview)
|
|
27
|
+
- [ ] Settings are reachable from a consistent, predictable entry point
|
|
28
|
+
- [ ] Import/export functionality exists for power users on complex apps
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. Pattern Anatomy
|
|
33
|
+
|
|
34
|
+
### 1.1 Settings Types
|
|
35
|
+
|
|
36
|
+
Settings interfaces serve different purposes depending on scope and audience. A well-designed app distinguishes clearly between these categories:
|
|
37
|
+
|
|
38
|
+
**App Settings (Behavioral)**
|
|
39
|
+
Control how the application behaves. Examples include default file format, auto-save interval, startup behavior, editor preferences, keyboard shortcuts, and performance options. These are typically scoped to the local device or workspace.
|
|
40
|
+
|
|
41
|
+
**Account Settings (Identity)**
|
|
42
|
+
Manage the user's identity and authentication: display name, email address, profile photo, password, two-factor authentication, connected accounts, and session management. These persist across devices because they are tied to the user's account, not the local installation.
|
|
43
|
+
|
|
44
|
+
**Notification Preferences**
|
|
45
|
+
Granular controls over what notifications the user receives and through which channels (push, email, in-app, SMS, desktop). Best-in-class implementations allow per-channel and per-event-type control rather than a single global toggle.
|
|
46
|
+
|
|
47
|
+
**Privacy Settings**
|
|
48
|
+
Data sharing, analytics opt-out, profile visibility, activity status, read receipts, and ad personalization. Post-GDPR and post-CCPA, these settings carry legal weight and must be discoverable.
|
|
49
|
+
|
|
50
|
+
**Accessibility Settings**
|
|
51
|
+
Font size overrides, high-contrast mode, reduce-motion preference, screen reader optimizations, caption preferences, and color-blind accommodations. Apple HIG and WCAG both stress that apps should primarily respect system-level accessibility settings rather than replicating them in-app, but app-specific enhancements are welcome.
|
|
52
|
+
|
|
53
|
+
**Appearance (Theme, Language, Display)**
|
|
54
|
+
Light/dark/system theme, accent color, font family, density (compact/comfortable), language, region, date format, time zone, and first day of week. These are among the most frequently accessed settings.
|
|
55
|
+
|
|
56
|
+
### 1.2 Organization Strategies
|
|
57
|
+
|
|
58
|
+
**Grouped Lists (iOS Model)**
|
|
59
|
+
The canonical iOS pattern uses grouped `UITableView` sections with inset styling. Each group has a header label and optional footer description. This works well for up to ~40 settings across 5-8 groups. Apple HIG recommends this as the default for in-app settings.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
General
|
|
63
|
+
[Language] English (US)
|
|
64
|
+
[Date Format] MM/DD/YYYY
|
|
65
|
+
[Start Week On] Monday
|
|
66
|
+
|
|
67
|
+
Appearance
|
|
68
|
+
[Theme] System >
|
|
69
|
+
[Accent Color] Blue >
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Tabbed Settings (Web/Desktop Model)**
|
|
73
|
+
A vertical sidebar or horizontal tab bar divides settings into major sections. Each tab loads a dedicated panel. Used by VS Code, Slack, Discord, Notion, and most SaaS products. Scales well to hundreds of settings.
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
+------------------+-----------------------------------+
|
|
77
|
+
| General | Theme: [System v] |
|
|
78
|
+
| Account | Font Size: [14px ----o--------] |
|
|
79
|
+
| Notifications | Auto Save: [x] Enabled |
|
|
80
|
+
| Privacy | |
|
|
81
|
+
| Appearance | [Restore Defaults] |
|
|
82
|
+
+------------------+-----------------------------------+
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Search in Settings**
|
|
86
|
+
For apps with more than approximately 15 settings, search is essential. VS Code's settings search is the gold standard: a persistent search bar at the top that live-filters the visible settings and highlights matching terms. Including search will make settings accessibility roughly 5x better than grouping by categories alone (Toptal, 2022). Search should match against setting names, descriptions, and related keywords.
|
|
87
|
+
|
|
88
|
+
**Flat Scrollable List**
|
|
89
|
+
A single scrollable page with section anchors. Works for simpler apps with fewer than 20 settings. Mobile-friendly because it avoids navigation depth. Notion uses this on mobile to good effect.
|
|
90
|
+
|
|
91
|
+
### 1.3 Inline Editing vs. Dedicated Screens
|
|
92
|
+
|
|
93
|
+
**Inline Editing (Preferred for Simple Values)**
|
|
94
|
+
Toggles, dropdowns, and sliders change values in place without navigating away. Users see the effect immediately. This is the correct choice for boolean settings, single-select options with fewer than 5 choices, and numeric ranges.
|
|
95
|
+
|
|
96
|
+
**Dedicated Screens (Required for Complex Values)**
|
|
97
|
+
Settings that involve multiple sub-options, rich editors, or lengthy lists should open a dedicated sub-screen or modal. Examples: notification preferences per channel, connected accounts management, keyboard shortcut editor, custom theme builder.
|
|
98
|
+
|
|
99
|
+
**Decision Rule:**
|
|
100
|
+
If a setting can be meaningfully represented and changed with a single control (toggle, dropdown, slider), keep it inline. If it requires explanation, multiple fields, or a preview, give it a dedicated screen.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 2. Best-in-Class Examples
|
|
105
|
+
|
|
106
|
+
### 2.1 iOS Settings App
|
|
107
|
+
|
|
108
|
+
**What it does well:**
|
|
109
|
+
- Consistent grouped-list pattern with inset rounded rectangles
|
|
110
|
+
- Current values displayed as secondary text on the right side of each row
|
|
111
|
+
- Search bar at the top of the main settings screen
|
|
112
|
+
- Deep linking: apps can link directly to specific settings screens via URL schemes
|
|
113
|
+
- Clear hierarchy: system settings at the top, per-app settings below
|
|
114
|
+
- Accessibility settings are first-class citizens with their own top-level section
|
|
115
|
+
|
|
116
|
+
**Key pattern:** The disclosure indicator (chevron >) signals navigation to a sub-screen, while toggles indicate immediate in-place changes. Users learn this visual grammar once and apply it everywhere.
|
|
117
|
+
|
|
118
|
+
**Reference:** Apple Human Interface Guidelines -- Settings Pattern (developer.apple.com/design/human-interface-guidelines/patterns/settings/)
|
|
119
|
+
|
|
120
|
+
### 2.2 Slack Preferences
|
|
121
|
+
|
|
122
|
+
**What it does well:**
|
|
123
|
+
- Tabbed sidebar navigation: Notifications, Sidebar, Themes, Messages & Media, Language & Region, Accessibility, Mark as Read, Audio & Video, Connected Accounts, Privacy & Visibility, Advanced
|
|
124
|
+
- Each tab is a focused vertical scroll with grouped settings
|
|
125
|
+
- Notification preferences are granular: per-channel overrides, schedule (Do Not Disturb hours), and per-keyword mentions
|
|
126
|
+
- Theme picker shows a live preview strip of the selected theme
|
|
127
|
+
- Workspace-level vs. personal-level settings are clearly separated
|
|
128
|
+
- Expandable sections within tabs reduce visual clutter
|
|
129
|
+
|
|
130
|
+
**Key pattern:** The "Notification Schedule" feature demonstrates contextual settings that adapt based on time -- a pattern worth studying for any app with notification controls.
|
|
131
|
+
|
|
132
|
+
### 2.3 VS Code Settings
|
|
133
|
+
|
|
134
|
+
**What it does well:**
|
|
135
|
+
- Dual interface: GUI Settings Editor and raw JSON (`settings.json`)
|
|
136
|
+
- Powerful search with instant filtering, scope tags (`@modified`, `@ext:`, `@id:`), and result counts
|
|
137
|
+
- Three-tier scope: User > Workspace > Folder (with clear indicators of which level overrides which)
|
|
138
|
+
- Modified indicator (blue bar) shows settings that differ from defaults
|
|
139
|
+
- "Reset Setting" action on each individual setting
|
|
140
|
+
- Extension settings are automatically integrated into the same search and UI
|
|
141
|
+
- Breadcrumb navigation showing the current category path
|
|
142
|
+
|
|
143
|
+
**Key pattern:** The "modified settings" filter (`@modified`) lets users see only what they have changed -- an invaluable feature for debugging and auditing configuration.
|
|
144
|
+
|
|
145
|
+
**Reference:** VS Code Documentation -- User and Workspace Settings (code.visualstudio.com/docs/getstarted/settings)
|
|
146
|
+
|
|
147
|
+
### 2.4 Linear
|
|
148
|
+
|
|
149
|
+
**What it does well:**
|
|
150
|
+
- Clean two-column layout: sidebar categories, main content area
|
|
151
|
+
- Workspace settings vs. personal settings are distinct top-level sections
|
|
152
|
+
- Settings philosophy: "Settings are not a design failure" -- Linear intentionally provides preferences where designers should not impose opinions
|
|
153
|
+
- Import/export of workspace settings for team onboarding
|
|
154
|
+
- Issue-label colors, workflow states, and team-level defaults are all configurable
|
|
155
|
+
- Minimal descriptions; settings are named clearly enough to be self-explanatory
|
|
156
|
+
|
|
157
|
+
**Key pattern:** Linear distinguishes between "product settings that need to be right by default" and "preferences that designers deliberately shouldn't have a strong opinion on." This philosophy results in a curated, intentional settings surface.
|
|
158
|
+
|
|
159
|
+
**Reference:** Linear Blog -- "Settings are not a design failure" (linear.app/now/settings-are-not-a-design-failure)
|
|
160
|
+
|
|
161
|
+
### 2.5 Discord
|
|
162
|
+
|
|
163
|
+
**What it does well:**
|
|
164
|
+
- Full-screen settings overlay with sidebar navigation (15+ categories)
|
|
165
|
+
- "User Settings" vs. "Server Settings" scoping
|
|
166
|
+
- Per-server notification overrides with @everyone, @here, and role-based controls
|
|
167
|
+
- Keybinds editor with conflict detection
|
|
168
|
+
- Appearance settings include a live chat preview that updates in real time
|
|
169
|
+
- "Activity Privacy" and "Friend Requests" are easy to find under Privacy & Safety
|
|
170
|
+
- "Log Out" and "Delete Account" are visually separated at the bottom with red styling
|
|
171
|
+
|
|
172
|
+
**Key pattern:** Discord's real-time preview in Appearance settings (showing how the chat looks with a new theme, font size, or density) is exemplary for reducing uncertainty about what a setting will do.
|
|
173
|
+
|
|
174
|
+
### 2.6 Notion
|
|
175
|
+
|
|
176
|
+
**What it does well:**
|
|
177
|
+
- Modal-based settings dialog accessed from the sidebar
|
|
178
|
+
- Tabbed navigation: My Account, My Settings, My Notifications, My Connections, Language & Region, plus workspace sections
|
|
179
|
+
- Appearance toggle (Light/Dark/System) with immediate application
|
|
180
|
+
- Privacy section with "Show my view history" and "Profile discoverability" toggles
|
|
181
|
+
- Per-workspace settings: domain, allowed email domains, member management
|
|
182
|
+
- Mobile-optimized settings that collapse into a single scrollable screen
|
|
183
|
+
|
|
184
|
+
**Key pattern:** Notion's distinction between "My" (personal) settings and workspace settings creates a clear mental model for users who belong to multiple workspaces.
|
|
185
|
+
|
|
186
|
+
### 2.7 Figma
|
|
187
|
+
|
|
188
|
+
**What it does well:**
|
|
189
|
+
- Minimal settings surface -- most preferences are contextual (right-click, toolbar)
|
|
190
|
+
- Account settings in a web dashboard, not in the desktop app
|
|
191
|
+
- Nudge amount (small/large) configured inline in the editor via a quick preference
|
|
192
|
+
- Plugin and font settings are separate concerns with dedicated management screens
|
|
193
|
+
- Theme follows system preference by default with manual override
|
|
194
|
+
|
|
195
|
+
**Key pattern:** Figma demonstrates that not every app needs a large settings screen. By making preferences contextual and keeping the dedicated settings surface small, Figma avoids the "settings sprawl" problem.
|
|
196
|
+
|
|
197
|
+
### 2.8 GitHub
|
|
198
|
+
|
|
199
|
+
**What it does well:**
|
|
200
|
+
- Vertical sidebar navigation with 20+ categories
|
|
201
|
+
- Clear separation: Profile, Account, Appearance, Accessibility, Notifications, Billing, Emails, Password, Sessions, SSH Keys, GPG Keys, Developer Settings
|
|
202
|
+
- Notification routing is granular: per-repository, per-event, per-channel
|
|
203
|
+
- Danger Zone pattern: destructive actions (delete repository, transfer ownership) grouped in a red-bordered section at the bottom of each relevant page
|
|
204
|
+
- Saved replies, scheduled reminders, and code review settings demonstrate advanced per-workflow customization
|
|
205
|
+
|
|
206
|
+
**Key pattern:** GitHub's "Danger Zone" visual treatment (red border, red button, explicit "Type the repository name to confirm" friction) is the canonical example of destructive-action confirmation in settings.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 3. User Flow Mapping
|
|
211
|
+
|
|
212
|
+
### 3.1 Primary Flow: Changing a Setting
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
[Entry Point]
|
|
216
|
+
|
|
|
217
|
+
v
|
|
218
|
+
[Settings Home / Search] --- search query --> [Filtered Results]
|
|
219
|
+
| |
|
|
220
|
+
v v
|
|
221
|
+
[Navigate to Category/Section] [Jump to Setting]
|
|
222
|
+
| |
|
|
223
|
+
v v
|
|
224
|
+
[Locate Setting in List] [Locate Setting]
|
|
225
|
+
| |
|
|
226
|
+
+----------------+----------------------------+
|
|
227
|
+
|
|
|
228
|
+
v
|
|
229
|
+
[Change Value]
|
|
230
|
+
|
|
|
231
|
+
+----------+----------+
|
|
232
|
+
| |
|
|
233
|
+
[Instant Apply] [Explicit Save]
|
|
234
|
+
| |
|
|
235
|
+
v v
|
|
236
|
+
[Visual Feedback] [Save Button Active]
|
|
237
|
+
(toast, animation, |
|
|
238
|
+
live preview) v
|
|
239
|
+
| [Click Save]
|
|
240
|
+
| |
|
|
241
|
+
+----------+----------+
|
|
242
|
+
|
|
|
243
|
+
v
|
|
244
|
+
[Effect Visible]
|
|
245
|
+
(UI updates, behavior changes)
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### 3.2 Dangerous Settings Flow
|
|
249
|
+
|
|
250
|
+
For irreversible actions (delete account, reset to defaults, revoke all sessions), the flow must introduce deliberate friction proportional to the action's severity:
|
|
251
|
+
|
|
252
|
+
**Low-Severity Destructive (Reversible)**
|
|
253
|
+
Example: Clear notification history, reset a single preference.
|
|
254
|
+
Flow: Action button -> Confirmation dialog with descriptive button text ("Clear History") -> Execute with undo toast (5-10 second window).
|
|
255
|
+
|
|
256
|
+
**Medium-Severity Destructive (Partially Reversible)**
|
|
257
|
+
Example: Remove a connected account, leave a workspace.
|
|
258
|
+
Flow: Action button (red/warning color) -> Confirmation dialog explaining consequences -> Execute with email notification.
|
|
259
|
+
|
|
260
|
+
**High-Severity Destructive (Irreversible)**
|
|
261
|
+
Example: Delete account, delete all data, transfer ownership.
|
|
262
|
+
Flow: Action button (red, isolated in "Danger Zone") -> Confirmation dialog -> Type confirmation phrase (account name, "DELETE", etc.) -> Cooldown period (GitHub uses 90 days for account deletion) -> Execute with email confirmation.
|
|
263
|
+
|
|
264
|
+
**Reference:** NNgroup recommends confirmation dialogs only for infrequent, consequential actions. Overuse of confirmation dialogs trains users to click "OK" without reading (nngroup.com/articles/confirmation-dialog/).
|
|
265
|
+
|
|
266
|
+
### 3.3 Import/Export Settings Flow
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
[Settings Screen]
|
|
270
|
+
|
|
|
271
|
+
+----> [Export Settings]
|
|
272
|
+
| |
|
|
273
|
+
| v
|
|
274
|
+
| [Select Scope] (all, category, specific settings)
|
|
275
|
+
| |
|
|
276
|
+
| v
|
|
277
|
+
| [Choose Format] (JSON, YAML, proprietary)
|
|
278
|
+
| |
|
|
279
|
+
| v
|
|
280
|
+
| [Download/Copy File]
|
|
281
|
+
|
|
|
282
|
+
+----> [Import Settings]
|
|
283
|
+
|
|
|
284
|
+
v
|
|
285
|
+
[Upload/Paste File]
|
|
286
|
+
|
|
|
287
|
+
v
|
|
288
|
+
[Validate & Preview Changes]
|
|
289
|
+
|
|
|
290
|
+
+---> [Conflicts Detected?]
|
|
291
|
+
| |
|
|
292
|
+
| [Show Diff: Current vs. Imported]
|
|
293
|
+
| |
|
|
294
|
+
| [User Resolves Conflicts]
|
|
295
|
+
| |
|
|
296
|
+
v v
|
|
297
|
+
[Apply Settings]
|
|
298
|
+
|
|
|
299
|
+
v
|
|
300
|
+
[Restart Required?] --yes--> [Show Warning + Restart Button]
|
|
301
|
+
|
|
|
302
|
+
no
|
|
303
|
+
|
|
|
304
|
+
v
|
|
305
|
+
[Settings Applied -- Show Summary]
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
VS Code handles this well: its `settings.json` is inherently exportable, and workspace `.vscode/settings.json` files serve as importable presets that can be version-controlled.
|
|
309
|
+
|
|
310
|
+
### 3.4 Edge Cases
|
|
311
|
+
|
|
312
|
+
**Conflicting Settings**
|
|
313
|
+
When two settings contradict each other (e.g., "Send email notifications" is ON but "Email address" is empty), the interface should:
|
|
314
|
+
1. Visually flag the conflict with a warning icon and inline message
|
|
315
|
+
2. Prevent saving until the conflict is resolved, OR
|
|
316
|
+
3. Apply the safe default and notify the user
|
|
317
|
+
|
|
318
|
+
**Settings Requiring Restart**
|
|
319
|
+
Some changes (language, certain performance flags, plugin states) cannot take effect until the app restarts. The correct pattern is:
|
|
320
|
+
1. Apply the setting to the stored configuration immediately
|
|
321
|
+
2. Display a persistent banner: "Restart required for [setting name] to take effect"
|
|
322
|
+
3. Provide a "Restart Now" action button in the banner
|
|
323
|
+
4. Never silently restart without user consent
|
|
324
|
+
|
|
325
|
+
**Offline Settings Changes**
|
|
326
|
+
If settings sync across devices, changes made offline should be queued and synced on reconnection. Conflict resolution should favor the most recent change (last-write-wins) with optional manual resolution for critical settings.
|
|
327
|
+
|
|
328
|
+
**Permission-Gated Settings**
|
|
329
|
+
Some settings require elevated permissions (admin-only workspace settings, parental controls). These should be visible but disabled for unauthorized users, with a clear explanation of who can change them and how to request access.
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## 4. Micro-Interactions
|
|
334
|
+
|
|
335
|
+
### 4.1 Toggle Animation
|
|
336
|
+
|
|
337
|
+
The toggle switch is the most common settings control. Its micro-interaction communicates state change:
|
|
338
|
+
|
|
339
|
+
**Anatomy of a Toggle Micro-Interaction:**
|
|
340
|
+
1. **Resting state:** Thumb positioned left (off) or right (on), track color reflects state
|
|
341
|
+
2. **Press/touch:** Thumb slightly expands (iOS) or shows ripple (Material)
|
|
342
|
+
3. **Slide:** Thumb moves along track with spring/ease-out curve (150-250ms)
|
|
343
|
+
4. **Color transition:** Track color cross-fades between off-state (gray) and on-state (accent color)
|
|
344
|
+
5. **Settle:** Thumb reaches final position, optional subtle bounce
|
|
345
|
+
|
|
346
|
+
**Platform-specific timing:**
|
|
347
|
+
- iOS: 200ms spring animation with slight overshoot
|
|
348
|
+
- Material Design 3: 200ms with standard easing, ripple extends from touch point
|
|
349
|
+
- Web (CSS): `transition: transform 200ms ease-out, background-color 150ms ease`
|
|
350
|
+
|
|
351
|
+
**Critical requirement:** The toggle must convey state through more than color alone. Use position (left/right), optional "On"/"Off" labels, and ARIA attributes for accessibility.
|
|
352
|
+
|
|
353
|
+
### 4.2 Slider Thumb
|
|
354
|
+
|
|
355
|
+
For settings like font size, volume, or opacity:
|
|
356
|
+
|
|
357
|
+
1. **Drag start:** Thumb scales up slightly (1.2x) to confirm grab
|
|
358
|
+
2. **Dragging:** Value label appears above thumb showing current value
|
|
359
|
+
3. **Snap points:** Optional haptic feedback at meaningful values (e.g., 100%, default)
|
|
360
|
+
4. **Release:** Thumb scales back to normal, value label fades after 1 second
|
|
361
|
+
5. **Live preview:** The affected element (text size, volume indicator) updates in real time during drag
|
|
362
|
+
|
|
363
|
+
### 4.3 Color Picker
|
|
364
|
+
|
|
365
|
+
For theme or accent color selection:
|
|
366
|
+
|
|
367
|
+
1. **Swatch grid:** Pre-selected brand colors in a grid, selected swatch gets a checkmark overlay and ring
|
|
368
|
+
2. **Custom color:** Expanding the picker reveals HSL/RGB sliders or a color wheel
|
|
369
|
+
3. **Live preview:** UI elements update to the selected color in real time
|
|
370
|
+
4. **Confirmation:** Optional "Apply" button for complex custom colors, or instant-apply for preset swatches
|
|
371
|
+
|
|
372
|
+
### 4.4 Instant-Apply vs. Save Button
|
|
373
|
+
|
|
374
|
+
**Instant-Apply (Preferred for Individual Settings)**
|
|
375
|
+
Each control change takes effect immediately. Feedback is provided via:
|
|
376
|
+
- Toggle animation completing
|
|
377
|
+
- Toast notification: "Setting updated"
|
|
378
|
+
- Live UI change (theme switches immediately)
|
|
379
|
+
- Subtle checkmark animation next to the changed setting
|
|
380
|
+
|
|
381
|
+
**Explicit Save (Required for Batch Changes)**
|
|
382
|
+
When multiple related settings must be changed atomically (e.g., SMTP configuration: host + port + credentials), use a form with a Save button:
|
|
383
|
+
- Save button is disabled until changes are detected
|
|
384
|
+
- "Unsaved changes" indicator appears in the tab/section header
|
|
385
|
+
- Navigation away triggers "You have unsaved changes" confirmation
|
|
386
|
+
- After save: button shows brief "Saved" state with checkmark, then returns to disabled
|
|
387
|
+
|
|
388
|
+
### 4.5 Undo for Destructive Changes
|
|
389
|
+
|
|
390
|
+
After a destructive setting change:
|
|
391
|
+
1. Show a toast/snackbar at the bottom: "Setting changed. [Undo]"
|
|
392
|
+
2. Undo link is available for 5-10 seconds
|
|
393
|
+
3. If undo is clicked, revert the setting with a brief reverse animation
|
|
394
|
+
4. If the toast expires, the change is finalized
|
|
395
|
+
|
|
396
|
+
Gmail's "Undo Send" is the canonical example of this pattern applied to a time-sensitive action.
|
|
397
|
+
|
|
398
|
+
### 4.6 Preview of Setting Effect
|
|
399
|
+
|
|
400
|
+
Before committing to a change, show users what will happen:
|
|
401
|
+
- **Theme preview:** Discord shows a live chat preview with the selected theme
|
|
402
|
+
- **Font size preview:** A sample text block updates in real time as the slider moves
|
|
403
|
+
- **Notification preview:** A mock notification appears showing the selected sound and visual style
|
|
404
|
+
- **Layout preview:** Compact vs. comfortable density shows a before/after thumbnail
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## 5. Anti-Patterns
|
|
409
|
+
|
|
410
|
+
### 5.1 Settings Sprawl
|
|
411
|
+
|
|
412
|
+
**Problem:** Exposing every possible configuration without curation. The settings screen becomes a dumping ground for engineering flags.
|
|
413
|
+
**Fix:** Audit settings regularly. If fewer than 5% of users change a setting, consider removing it or moving it to an "Advanced" section. Linear's philosophy of deliberately choosing which preferences to expose is the antidote.
|
|
414
|
+
|
|
415
|
+
### 5.2 No Search in Large Settings
|
|
416
|
+
|
|
417
|
+
**Problem:** Apps with 50+ settings that rely solely on category navigation. Users cannot find what they need.
|
|
418
|
+
**Fix:** Add a persistent search bar. VS Code demonstrates that settings search with filtering, scope tags, and match highlighting transforms the settings experience.
|
|
419
|
+
|
|
420
|
+
### 5.3 Restart Without Warning
|
|
421
|
+
|
|
422
|
+
**Problem:** Applying a setting that requires an application restart without informing the user beforehand. The app restarts unexpectedly, causing data loss.
|
|
423
|
+
**Fix:** Display a clear warning before the setting is applied: "This change requires a restart. Any unsaved work will be lost. Restart now?" Provide "Restart Now" and "Restart Later" options.
|
|
424
|
+
|
|
425
|
+
### 5.4 No Defaults/Reset Option
|
|
426
|
+
|
|
427
|
+
**Problem:** Users change a setting, forget the original value, and have no way to return to the default.
|
|
428
|
+
**Fix:** Provide a "Reset to Default" action on individual settings (VS Code's approach) and a global "Restore All Defaults" option. Show the default value as a hint or placeholder.
|
|
429
|
+
|
|
430
|
+
### 5.5 Burying Important Settings Too Deep
|
|
431
|
+
|
|
432
|
+
**Problem:** Critical settings (privacy controls, notification preferences) are nested 3+ levels deep. Users cannot find them and assume the app does not offer them.
|
|
433
|
+
**Fix:** Keep critical and frequently-changed settings within 1-2 taps of the settings home screen. Use search and direct deep links from relevant UI contexts (e.g., a "Manage Notifications" link in the notification panel).
|
|
434
|
+
|
|
435
|
+
### 5.6 Jargon Labels
|
|
436
|
+
|
|
437
|
+
**Problem:** Settings labeled with engineering terminology: "Enable WebSocket fallback," "TTL override," "Prefetch buffer size."
|
|
438
|
+
**Fix:** Use plain language that describes the effect: "Use alternative connection method," "Cache expiration time," "Pre-load content for faster browsing." Add a brief description below the label if the setting name alone is ambiguous.
|
|
439
|
+
|
|
440
|
+
### 5.7 Settings Without Descriptions
|
|
441
|
+
|
|
442
|
+
**Problem:** A toggle labeled "Smart Inboxing" with no explanation of what it does.
|
|
443
|
+
**Fix:** Every non-obvious setting should have a 1-2 line description below the label explaining what it controls and what the user should expect when changing it.
|
|
444
|
+
|
|
445
|
+
### 5.8 Ambiguous Toggle State
|
|
446
|
+
|
|
447
|
+
**Problem:** A toggle labeled "Disable notifications" -- when the toggle is ON, are notifications disabled (confusing double-negative) or enabled?
|
|
448
|
+
**Fix:** Always frame toggles positively: "Enable notifications" ON = notifications are on. Avoid negative framing. If the label must be negative, add explicit "On"/"Off" text labels adjacent to the toggle.
|
|
449
|
+
|
|
450
|
+
### 5.9 Auto-Saving Without Feedback
|
|
451
|
+
|
|
452
|
+
**Problem:** Settings auto-save, but the user receives no confirmation. They are left wondering whether the change was registered.
|
|
453
|
+
**Fix:** Provide brief visual feedback: a checkmark animation, a "Saved" micro-toast, or a subtle flash on the changed row. The feedback should be noticeable but not disruptive.
|
|
454
|
+
|
|
455
|
+
### 5.10 Dangerous Actions Near Benign Ones
|
|
456
|
+
|
|
457
|
+
**Problem:** "Delete Account" button directly below "Change Display Name" with identical styling.
|
|
458
|
+
**Fix:** Isolate destructive actions in a dedicated section (GitHub's "Danger Zone"), use red/warning styling, and add physical space or a divider between dangerous and benign options. NNgroup specifically warns against placing consequential options close to benign options (nngroup.com/articles/proximity-consequential-options/).
|
|
459
|
+
|
|
460
|
+
### 5.11 Platform-Inconsistent Settings Location
|
|
461
|
+
|
|
462
|
+
**Problem:** Settings are in the hamburger menu on mobile, under "File > Preferences" on desktop, and at the bottom of the sidebar on web. Users cannot build muscle memory.
|
|
463
|
+
**Fix:** Use platform-conventional entry points: gear icon in the bottom-left or sidebar on web/desktop, profile avatar or dedicated "Settings" tab on mobile. Be consistent with platform expectations.
|
|
464
|
+
|
|
465
|
+
### 5.12 All-or-Nothing Notification Controls
|
|
466
|
+
|
|
467
|
+
**Problem:** A single toggle for all notifications. Users who want to disable marketing emails but keep security alerts must choose between all or nothing.
|
|
468
|
+
**Fix:** Provide granular per-category and per-channel controls. At minimum, distinguish between critical (security, billing) and non-critical (marketing, social, tips) notifications.
|
|
469
|
+
|
|
470
|
+
### 5.13 Settings That Silently Affect Other Users
|
|
471
|
+
|
|
472
|
+
**Problem:** A workspace admin changes a setting that affects all team members without any indication that this is a shared setting.
|
|
473
|
+
**Fix:** Clearly label workspace-wide settings with scope indicators: "This affects all members of [workspace name]." Show an admin badge and optionally notify affected members.
|
|
474
|
+
|
|
475
|
+
### 5.14 No Confirmation for Irreversible Changes
|
|
476
|
+
|
|
477
|
+
**Problem:** Clicking "Reset to Factory Defaults" immediately wipes all customizations without confirmation.
|
|
478
|
+
**Fix:** For any irreversible action, require explicit confirmation with a dialog that names the specific consequences.
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## 6. Accessibility
|
|
483
|
+
|
|
484
|
+
### 6.1 Screen Reader Navigation
|
|
485
|
+
|
|
486
|
+
**Semantic Structure:**
|
|
487
|
+
- Use heading hierarchy (h2 for categories, h3 for subcategories) so screen reader users can jump between sections
|
|
488
|
+
- Group related settings in `<fieldset>` elements with `<legend>` labels on web
|
|
489
|
+
- On iOS, use `accessibilityLabel` and `accessibilityHint` on each setting row
|
|
490
|
+
- On Android, ensure each `Preference` item has a `contentDescription`
|
|
491
|
+
|
|
492
|
+
**Navigation Order:**
|
|
493
|
+
- Settings should follow a logical tab order matching the visual layout
|
|
494
|
+
- The search bar should be the first focusable element
|
|
495
|
+
- Category navigation (sidebar/tabs) should come before setting controls
|
|
496
|
+
- "Save" and "Cancel" buttons should be reachable without tabbing through all settings
|
|
497
|
+
|
|
498
|
+
### 6.2 Toggle State Announcements
|
|
499
|
+
|
|
500
|
+
Toggles must announce their current state and changes:
|
|
501
|
+
|
|
502
|
+
**Web (ARIA):**
|
|
503
|
+
```html
|
|
504
|
+
<button role="switch" aria-checked="true" aria-label="Dark mode">
|
|
505
|
+
<span class="toggle-track">
|
|
506
|
+
<span class="toggle-thumb"></span>
|
|
507
|
+
</span>
|
|
508
|
+
</button>
|
|
509
|
+
```
|
|
510
|
+
When toggled, screen readers should announce: "Dark mode, switch, on" or "Dark mode, switch, off."
|
|
511
|
+
|
|
512
|
+
**iOS:**
|
|
513
|
+
`UISwitch` automatically announces state. Custom toggles must set:
|
|
514
|
+
- `accessibilityTraits = .button`
|
|
515
|
+
- `accessibilityValue = isOn ? "On" : "Off"`
|
|
516
|
+
|
|
517
|
+
**Android:**
|
|
518
|
+
`SwitchMaterial` announces state changes automatically. Custom implementations must use `ViewCompat.setStateDescription()`.
|
|
519
|
+
|
|
520
|
+
**Critical requirement (WCAG 2.1 SC 1.3.1):** Toggle state must not rely solely on color. Position, label text, and ARIA/accessibility attributes must all convey state independently.
|
|
521
|
+
|
|
522
|
+
### 6.3 Form Control Labels
|
|
523
|
+
|
|
524
|
+
Every settings control must have a programmatically associated label:
|
|
525
|
+
|
|
526
|
+
- **Web:** Use `<label for="setting-id">` or `aria-labelledby`
|
|
527
|
+
- **Descriptions:** Use `aria-describedby` to associate help text with the control
|
|
528
|
+
- **Groups:** Use `<fieldset>` + `<legend>` for related settings (e.g., a group of notification channel checkboxes)
|
|
529
|
+
- **Error states:** Use `aria-invalid="true"` and `aria-errormessage` for validation errors
|
|
530
|
+
|
|
531
|
+
### 6.4 Settings Search Accessibility
|
|
532
|
+
|
|
533
|
+
- Search input must have a visible label or `aria-label="Search settings"`
|
|
534
|
+
- Search results should be announced via `aria-live="polite"` region: "5 settings found"
|
|
535
|
+
- Filtering should not move focus unexpectedly; the user should remain in the search field
|
|
536
|
+
- Each filtered result should be keyboard-navigable with clear focus indicators
|
|
537
|
+
- "No results" state must be announced, not just visually displayed
|
|
538
|
+
|
|
539
|
+
### 6.5 Target Sizes and Spacing
|
|
540
|
+
|
|
541
|
+
Per WCAG 2.2 SC 2.5.8 (Target Size Minimum, Level AA):
|
|
542
|
+
- Interactive elements must be at least 24x24 CSS pixels
|
|
543
|
+
- Apple HIG recommends 44x44pt minimum touch targets
|
|
544
|
+
- Material Design 3 recommends 48x48dp touch targets
|
|
545
|
+
- Sufficient spacing between adjacent interactive elements to prevent accidental activation
|
|
546
|
+
|
|
547
|
+
### 6.6 Motion and Animation
|
|
548
|
+
|
|
549
|
+
- Respect `prefers-reduced-motion` media query on web
|
|
550
|
+
- On iOS, check `UIAccessibility.isReduceMotionEnabled`
|
|
551
|
+
- On Android, check `Settings.Global.ANIMATOR_DURATION_SCALE`
|
|
552
|
+
- When reduced motion is active, replace slide/bounce animations with instant state changes or simple cross-fades
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## 7. Cross-Platform Adaptation
|
|
557
|
+
|
|
558
|
+
### 7.1 iOS
|
|
559
|
+
|
|
560
|
+
**System Settings (Settings.bundle)**
|
|
561
|
+
iOS allows apps to expose settings in the system Settings app via a `Settings.bundle`. This is appropriate for:
|
|
562
|
+
- Rarely changed configuration (server URLs, debug flags)
|
|
563
|
+
- Settings that must be accessible even when the app is not running
|
|
564
|
+
- Enterprise/MDM-managed settings
|
|
565
|
+
|
|
566
|
+
Apple HIG guidance: "Add only the most rarely changed options to the system-provided settings apps" because "people must switch away from their current context to adjust those settings."
|
|
567
|
+
|
|
568
|
+
**In-App Settings (Preferred for User-Facing Preferences)**
|
|
569
|
+
- Use grouped `UITableView` / `List` (SwiftUI) with `.insetGrouped` style
|
|
570
|
+
- Section headers and footers provide category labels and descriptions
|
|
571
|
+
- Use `UISwitch` / `Toggle` for boolean settings
|
|
572
|
+
- Use disclosure indicators (chevrons) for sub-screens
|
|
573
|
+
- Use `UISegmentedControl` or `Picker` for small option sets
|
|
574
|
+
- Place settings entry point as a gear icon in the navigation bar or tab bar
|
|
575
|
+
|
|
576
|
+
**Platform Conventions:**
|
|
577
|
+
- Settings icon: SF Symbol `gearshape` or `gearshape.fill`
|
|
578
|
+
- Navigation: push-based navigation controller stack
|
|
579
|
+
- Immediate apply for toggles; no global "Save" button
|
|
580
|
+
- "Done" button in navigation bar to dismiss modal settings
|
|
581
|
+
|
|
582
|
+
### 7.2 Android
|
|
583
|
+
|
|
584
|
+
**PreferenceScreen (Jetpack Preference Library)**
|
|
585
|
+
Android provides a dedicated `PreferenceScreen` API that handles:
|
|
586
|
+
- Automatic persistence to `SharedPreferences`
|
|
587
|
+
- Standard layouts for `SwitchPreference`, `ListPreference`, `EditTextPreference`, `SeekBarPreference`
|
|
588
|
+
- Category grouping via `PreferenceCategory`
|
|
589
|
+
- Search integration with the system Settings search
|
|
590
|
+
|
|
591
|
+
**Material Design 3 Guidelines:**
|
|
592
|
+
- Use `MaterialSwitch` for boolean settings (replaces legacy `SwitchCompat`)
|
|
593
|
+
- Labels left-aligned; secondary text below the label for descriptions
|
|
594
|
+
- Radio buttons presented in a dialog for discrete option sets
|
|
595
|
+
- Use `ListDetailPaneScaffold` for large-screen (tablet/foldable) adaptation
|
|
596
|
+
- Settings overview as primary list; subscreens as detail panes
|
|
597
|
+
- Do not let single-pane settings stretch to full width on large screens; set a max-width
|
|
598
|
+
|
|
599
|
+
**Platform Conventions:**
|
|
600
|
+
- Entry point: gear icon in the toolbar overflow menu or navigation drawer
|
|
601
|
+
- Always label the screen "Settings" (not "Options" or "Preferences")
|
|
602
|
+
- Use `Toolbar` with up-navigation arrow for sub-screens
|
|
603
|
+
- Persist changes immediately for toggles; use dialogs for multi-value selections
|
|
604
|
+
|
|
605
|
+
**Reference:** Material Design Settings Pattern (m2.material.io/design/platform-guidance/android-settings.html), Android Developer Settings Guide (developer.android.com/design/ui/mobile/guides/patterns/settings)
|
|
606
|
+
|
|
607
|
+
### 7.3 Web
|
|
608
|
+
|
|
609
|
+
**Settings Page (Full-Page Route)**
|
|
610
|
+
For SaaS and web apps with extensive settings:
|
|
611
|
+
- Dedicated `/settings` route with sidebar navigation
|
|
612
|
+
- Two-column layout: navigation sidebar (left), settings content (right)
|
|
613
|
+
- Responsive: sidebar collapses to a dropdown or stacked navigation on mobile viewports
|
|
614
|
+
- URL routing for each settings section (e.g., `/settings/notifications`) enables deep linking and browser back/forward
|
|
615
|
+
|
|
616
|
+
**Settings Modal/Dialog**
|
|
617
|
+
For simpler apps or quick preferences:
|
|
618
|
+
- Triggered from a gear icon or user avatar menu
|
|
619
|
+
- Modal overlay with tabbed navigation inside
|
|
620
|
+
- Appropriate when settings are few enough to fit in a single dialog
|
|
621
|
+
- Close button and Escape key to dismiss
|
|
622
|
+
- Focus trap within the modal for accessibility
|
|
623
|
+
|
|
624
|
+
**Tabbed Organization**
|
|
625
|
+
Most web apps use a vertical tab list on the left:
|
|
626
|
+
- Tabs are always visible, providing spatial orientation
|
|
627
|
+
- Active tab is highlighted; content area updates without full page reload
|
|
628
|
+
- Keyboard navigation: arrow keys move between tabs, Tab key moves into the content area
|
|
629
|
+
|
|
630
|
+
**Auto-Save vs. Explicit Save on Web:**
|
|
631
|
+
- Individual toggles and dropdowns: auto-save with debounce (300-500ms) and visual confirmation
|
|
632
|
+
- Form-based settings (profile info, SMTP config): explicit Save button
|
|
633
|
+
- Hybrid: auto-save for simple controls, Save button for form groups within the same page
|
|
634
|
+
|
|
635
|
+
### 7.4 Desktop (Electron/Native)
|
|
636
|
+
|
|
637
|
+
- macOS convention: Preferences window accessed via Cmd+, (comma)
|
|
638
|
+
- Windows convention: Settings in File > Options or Tools > Settings
|
|
639
|
+
- Desktop apps often support both GUI and config-file editing (VS Code model)
|
|
640
|
+
- Window-based preferences with toolbar icons for categories (macOS standard)
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
## 8. Decision Tree
|
|
645
|
+
|
|
646
|
+
### 8.1 In-App vs. System Settings
|
|
647
|
+
|
|
648
|
+
```
|
|
649
|
+
Is the setting changed frequently?
|
|
650
|
+
YES --> In-app settings
|
|
651
|
+
NO --> Is it needed when the app is not running?
|
|
652
|
+
YES --> System settings (Settings.bundle / Android system)
|
|
653
|
+
NO --> Is it an enterprise/MDM-managed setting?
|
|
654
|
+
YES --> System settings
|
|
655
|
+
NO --> In-app settings (rarely-changed section)
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
### 8.2 Auto-Save vs. Explicit Save
|
|
659
|
+
|
|
660
|
+
```
|
|
661
|
+
Is the setting a single binary toggle or simple selection?
|
|
662
|
+
YES --> Auto-save (instant apply)
|
|
663
|
+
NO --> Are multiple related fields changed together?
|
|
664
|
+
YES --> Is the change reversible?
|
|
665
|
+
YES --> Auto-save with undo option
|
|
666
|
+
NO --> Explicit save with confirmation
|
|
667
|
+
NO --> Does the setting have a preview/live effect?
|
|
668
|
+
YES --> Auto-save with live preview
|
|
669
|
+
NO --> Explicit save
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
### 8.3 Flat vs. Grouped vs. Tabbed Organization
|
|
673
|
+
|
|
674
|
+
```
|
|
675
|
+
How many total settings does the app have?
|
|
676
|
+
< 10 --> Flat scrollable list (single screen)
|
|
677
|
+
10-30 --> Grouped list with section headers
|
|
678
|
+
30-80 --> Tabbed/sidebar navigation with grouped sections
|
|
679
|
+
> 80 --> Tabbed navigation + search (mandatory)
|
|
680
|
+
+ consider "Advanced" section or progressive disclosure
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
### 8.4 Confirmation Level for Destructive Actions
|
|
684
|
+
|
|
685
|
+
```
|
|
686
|
+
Is the action reversible?
|
|
687
|
+
YES --> No confirmation needed; provide undo (toast/snackbar, 5-10s)
|
|
688
|
+
NO --> How severe are the consequences?
|
|
689
|
+
LOW (single item, no data loss)
|
|
690
|
+
--> Simple confirmation dialog with descriptive button
|
|
691
|
+
MEDIUM (affects multiple items or other users)
|
|
692
|
+
--> Confirmation dialog + consequence description
|
|
693
|
+
HIGH (irreversible data loss, account deletion)
|
|
694
|
+
--> Confirmation dialog + type-to-confirm + cooldown period
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
### 8.5 Search Necessity
|
|
698
|
+
|
|
699
|
+
```
|
|
700
|
+
Total number of settings > 15?
|
|
701
|
+
YES --> Search is required
|
|
702
|
+
NO --> Search is optional but still beneficial if settings
|
|
703
|
+
span multiple categories
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
---
|
|
707
|
+
|
|
708
|
+
## 9. Content and Copywriting Guidelines
|
|
709
|
+
|
|
710
|
+
**Setting Labels:** Use sentence case ("Auto-save documents"). Lead with the object or action. Keep under 40 characters. Always frame toggles positively ("Show status bar" not "Hide status bar").
|
|
711
|
+
|
|
712
|
+
**Setting Descriptions:** One to two lines maximum. Describe the effect, not the mechanism: "Your workspace members will see when you're online" not "Sends presence heartbeat to WebSocket server." Include consequence info for non-obvious settings.
|
|
713
|
+
|
|
714
|
+
**Section Headers:** Use standard labels: "General," "Appearance," "Notifications," "Privacy," "Account," "Advanced." Avoid creative names that sacrifice clarity.
|
|
715
|
+
|
|
716
|
+
**Confirmation Dialog Copy:** Title names the action ("Delete account?"). Body states consequences. Primary button repeats the action verb in red ("Delete Account"). Secondary button offers safe escape ("Cancel"). Never use Yes/No buttons.
|
|
717
|
+
|
|
718
|
+
---
|
|
719
|
+
|
|
720
|
+
## 10. Implementation and Performance Notes
|
|
721
|
+
|
|
722
|
+
**Settings Data Model** -- Each setting should define: key (unique identifier), type (toggle/select/slider/text/color), label, description, defaultValue, currentValue, scope (user/workspace/system), category, requiresRestart flag, isDestructive flag, and constraints.
|
|
723
|
+
|
|
724
|
+
**Settings Sync** -- Use last-write-wins for non-critical settings. Merge collection-type settings rather than replacing. Exclude device-specific settings (display density, font size) from sync. Store a schema version for migration across app updates.
|
|
725
|
+
|
|
726
|
+
**Performance** -- Settings screens should render within 100ms. Lazy-load heavy sub-screens. Cache values locally. For search, index labels and descriptions at build time; use client-side fuzzy matching; debounce input 200-300ms. For auto-save, debounce rapid changes 300-500ms before persisting; save text inputs on blur or after 1s of inactivity.
|
|
727
|
+
|
|
728
|
+
---
|
|
729
|
+
|
|
730
|
+
## References and Sources
|
|
731
|
+
|
|
732
|
+
### Design System Guidelines
|
|
733
|
+
- Apple Human Interface Guidelines -- Settings: https://developer.apple.com/design/human-interface-guidelines/patterns/settings/
|
|
734
|
+
- Material Design -- Settings Pattern: https://m2.material.io/design/platform-guidance/android-settings.html
|
|
735
|
+
- Material Design 3 -- Android: https://m3.material.io/develop/android/mdc-android
|
|
736
|
+
- Android Developer -- Settings Guide: https://developer.android.com/design/ui/mobile/guides/patterns/settings
|
|
737
|
+
|
|
738
|
+
### Research and Analysis
|
|
739
|
+
- Nielsen Norman Group -- Toggle Switch Guidelines: https://www.nngroup.com/articles/toggle-switch-guidelines/
|
|
740
|
+
- Nielsen Norman Group -- Confirmation Dialog: https://www.nngroup.com/articles/confirmation-dialog/
|
|
741
|
+
- Nielsen Norman Group -- Dangerous UX Proximity: https://www.nngroup.com/articles/proximity-consequential-options/
|
|
742
|
+
- Nielsen Norman Group -- 10 Usability Heuristics: https://www.nngroup.com/articles/ten-usability-heuristics/
|
|
743
|
+
- Nielsen Norman Group -- Checkboxes vs. Switches: https://www.nngroup.com/videos/checkboxes-vs-switches-forms/
|
|
744
|
+
|
|
745
|
+
### Industry Examples and Analysis
|
|
746
|
+
- Linear -- "Settings are not a design failure": https://linear.app/now/settings-are-not-a-design-failure
|
|
747
|
+
- VS Code -- User and Workspace Settings: https://code.visualstudio.com/docs/getstarted/settings
|
|
748
|
+
- Toptal -- How to Improve App Settings UX: https://www.toptal.com/designers/ux/settings-ux
|
|
749
|
+
- Smashing Magazine -- Managing Dangerous Actions in UIs: https://www.smashingmagazine.com/2024/09/how-manage-dangerous-actions-user-interfaces/
|
|
750
|
+
|
|
751
|
+
### Destructive Action Patterns
|
|
752
|
+
- UX Movement -- Destructive Actions That Prevent Data Loss: https://uxmovement.com/buttons/how-to-design-destructive-actions-that-prevent-data-loss/
|
|
753
|
+
- GitLab Pajamas -- Destructive Actions: https://design.gitlab.com/patterns/destructive-actions/
|
|
754
|
+
|
|
755
|
+
### Accessibility Standards
|
|
756
|
+
- WCAG 2.1: https://www.w3.org/TR/WCAG21/
|
|
757
|
+
- W3C WAI -- Form Instructions: https://www.w3.org/WAI/tutorials/forms/instructions/
|
|
758
|
+
- DubBot -- Accessible Toggle Switches: https://dubbot.com/dubblog/2024/visualizing-accessible-toggle-switches.html
|
|
759
|
+
|
|
760
|
+
### Micro-Interactions and Animation
|
|
761
|
+
- Cieden -- Toggle Switch UX Best Practices: https://cieden.com/book/atoms/toggle-switch/toggle-switch-ux-best-practices
|
|
762
|
+
- SetProduct -- Toggle Switch UI Design: https://www.setproduct.com/blog/toggle-switch-ui-design
|
|
763
|
+
|
|
764
|
+
### Product Documentation
|
|
765
|
+
- Notion -- Account Settings: https://www.notion.com/help/account-settings
|
|
766
|
+
- Notion -- Workspace Settings: https://www.notion.com/help/workspace-settings
|
|
767
|
+
- Slack -- Sidebar Preferences: https://slack.com/help/articles/212596808-Adjust-your-sidebar-preferences
|
|
768
|
+
- Apple -- Settings.bundle: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/UserDefaults/Preferences/Preferences.html
|