@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.
Files changed (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. 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