buildanything 1.7.1 → 2.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 (633) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +9 -3
  3. package/CHANGELOG.md +112 -0
  4. package/README.md +2 -2
  5. package/agents/a11y-architect.md +166 -0
  6. package/agents/business-model.md +80 -29
  7. package/agents/code-architect.md +75 -0
  8. package/agents/code-reviewer.md +255 -0
  9. package/agents/code-simplifier.md +64 -0
  10. package/agents/design-brand-guardian.md +293 -53
  11. package/agents/design-critic.md +139 -0
  12. package/agents/design-inclusive-visuals-specialist.md +6 -19
  13. package/agents/design-ui-designer.md +335 -56
  14. package/agents/design-ux-architect.md +403 -55
  15. package/agents/design-ux-researcher.md +264 -49
  16. package/agents/engineering-ai-engineer.md +26 -36
  17. package/agents/engineering-backend-architect.md +185 -36
  18. package/agents/engineering-data-engineer.md +225 -43
  19. package/agents/engineering-devops-automator.md +227 -74
  20. package/agents/engineering-frontend-developer.md +210 -34
  21. package/agents/engineering-mobile-app-builder.md +6 -1
  22. package/agents/engineering-rapid-prototyper.md +30 -9
  23. package/agents/engineering-security-engineer.md +263 -61
  24. package/agents/engineering-senior-developer.md +128 -19
  25. package/agents/engineering-sre.md +84 -0
  26. package/agents/engineering-technical-writer.md +285 -41
  27. package/agents/feature-intel.md +110 -0
  28. package/agents/ios-app-review-guardian.md +66 -0
  29. package/agents/ios-foundation-models-specialist.md +64 -0
  30. package/agents/ios-storekit-specialist.md +59 -0
  31. package/agents/ios-swift-architect.md +129 -0
  32. package/agents/ios-swift-search.md +137 -0
  33. package/agents/ios-swift-ui-design.md +136 -0
  34. package/agents/marketing-app-store-optimizer.md +246 -64
  35. package/agents/planner.md +216 -0
  36. package/agents/pr-test-analyzer.md +63 -0
  37. package/agents/product-feedback-synthesizer.md +8 -2
  38. package/agents/refactor-cleaner.md +102 -0
  39. package/agents/security-reviewer.md +128 -0
  40. package/agents/silent-failure-hunter.md +54 -0
  41. package/agents/swift-build-resolver.md +119 -0
  42. package/agents/swift-reviewer.md +112 -0
  43. package/agents/tech-feasibility.md +21 -1
  44. package/agents/testing-api-tester.md +236 -59
  45. package/agents/testing-evidence-collector.md +26 -1
  46. package/agents/testing-performance-benchmarker.md +21 -1
  47. package/agents/testing-reality-checker.md +6 -1
  48. package/agents/visual-research.md +116 -0
  49. package/bin/adapters/cycle-counter-tool.ts +155 -0
  50. package/bin/adapters/scribe-tool.ts +71 -0
  51. package/bin/adapters/state-save-tool.ts +130 -0
  52. package/bin/adapters/write-lease-tool.ts +127 -0
  53. package/bin/buildanything-runtime.js +15 -0
  54. package/bin/buildanything-runtime.ts +328 -0
  55. package/bin/setup.js +83 -8
  56. package/commands/add-feature.md +2 -0
  57. package/commands/build.md +752 -332
  58. package/commands/fix.md +65 -0
  59. package/commands/self-check.md +121 -0
  60. package/commands/setup.md +114 -0
  61. package/commands/ux-review.md +63 -0
  62. package/commands/verify.md +69 -0
  63. package/docs/migration/agents.yaml +729 -0
  64. package/docs/migration/phase-graph.yaml +1088 -0
  65. package/docs/migration/sdk-host-compat.md +18 -0
  66. package/hooks/compile-writer-owner-cache.ts +171 -0
  67. package/hooks/hooks.json +36 -0
  68. package/hooks/pre-tool-use +19 -0
  69. package/hooks/pre-tool-use.ts +776 -0
  70. package/hooks/record-mode-transitions.ts +178 -0
  71. package/hooks/session-start +89 -2
  72. package/hooks/subagent-start +17 -0
  73. package/hooks/subagent-start.ts +471 -0
  74. package/hooks/subagent-stop +17 -0
  75. package/hooks/subagent-stop.ts +153 -0
  76. package/package.json +28 -5
  77. package/protocols/architecture-schema.md +171 -0
  78. package/protocols/build-fix.md +52 -0
  79. package/protocols/cleanup.md +54 -0
  80. package/protocols/decision-log.md +131 -0
  81. package/protocols/eval-harness.md +61 -0
  82. package/protocols/fake-data-detector.md +64 -0
  83. package/protocols/ios-context.md +234 -0
  84. package/protocols/ios-frameworks-map.md +323 -0
  85. package/protocols/ios-phase-branches.md +337 -0
  86. package/protocols/ios-preflight.md +27 -0
  87. package/protocols/launch-readiness.md +258 -0
  88. package/protocols/metric-loop.md +153 -0
  89. package/protocols/smoke-test.md +118 -0
  90. package/protocols/state-schema.json +388 -0
  91. package/protocols/state-schema.md +172 -0
  92. package/protocols/verify.md +127 -0
  93. package/protocols/visual-dna.md +185 -0
  94. package/protocols/web-phase-branches.md +351 -0
  95. package/skills/ios/_VENDORED.md +62 -0
  96. package/skills/ios/activitykit/LICENSE +131 -0
  97. package/skills/ios/activitykit/SKILL.md +505 -0
  98. package/skills/ios/activitykit/references/activitykit-patterns.md +868 -0
  99. package/skills/ios/app-intents/LICENSE +131 -0
  100. package/skills/ios/app-intents/SKILL.md +494 -0
  101. package/skills/ios/app-intents/references/appintents-advanced.md +1076 -0
  102. package/skills/ios/app-store-connect-metadata/SKILL.md +148 -0
  103. package/skills/ios/apple-on-device-ai/LICENSE +131 -0
  104. package/skills/ios/apple-on-device-ai/SKILL.md +505 -0
  105. package/skills/ios/apple-on-device-ai/references/coreml-conversion.md +425 -0
  106. package/skills/ios/apple-on-device-ai/references/coreml-optimization.md +344 -0
  107. package/skills/ios/apple-on-device-ai/references/foundation-models.md +508 -0
  108. package/skills/ios/apple-on-device-ai/references/mlx-swift.md +285 -0
  109. package/skills/ios/asc-privacy-manifest/SKILL.md +350 -0
  110. package/skills/ios/hig-components-content/SKILL.md +86 -0
  111. package/skills/ios/hig-components-content/references/activity-views.md +79 -0
  112. package/skills/ios/hig-components-content/references/charts.md +180 -0
  113. package/skills/ios/hig-components-content/references/collections.md +48 -0
  114. package/skills/ios/hig-components-content/references/color-wells.md +42 -0
  115. package/skills/ios/hig-components-content/references/image-views.md +82 -0
  116. package/skills/ios/hig-components-content/references/image-wells.md +34 -0
  117. package/skills/ios/hig-components-content/references/lockups.md +78 -0
  118. package/skills/ios/hig-components-content/references/web-views.md +36 -0
  119. package/skills/ios/hig-components-controls/SKILL.md +88 -0
  120. package/skills/ios/hig-components-controls/references/combo-boxes.md +40 -0
  121. package/skills/ios/hig-components-controls/references/controls.md +112 -0
  122. package/skills/ios/hig-components-controls/references/gauges.md +74 -0
  123. package/skills/ios/hig-components-controls/references/labels.md +92 -0
  124. package/skills/ios/hig-components-controls/references/pickers.md +128 -0
  125. package/skills/ios/hig-components-controls/references/rating-indicators.md +38 -0
  126. package/skills/ios/hig-components-controls/references/segmented-controls.md +94 -0
  127. package/skills/ios/hig-components-controls/references/sliders.md +92 -0
  128. package/skills/ios/hig-components-controls/references/steppers.md +40 -0
  129. package/skills/ios/hig-components-controls/references/text-fields.md +88 -0
  130. package/skills/ios/hig-components-controls/references/text-views.md +56 -0
  131. package/skills/ios/hig-components-controls/references/toggles.md +127 -0
  132. package/skills/ios/hig-components-controls/references/token-fields.md +48 -0
  133. package/skills/ios/hig-components-controls/references/virtual-keyboards.md +156 -0
  134. package/skills/ios/hig-components-dialogs/SKILL.md +76 -0
  135. package/skills/ios/hig-components-dialogs/references/action-sheets.md +74 -0
  136. package/skills/ios/hig-components-dialogs/references/alerts.md +158 -0
  137. package/skills/ios/hig-components-dialogs/references/digit-entry-views.md +32 -0
  138. package/skills/ios/hig-components-dialogs/references/popovers.md +81 -0
  139. package/skills/ios/hig-components-dialogs/references/sheets.md +157 -0
  140. package/skills/ios/hig-components-layout/SKILL.md +99 -0
  141. package/skills/ios/hig-components-layout/references/boxes.md +48 -0
  142. package/skills/ios/hig-components-layout/references/column-views.md +44 -0
  143. package/skills/ios/hig-components-layout/references/lists-and-tables.md +99 -0
  144. package/skills/ios/hig-components-layout/references/ornaments.md +56 -0
  145. package/skills/ios/hig-components-layout/references/outline-views.md +64 -0
  146. package/skills/ios/hig-components-layout/references/panels.md +75 -0
  147. package/skills/ios/hig-components-layout/references/scroll-views.md +123 -0
  148. package/skills/ios/hig-components-layout/references/sidebars.md +109 -0
  149. package/skills/ios/hig-components-layout/references/split-views.md +110 -0
  150. package/skills/ios/hig-components-layout/references/tab-bars.md +173 -0
  151. package/skills/ios/hig-components-layout/references/tab-views.md +68 -0
  152. package/skills/ios/hig-components-layout/references/windows.md +188 -0
  153. package/skills/ios/hig-components-menus/SKILL.md +81 -0
  154. package/skills/ios/hig-components-menus/references/action-button.md +61 -0
  155. package/skills/ios/hig-components-menus/references/buttons.md +261 -0
  156. package/skills/ios/hig-components-menus/references/context-menus.md +105 -0
  157. package/skills/ios/hig-components-menus/references/disclosure-controls.md +84 -0
  158. package/skills/ios/hig-components-menus/references/dock-menus.md +40 -0
  159. package/skills/ios/hig-components-menus/references/edit-menus.md +88 -0
  160. package/skills/ios/hig-components-menus/references/menus.md +171 -0
  161. package/skills/ios/hig-components-menus/references/pop-up-buttons.md +70 -0
  162. package/skills/ios/hig-components-menus/references/pull-down-buttons.md +77 -0
  163. package/skills/ios/hig-components-menus/references/the-menu-bar.md +303 -0
  164. package/skills/ios/hig-components-menus/references/toolbars.md +256 -0
  165. package/skills/ios/hig-components-search/SKILL.md +68 -0
  166. package/skills/ios/hig-components-search/references/page-controls.md +120 -0
  167. package/skills/ios/hig-components-search/references/path-controls.md +40 -0
  168. package/skills/ios/hig-components-search/references/search-fields.md +189 -0
  169. package/skills/ios/hig-components-status/SKILL.md +80 -0
  170. package/skills/ios/hig-components-status/references/activity-rings.md +105 -0
  171. package/skills/ios/hig-components-status/references/progress-indicators.md +116 -0
  172. package/skills/ios/hig-components-status/references/status-bars.md +38 -0
  173. package/skills/ios/hig-components-system/SKILL.md +88 -0
  174. package/skills/ios/hig-components-system/references/app-clips.md +387 -0
  175. package/skills/ios/hig-components-system/references/app-shortcuts.md +114 -0
  176. package/skills/ios/hig-components-system/references/complications.md +425 -0
  177. package/skills/ios/hig-components-system/references/home-screen-quick-actions.md +42 -0
  178. package/skills/ios/hig-components-system/references/live-activities.md +442 -0
  179. package/skills/ios/hig-components-system/references/notifications.md +153 -0
  180. package/skills/ios/hig-components-system/references/top-shelf.md +135 -0
  181. package/skills/ios/hig-components-system/references/watch-faces.md +40 -0
  182. package/skills/ios/hig-components-system/references/widgets.md +517 -0
  183. package/skills/ios/hig-foundations/SKILL.md +98 -0
  184. package/skills/ios/hig-foundations/references/accessibility.md +291 -0
  185. package/skills/ios/hig-foundations/references/app-icons.md +210 -0
  186. package/skills/ios/hig-foundations/references/branding.md +44 -0
  187. package/skills/ios/hig-foundations/references/color.md +274 -0
  188. package/skills/ios/hig-foundations/references/dark-mode.md +116 -0
  189. package/skills/ios/hig-foundations/references/icons.md +263 -0
  190. package/skills/ios/hig-foundations/references/images.md +176 -0
  191. package/skills/ios/hig-foundations/references/immersive-experiences.md +174 -0
  192. package/skills/ios/hig-foundations/references/inclusion.md +189 -0
  193. package/skills/ios/hig-foundations/references/layout.md +425 -0
  194. package/skills/ios/hig-foundations/references/materials.md +238 -0
  195. package/skills/ios/hig-foundations/references/motion.md +103 -0
  196. package/skills/ios/hig-foundations/references/privacy.md +231 -0
  197. package/skills/ios/hig-foundations/references/right-to-left.md +206 -0
  198. package/skills/ios/hig-foundations/references/sf-symbols.md +310 -0
  199. package/skills/ios/hig-foundations/references/spatial-layout.md +142 -0
  200. package/skills/ios/hig-foundations/references/typography.md +1146 -0
  201. package/skills/ios/hig-foundations/references/writing.md +91 -0
  202. package/skills/ios/hig-inputs/SKILL.md +94 -0
  203. package/skills/ios/hig-inputs/references/apple-pencil-and-scribble.md +148 -0
  204. package/skills/ios/hig-inputs/references/camera-control.md +107 -0
  205. package/skills/ios/hig-inputs/references/digital-crown.md +83 -0
  206. package/skills/ios/hig-inputs/references/eyes.md +120 -0
  207. package/skills/ios/hig-inputs/references/focus-and-selection.md +120 -0
  208. package/skills/ios/hig-inputs/references/game-controls.md +156 -0
  209. package/skills/ios/hig-inputs/references/gestures.md +208 -0
  210. package/skills/ios/hig-inputs/references/gyro-and-accelerometer.md +40 -0
  211. package/skills/ios/hig-inputs/references/keyboards.md +234 -0
  212. package/skills/ios/hig-inputs/references/nearby-interactions.md +70 -0
  213. package/skills/ios/hig-inputs/references/pointing-devices.md +237 -0
  214. package/skills/ios/hig-inputs/references/remotes.md +67 -0
  215. package/skills/ios/hig-inputs/references/spatial-interactions.md +70 -0
  216. package/skills/ios/hig-patterns/SKILL.md +104 -0
  217. package/skills/ios/hig-patterns/references/charting-data.md +81 -0
  218. package/skills/ios/hig-patterns/references/collaboration-and-sharing.md +86 -0
  219. package/skills/ios/hig-patterns/references/drag-and-drop.md +134 -0
  220. package/skills/ios/hig-patterns/references/entering-data.md +69 -0
  221. package/skills/ios/hig-patterns/references/feedback.md +67 -0
  222. package/skills/ios/hig-patterns/references/file-management.md +135 -0
  223. package/skills/ios/hig-patterns/references/going-full-screen.md +79 -0
  224. package/skills/ios/hig-patterns/references/launching.md +81 -0
  225. package/skills/ios/hig-patterns/references/live-viewing-apps.md +79 -0
  226. package/skills/ios/hig-patterns/references/loading.md +59 -0
  227. package/skills/ios/hig-patterns/references/managing-accounts.md +107 -0
  228. package/skills/ios/hig-patterns/references/managing-notifications.md +99 -0
  229. package/skills/ios/hig-patterns/references/modality.md +82 -0
  230. package/skills/ios/hig-patterns/references/multitasking.md +131 -0
  231. package/skills/ios/hig-patterns/references/offering-help.md +117 -0
  232. package/skills/ios/hig-patterns/references/onboarding.md +69 -0
  233. package/skills/ios/hig-patterns/references/playing-audio.md +124 -0
  234. package/skills/ios/hig-patterns/references/playing-haptics.md +280 -0
  235. package/skills/ios/hig-patterns/references/playing-video.md +180 -0
  236. package/skills/ios/hig-patterns/references/printing.md +50 -0
  237. package/skills/ios/hig-patterns/references/ratings-and-reviews.md +48 -0
  238. package/skills/ios/hig-patterns/references/searching.md +70 -0
  239. package/skills/ios/hig-patterns/references/settings.md +84 -0
  240. package/skills/ios/hig-patterns/references/undo-and-redo.md +58 -0
  241. package/skills/ios/hig-patterns/references/workouts.md +76 -0
  242. package/skills/ios/hig-platforms/SKILL.md +84 -0
  243. package/skills/ios/hig-platforms/references/designing-for-games.md +159 -0
  244. package/skills/ios/hig-platforms/references/designing-for-ios.md +66 -0
  245. package/skills/ios/hig-platforms/references/designing-for-ipados.md +64 -0
  246. package/skills/ios/hig-platforms/references/designing-for-macos.md +70 -0
  247. package/skills/ios/hig-platforms/references/designing-for-tvos.md +68 -0
  248. package/skills/ios/hig-platforms/references/designing-for-visionos.md +85 -0
  249. package/skills/ios/hig-platforms/references/designing-for-watchos.md +74 -0
  250. package/skills/ios/hig-project-context/SKILL.md +133 -0
  251. package/skills/ios/hig-technologies/SKILL.md +107 -0
  252. package/skills/ios/hig-technologies/references/airplay.md +125 -0
  253. package/skills/ios/hig-technologies/references/always-on.md +62 -0
  254. package/skills/ios/hig-technologies/references/apple-pay.md +441 -0
  255. package/skills/ios/hig-technologies/references/augmented-reality.md +247 -0
  256. package/skills/ios/hig-technologies/references/carekit.md +224 -0
  257. package/skills/ios/hig-technologies/references/carplay.md +119 -0
  258. package/skills/ios/hig-technologies/references/game-center.md +343 -0
  259. package/skills/ios/hig-technologies/references/generative-ai.md +110 -0
  260. package/skills/ios/hig-technologies/references/healthkit.md +120 -0
  261. package/skills/ios/hig-technologies/references/homekit.md +343 -0
  262. package/skills/ios/hig-technologies/references/icloud.md +52 -0
  263. package/skills/ios/hig-technologies/references/id-verifier.md +73 -0
  264. package/skills/ios/hig-technologies/references/imessage-apps-and-stickers.md +105 -0
  265. package/skills/ios/hig-technologies/references/in-app-purchase.md +263 -0
  266. package/skills/ios/hig-technologies/references/live-photos.md +54 -0
  267. package/skills/ios/hig-technologies/references/mac-catalyst.md +216 -0
  268. package/skills/ios/hig-technologies/references/machine-learning.md +394 -0
  269. package/skills/ios/hig-technologies/references/maps.md +221 -0
  270. package/skills/ios/hig-technologies/references/nfc.md +51 -0
  271. package/skills/ios/hig-technologies/references/photo-editing.md +40 -0
  272. package/skills/ios/hig-technologies/references/researchkit.md +134 -0
  273. package/skills/ios/hig-technologies/references/shareplay.md +142 -0
  274. package/skills/ios/hig-technologies/references/shazamkit.md +47 -0
  275. package/skills/ios/hig-technologies/references/sign-in-with-apple.md +288 -0
  276. package/skills/ios/hig-technologies/references/siri.md +523 -0
  277. package/skills/ios/hig-technologies/references/tap-to-pay-on-iphone.md +208 -0
  278. package/skills/ios/hig-technologies/references/voiceover.md +90 -0
  279. package/skills/ios/hig-technologies/references/wallet.md +420 -0
  280. package/skills/ios/ios-26-platform/SKILL.md +53 -0
  281. package/skills/ios/ios-26-platform/references/automatic-adoption.md +161 -0
  282. package/skills/ios/ios-26-platform/references/backward-compat.md +238 -0
  283. package/skills/ios/ios-26-platform/references/liquid-glass.md +255 -0
  284. package/skills/ios/ios-26-platform/references/swiftui-apis.md +277 -0
  285. package/skills/ios/ios-26-platform/references/toolbar-navigation.md +250 -0
  286. package/skills/ios/ios-bootstrap/SKILL.md +107 -0
  287. package/skills/ios/ios-bootstrap/references/apple-docs-mcp-config.md +28 -0
  288. package/skills/ios/ios-bootstrap/references/new-project-dialog.md +41 -0
  289. package/skills/ios/ios-bootstrap/references/xcode-mcp-config.md +29 -0
  290. package/skills/ios/ios-debugger-agent/LICENSE +21 -0
  291. package/skills/ios/ios-debugger-agent/SKILL.md +58 -0
  292. package/skills/ios/ios-debugger-agent/agents/openai.yaml +4 -0
  293. package/skills/ios/ios-entitlements-generator/SKILL.md +47 -0
  294. package/skills/ios/ios-info-plist-hardening/SKILL.md +130 -0
  295. package/skills/ios/ios-maestro-flow-author/SKILL.md +68 -0
  296. package/skills/ios/ios-maestro-flow-author/references/input-and-scroll.yaml +17 -0
  297. package/skills/ios/ios-maestro-flow-author/references/modal-and-dismiss.yaml +14 -0
  298. package/skills/ios/ios-maestro-flow-author/references/onboarding-flow.yaml +16 -0
  299. package/skills/ios/ios-maestro-flow-author/references/tab-navigation.yaml +13 -0
  300. package/skills/ios/ios-maestro-flow-author/references/tap-and-assert.yaml +9 -0
  301. package/skills/ios/swift-accessibility/LICENSE +21 -0
  302. package/skills/ios/swift-accessibility/SKILL.md +371 -0
  303. package/skills/ios/swift-accessibility/examples/before-after-appkit.md +446 -0
  304. package/skills/ios/swift-accessibility/examples/before-after-swiftui.md +441 -0
  305. package/skills/ios/swift-accessibility/examples/before-after-uikit.md +464 -0
  306. package/skills/ios/swift-accessibility/references/assistive-access.md +441 -0
  307. package/skills/ios/swift-accessibility/references/display-settings.md +491 -0
  308. package/skills/ios/swift-accessibility/references/dynamic-type.md +420 -0
  309. package/skills/ios/swift-accessibility/references/media-accessibility.md +421 -0
  310. package/skills/ios/swift-accessibility/references/motor-input.md +393 -0
  311. package/skills/ios/swift-accessibility/references/nutrition-labels.md +362 -0
  312. package/skills/ios/swift-accessibility/references/platform-specifics.md +515 -0
  313. package/skills/ios/swift-accessibility/references/semantic-structure.md +585 -0
  314. package/skills/ios/swift-accessibility/references/testing-auditing.md +507 -0
  315. package/skills/ios/swift-accessibility/references/voice-control.md +317 -0
  316. package/skills/ios/swift-accessibility/references/voiceover-swiftui.md +584 -0
  317. package/skills/ios/swift-accessibility/references/voiceover-uikit.md +519 -0
  318. package/skills/ios/swift-accessibility/references/wcag-mapping.md +167 -0
  319. package/skills/ios/swift-accessibility/resources/audit-template.swift +128 -0
  320. package/skills/ios/swift-accessibility/resources/qa-checklist.md +258 -0
  321. package/skills/ios/swift-actor-persistence/SKILL.md +143 -0
  322. package/skills/ios/swift-concurrency/LICENSE +21 -0
  323. package/skills/ios/swift-concurrency/SKILL.md +171 -0
  324. package/skills/ios/swift-concurrency/references/_index.md +50 -0
  325. package/skills/ios/swift-concurrency/references/actors.md +660 -0
  326. package/skills/ios/swift-concurrency/references/async-algorithms.md +847 -0
  327. package/skills/ios/swift-concurrency/references/async-await-basics.md +266 -0
  328. package/skills/ios/swift-concurrency/references/async-sequences.md +710 -0
  329. package/skills/ios/swift-concurrency/references/core-data.md +560 -0
  330. package/skills/ios/swift-concurrency/references/glossary.md +135 -0
  331. package/skills/ios/swift-concurrency/references/linting.md +155 -0
  332. package/skills/ios/swift-concurrency/references/memory-management.md +569 -0
  333. package/skills/ios/swift-concurrency/references/migration.md +1104 -0
  334. package/skills/ios/swift-concurrency/references/performance.md +593 -0
  335. package/skills/ios/swift-concurrency/references/sendable.md +598 -0
  336. package/skills/ios/swift-concurrency/references/tasks.md +636 -0
  337. package/skills/ios/swift-concurrency/references/testing.md +592 -0
  338. package/skills/ios/swift-concurrency/references/threading.md +495 -0
  339. package/skills/ios/swift-concurrency-6-2/SKILL.md +216 -0
  340. package/skills/ios/swift-protocol-di-testing/SKILL.md +190 -0
  341. package/skills/ios/swift-security-expert/LICENSE +21 -0
  342. package/skills/ios/swift-security-expert/SKILL.md +470 -0
  343. package/skills/ios/swift-security-expert/references/biometric-authentication.md +565 -0
  344. package/skills/ios/swift-security-expert/references/certificate-trust.md +592 -0
  345. package/skills/ios/swift-security-expert/references/common-anti-patterns.md +690 -0
  346. package/skills/ios/swift-security-expert/references/compliance-owasp-mapping.md +537 -0
  347. package/skills/ios/swift-security-expert/references/credential-storage-patterns.md +721 -0
  348. package/skills/ios/swift-security-expert/references/cryptokit-public-key.md +505 -0
  349. package/skills/ios/swift-security-expert/references/cryptokit-symmetric.md +497 -0
  350. package/skills/ios/swift-security-expert/references/keychain-access-control.md +508 -0
  351. package/skills/ios/swift-security-expert/references/keychain-fundamentals.md +596 -0
  352. package/skills/ios/swift-security-expert/references/keychain-item-classes.md +476 -0
  353. package/skills/ios/swift-security-expert/references/keychain-sharing.md +458 -0
  354. package/skills/ios/swift-security-expert/references/migration-legacy-stores.md +727 -0
  355. package/skills/ios/swift-security-expert/references/secure-enclave.md +539 -0
  356. package/skills/ios/swift-security-expert/references/testing-security-code.md +781 -0
  357. package/skills/ios/swift-testing-expert/LICENSE +21 -0
  358. package/skills/ios/swift-testing-expert/SKILL.md +79 -0
  359. package/skills/ios/swift-testing-expert/references/_index.md +12 -0
  360. package/skills/ios/swift-testing-expert/references/async-testing-and-waiting.md +127 -0
  361. package/skills/ios/swift-testing-expert/references/expectations.md +145 -0
  362. package/skills/ios/swift-testing-expert/references/fundamentals.md +141 -0
  363. package/skills/ios/swift-testing-expert/references/migration-from-xctest.md +127 -0
  364. package/skills/ios/swift-testing-expert/references/parallelization-and-isolation.md +95 -0
  365. package/skills/ios/swift-testing-expert/references/parameterized-testing.md +284 -0
  366. package/skills/ios/swift-testing-expert/references/performance-and-best-practices.md +187 -0
  367. package/skills/ios/swift-testing-expert/references/traits-and-tags.md +114 -0
  368. package/skills/ios/swift-testing-expert/references/xcode-workflows.md +70 -0
  369. package/skills/ios/swiftdata-pro/LICENSE +21 -0
  370. package/skills/ios/swiftdata-pro/SKILL.md +102 -0
  371. package/skills/ios/swiftdata-pro/agents/openai.yaml +10 -0
  372. package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.png +0 -0
  373. package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.svg +29 -0
  374. package/skills/ios/swiftdata-pro/references/class-inheritance.md +104 -0
  375. package/skills/ios/swiftdata-pro/references/cloudkit.md +10 -0
  376. package/skills/ios/swiftdata-pro/references/core-rules.md +20 -0
  377. package/skills/ios/swiftdata-pro/references/indexing.md +27 -0
  378. package/skills/ios/swiftdata-pro/references/predicates.md +73 -0
  379. package/skills/ios/swiftui-design-principles/AGENTS.md +21 -0
  380. package/skills/ios/swiftui-design-principles/LICENSE +21 -0
  381. package/skills/ios/swiftui-design-principles/README.md +41 -0
  382. package/skills/ios/swiftui-design-principles/SKILL.md +605 -0
  383. package/skills/ios/swiftui-design-principles/metadata.json +10 -0
  384. package/skills/ios/swiftui-design-tokens/SKILL.md +475 -0
  385. package/skills/ios/swiftui-liquid-glass/LICENSE +21 -0
  386. package/skills/ios/swiftui-liquid-glass/SKILL.md +95 -0
  387. package/skills/ios/swiftui-liquid-glass/agents/openai.yaml +4 -0
  388. package/skills/ios/swiftui-liquid-glass/references/liquid-glass.md +280 -0
  389. package/skills/ios/swiftui-performance-audit/LICENSE +21 -0
  390. package/skills/ios/swiftui-performance-audit/SKILL.md +111 -0
  391. package/skills/ios/swiftui-performance-audit/agents/openai.yaml +4 -0
  392. package/skills/ios/swiftui-performance-audit/references/code-smells.md +150 -0
  393. package/skills/ios/swiftui-performance-audit/references/demystify-swiftui-performance-wwdc23.md +46 -0
  394. package/skills/ios/swiftui-performance-audit/references/optimizing-swiftui-performance-instruments.md +29 -0
  395. package/skills/ios/swiftui-performance-audit/references/profiling-intake.md +44 -0
  396. package/skills/ios/swiftui-performance-audit/references/report-template.md +47 -0
  397. package/skills/ios/swiftui-performance-audit/references/understanding-hangs-in-your-app.md +33 -0
  398. package/skills/ios/swiftui-performance-audit/references/understanding-improving-swiftui-performance.md +52 -0
  399. package/skills/ios/swiftui-pro/LICENSE +21 -0
  400. package/skills/ios/swiftui-pro/SKILL.md +108 -0
  401. package/skills/ios/swiftui-pro/agents/openai.yaml +10 -0
  402. package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
  403. package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
  404. package/skills/ios/swiftui-pro/references/accessibility.md +13 -0
  405. package/skills/ios/swiftui-pro/references/api.md +39 -0
  406. package/skills/ios/swiftui-pro/references/data.md +43 -0
  407. package/skills/ios/swiftui-pro/references/design.md +31 -0
  408. package/skills/ios/swiftui-pro/references/hygiene.md +9 -0
  409. package/skills/ios/swiftui-pro/references/navigation.md +14 -0
  410. package/skills/ios/swiftui-pro/references/performance.md +46 -0
  411. package/skills/ios/swiftui-pro/references/swift.md +56 -0
  412. package/skills/ios/swiftui-pro/references/views.md +35 -0
  413. package/skills/ios/swiftui-ui-patterns/LICENSE +21 -0
  414. package/skills/ios/swiftui-ui-patterns/SKILL.md +100 -0
  415. package/skills/ios/swiftui-ui-patterns/agents/openai.yaml +4 -0
  416. package/skills/ios/swiftui-ui-patterns/references/app-wiring.md +201 -0
  417. package/skills/ios/swiftui-ui-patterns/references/async-state.md +96 -0
  418. package/skills/ios/swiftui-ui-patterns/references/components-index.md +50 -0
  419. package/skills/ios/swiftui-ui-patterns/references/controls.md +57 -0
  420. package/skills/ios/swiftui-ui-patterns/references/deeplinks.md +66 -0
  421. package/skills/ios/swiftui-ui-patterns/references/focus.md +90 -0
  422. package/skills/ios/swiftui-ui-patterns/references/form.md +97 -0
  423. package/skills/ios/swiftui-ui-patterns/references/grids.md +71 -0
  424. package/skills/ios/swiftui-ui-patterns/references/haptics.md +71 -0
  425. package/skills/ios/swiftui-ui-patterns/references/input-toolbar.md +51 -0
  426. package/skills/ios/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
  427. package/skills/ios/swiftui-ui-patterns/references/list.md +86 -0
  428. package/skills/ios/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
  429. package/skills/ios/swiftui-ui-patterns/references/macos-settings.md +71 -0
  430. package/skills/ios/swiftui-ui-patterns/references/matched-transitions.md +59 -0
  431. package/skills/ios/swiftui-ui-patterns/references/media.md +73 -0
  432. package/skills/ios/swiftui-ui-patterns/references/menu-bar.md +101 -0
  433. package/skills/ios/swiftui-ui-patterns/references/navigationstack.md +159 -0
  434. package/skills/ios/swiftui-ui-patterns/references/overlay.md +45 -0
  435. package/skills/ios/swiftui-ui-patterns/references/performance.md +62 -0
  436. package/skills/ios/swiftui-ui-patterns/references/previews.md +48 -0
  437. package/skills/ios/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
  438. package/skills/ios/swiftui-ui-patterns/references/scrollview.md +87 -0
  439. package/skills/ios/swiftui-ui-patterns/references/searchable.md +71 -0
  440. package/skills/ios/swiftui-ui-patterns/references/sheets.md +155 -0
  441. package/skills/ios/swiftui-ui-patterns/references/split-views.md +72 -0
  442. package/skills/ios/swiftui-ui-patterns/references/tabview.md +114 -0
  443. package/skills/ios/swiftui-ui-patterns/references/theming.md +71 -0
  444. package/skills/ios/swiftui-ui-patterns/references/title-menus.md +93 -0
  445. package/skills/ios/swiftui-ui-patterns/references/top-bar.md +49 -0
  446. package/skills/ios/swiftui-view-refactor/LICENSE +21 -0
  447. package/skills/ios/swiftui-view-refactor/SKILL.md +207 -0
  448. package/skills/ios/swiftui-view-refactor/agents/openai.yaml +4 -0
  449. package/skills/ios/swiftui-view-refactor/references/mv-patterns.md +161 -0
  450. package/skills/ios/widgetkit/LICENSE +131 -0
  451. package/skills/ios/widgetkit/SKILL.md +502 -0
  452. package/skills/ios/widgetkit/references/widgetkit-advanced.md +871 -0
  453. package/skills/ios/writing-for-interfaces/SKILL.md +75 -0
  454. package/skills/web/accessibility/SKILL.md +146 -0
  455. package/skills/web/aceternity-ui/SKILL.md +719 -0
  456. package/skills/web/aceternity-ui/metadata.json +10 -0
  457. package/skills/web/api-design/SKILL.md +523 -0
  458. package/skills/web/chart-accessibility/SKILL.md +332 -0
  459. package/skills/web/composition-patterns/AGENTS.md +946 -0
  460. package/skills/web/composition-patterns/README.md +60 -0
  461. package/skills/web/composition-patterns/SKILL.md +89 -0
  462. package/skills/web/composition-patterns/metadata.json +11 -0
  463. package/skills/web/composition-patterns/rules/_sections.md +29 -0
  464. package/skills/web/composition-patterns/rules/_template.md +24 -0
  465. package/skills/web/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  466. package/skills/web/composition-patterns/rules/architecture-compound-components.md +112 -0
  467. package/skills/web/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  468. package/skills/web/composition-patterns/rules/patterns-explicit-variants.md +100 -0
  469. package/skills/web/composition-patterns/rules/react19-no-forwardref.md +42 -0
  470. package/skills/web/composition-patterns/rules/state-context-interface.md +191 -0
  471. package/skills/web/composition-patterns/rules/state-decouple-implementation.md +113 -0
  472. package/skills/web/composition-patterns/rules/state-lift-state.md +125 -0
  473. package/skills/web/cost-aware-llm-pipeline/SKILL.md +183 -0
  474. package/skills/web/database-migrations/SKILL.md +429 -0
  475. package/skills/web/deployment-patterns/SKILL.md +427 -0
  476. package/skills/web/docker-patterns/SKILL.md +364 -0
  477. package/skills/web/e2e-testing/SKILL.md +326 -0
  478. package/skills/web/lighthouse-ci/SKILL.md +361 -0
  479. package/skills/web/mcp-server-patterns/SKILL.md +69 -0
  480. package/skills/web/next-best-practices/SKILL.md +153 -0
  481. package/skills/web/next-best-practices/async-patterns.md +87 -0
  482. package/skills/web/next-best-practices/bundling.md +180 -0
  483. package/skills/web/next-best-practices/data-patterns.md +297 -0
  484. package/skills/web/next-best-practices/debug-tricks.md +105 -0
  485. package/skills/web/next-best-practices/directives.md +73 -0
  486. package/skills/web/next-best-practices/error-handling.md +227 -0
  487. package/skills/web/next-best-practices/file-conventions.md +140 -0
  488. package/skills/web/next-best-practices/font.md +245 -0
  489. package/skills/web/next-best-practices/functions.md +108 -0
  490. package/skills/web/next-best-practices/hydration-error.md +91 -0
  491. package/skills/web/next-best-practices/image.md +173 -0
  492. package/skills/web/next-best-practices/metadata.md +301 -0
  493. package/skills/web/next-best-practices/parallel-routes.md +287 -0
  494. package/skills/web/next-best-practices/route-handlers.md +146 -0
  495. package/skills/web/next-best-practices/rsc-boundaries.md +159 -0
  496. package/skills/web/next-best-practices/runtime-selection.md +39 -0
  497. package/skills/web/next-best-practices/scripts.md +141 -0
  498. package/skills/web/next-best-practices/self-hosting.md +371 -0
  499. package/skills/web/next-best-practices/suspense-boundaries.md +67 -0
  500. package/skills/web/next-cache-components/SKILL.md +411 -0
  501. package/skills/web/postgres-best-practices/SKILL.md +14 -0
  502. package/skills/web/postgres-best-practices/references/schema-design.md +9 -0
  503. package/skills/web/react-best-practices/AGENTS.md +3810 -0
  504. package/skills/web/react-best-practices/README.md +123 -0
  505. package/skills/web/react-best-practices/SKILL.md +149 -0
  506. package/skills/web/react-best-practices/metadata.json +15 -0
  507. package/skills/web/react-best-practices/rules/_sections.md +46 -0
  508. package/skills/web/react-best-practices/rules/_template.md +28 -0
  509. package/skills/web/react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  510. package/skills/web/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  511. package/skills/web/react-best-practices/rules/advanced-init-once.md +42 -0
  512. package/skills/web/react-best-practices/rules/advanced-use-latest.md +39 -0
  513. package/skills/web/react-best-practices/rules/async-api-routes.md +38 -0
  514. package/skills/web/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  515. package/skills/web/react-best-practices/rules/async-defer-await.md +82 -0
  516. package/skills/web/react-best-practices/rules/async-dependencies.md +51 -0
  517. package/skills/web/react-best-practices/rules/async-parallel.md +28 -0
  518. package/skills/web/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  519. package/skills/web/react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  520. package/skills/web/react-best-practices/rules/bundle-barrel-imports.md +60 -0
  521. package/skills/web/react-best-practices/rules/bundle-conditional.md +31 -0
  522. package/skills/web/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  523. package/skills/web/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  524. package/skills/web/react-best-practices/rules/bundle-preload.md +50 -0
  525. package/skills/web/react-best-practices/rules/client-event-listeners.md +74 -0
  526. package/skills/web/react-best-practices/rules/client-localstorage-schema.md +71 -0
  527. package/skills/web/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  528. package/skills/web/react-best-practices/rules/client-swr-dedup.md +56 -0
  529. package/skills/web/react-best-practices/rules/js-batch-dom-css.md +107 -0
  530. package/skills/web/react-best-practices/rules/js-cache-function-results.md +80 -0
  531. package/skills/web/react-best-practices/rules/js-cache-property-access.md +28 -0
  532. package/skills/web/react-best-practices/rules/js-cache-storage.md +70 -0
  533. package/skills/web/react-best-practices/rules/js-combine-iterations.md +32 -0
  534. package/skills/web/react-best-practices/rules/js-early-exit.md +50 -0
  535. package/skills/web/react-best-practices/rules/js-flatmap-filter.md +60 -0
  536. package/skills/web/react-best-practices/rules/js-hoist-regexp.md +45 -0
  537. package/skills/web/react-best-practices/rules/js-index-maps.md +37 -0
  538. package/skills/web/react-best-practices/rules/js-length-check-first.md +49 -0
  539. package/skills/web/react-best-practices/rules/js-min-max-loop.md +82 -0
  540. package/skills/web/react-best-practices/rules/js-request-idle-callback.md +105 -0
  541. package/skills/web/react-best-practices/rules/js-set-map-lookups.md +24 -0
  542. package/skills/web/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  543. package/skills/web/react-best-practices/rules/rendering-activity.md +26 -0
  544. package/skills/web/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  545. package/skills/web/react-best-practices/rules/rendering-conditional-render.md +40 -0
  546. package/skills/web/react-best-practices/rules/rendering-content-visibility.md +38 -0
  547. package/skills/web/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  548. package/skills/web/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  549. package/skills/web/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  550. package/skills/web/react-best-practices/rules/rendering-resource-hints.md +85 -0
  551. package/skills/web/react-best-practices/rules/rendering-script-defer-async.md +68 -0
  552. package/skills/web/react-best-practices/rules/rendering-svg-precision.md +28 -0
  553. package/skills/web/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  554. package/skills/web/react-best-practices/rules/rerender-defer-reads.md +39 -0
  555. package/skills/web/react-best-practices/rules/rerender-dependencies.md +45 -0
  556. package/skills/web/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  557. package/skills/web/react-best-practices/rules/rerender-derived-state.md +29 -0
  558. package/skills/web/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  559. package/skills/web/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  560. package/skills/web/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  561. package/skills/web/react-best-practices/rules/rerender-memo.md +44 -0
  562. package/skills/web/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  563. package/skills/web/react-best-practices/rules/rerender-no-inline-components.md +82 -0
  564. package/skills/web/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  565. package/skills/web/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  566. package/skills/web/react-best-practices/rules/rerender-transitions.md +40 -0
  567. package/skills/web/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  568. package/skills/web/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  569. package/skills/web/react-best-practices/rules/server-after-nonblocking.md +73 -0
  570. package/skills/web/react-best-practices/rules/server-auth-actions.md +96 -0
  571. package/skills/web/react-best-practices/rules/server-cache-lru.md +41 -0
  572. package/skills/web/react-best-practices/rules/server-cache-react.md +76 -0
  573. package/skills/web/react-best-practices/rules/server-dedup-props.md +65 -0
  574. package/skills/web/react-best-practices/rules/server-hoist-static-io.md +149 -0
  575. package/skills/web/react-best-practices/rules/server-no-shared-module-state.md +50 -0
  576. package/skills/web/react-best-practices/rules/server-parallel-fetching.md +83 -0
  577. package/skills/web/react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  578. package/skills/web/react-best-practices/rules/server-serialization.md +38 -0
  579. package/skills/web/seo/SKILL.md +154 -0
  580. package/skills/web/web-design-guidelines/SKILL.md +39 -0
  581. package/skills/web/zap-scan-config/SKILL.md +444 -0
  582. package/skills/web/zap-scan-config/assets/.gitkeep +9 -0
  583. package/skills/web/zap-scan-config/assets/github_action.yml +207 -0
  584. package/skills/web/zap-scan-config/assets/gitlab_ci.yml +226 -0
  585. package/skills/web/zap-scan-config/assets/zap_automation.yaml +196 -0
  586. package/skills/web/zap-scan-config/assets/zap_context.xml +192 -0
  587. package/skills/web/zap-scan-config/references/EXAMPLE.md +40 -0
  588. package/skills/web/zap-scan-config/references/api_testing_guide.md +475 -0
  589. package/skills/web/zap-scan-config/references/authentication_guide.md +431 -0
  590. package/skills/web/zap-scan-config/references/false_positive_handling.md +427 -0
  591. package/skills/web/zap-scan-config/references/owasp_mapping.md +255 -0
  592. package/src/lrr/aggregator.ts +80 -0
  593. package/src/orchestrator/hooks/context-header.ts +95 -0
  594. package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
  595. package/src/orchestrator/hooks/token-accounting.ts +101 -0
  596. package/src/orchestrator/mcp/cycle-counter.ts +129 -0
  597. package/src/orchestrator/mcp/scribe.ts +283 -0
  598. package/src/orchestrator/mcp/state-save.ts +149 -0
  599. package/src/orchestrator/mcp/write-lease.ts +167 -0
  600. package/src/orchestrator/phase4-shared-context.ts +41 -0
  601. package/src/orchestrator/schemas/backward-edge.ts +46 -0
  602. package/agents/agentic-identity-trust.md +0 -121
  603. package/agents/data-consolidation-agent.md +0 -39
  604. package/agents/design-image-prompt-engineer.md +0 -105
  605. package/agents/design-visual-storyteller.md +0 -147
  606. package/agents/design-whimsy-injector.md +0 -89
  607. package/agents/engineering-autonomous-optimization-architect.md +0 -105
  608. package/agents/market-intel.md +0 -35
  609. package/agents/marketing-instagram-curator.md +0 -111
  610. package/agents/marketing-reddit-community-builder.md +0 -121
  611. package/agents/marketing-social-media-strategist.md +0 -74
  612. package/agents/marketing-tiktok-strategist.md +0 -123
  613. package/agents/marketing-twitter-engager.md +0 -124
  614. package/agents/marketing-wechat-official-account.md +0 -143
  615. package/agents/marketing-xiaohongshu-specialist.md +0 -136
  616. package/agents/marketing-zhihu-strategist.md +0 -160
  617. package/agents/product-behavioral-nudge-engine.md +0 -78
  618. package/agents/project-management-experiment-tracker.md +0 -102
  619. package/agents/report-distribution-agent.md +0 -43
  620. package/agents/risk-analysis.md +0 -45
  621. package/agents/sales-data-extraction-agent.md +0 -46
  622. package/agents/specialized-cultural-intelligence-strategist.md +0 -65
  623. package/agents/specialized-developer-advocate.md +0 -146
  624. package/agents/support-analytics-reporter.md +0 -133
  625. package/agents/support-executive-summary-generator.md +0 -64
  626. package/agents/support-finance-tracker.md +0 -145
  627. package/agents/support-legal-compliance-checker.md +0 -129
  628. package/agents/support-support-responder.md +0 -91
  629. package/agents/testing-accessibility-auditor.md +0 -110
  630. package/agents/testing-test-results-analyzer.md +0 -97
  631. package/agents/testing-tool-evaluator.md +0 -76
  632. package/agents/testing-workflow-optimizer.md +0 -99
  633. package/agents/user-research.md +0 -40
@@ -0,0 +1,605 @@
1
+ ---
2
+ name: swiftui-design-principles
3
+ description: Design principles for building polished, native-feeling SwiftUI apps and widgets. Use this skill when creating or modifying SwiftUI views, iOS widgets (WidgetKit), or any native Apple UI. Ensures proper spacing, typography, colors, and widget implementations that look and feel like quality apps rather than AI-generated slop.
4
+ license: MIT
5
+ metadata:
6
+ author: arjitj2
7
+ version: "1.1.1"
8
+ ---
9
+
10
+ This skill encodes design principles derived from comparing polished, production-quality SwiftUI apps against poorly-built ones. The patterns here represent what separates an app that feels "right" from one where the margins, spacing, and text sizes just look "off."
11
+
12
+ Apply these principles whenever building or modifying SwiftUI interfaces, WidgetKit widgets, or any native Apple UI.
13
+
14
+ ## Core Philosophy
15
+
16
+ **Restraint over decoration.** Every pixel must earn its place. A polished app uses fewer colors, fewer font sizes, fewer spacing values, and fewer words — but uses them consistently. Over-engineering visual elements (custom gradients, decorative borders, bespoke dividers) creates visual noise. Native components and system colors create harmony.
17
+
18
+ **Attention is scarce.** Keep UI copy shorter than you think it needs to be. Prefer one clear headline and one compact supporting block over repeated explanation in the title, subtitle, body, and footer. If a screen needs rationale, put it in one purposeful place instead of scattering it across the page.
19
+
20
+ ---
21
+
22
+ ## 1. Spacing System: Use a Consistent Grid
23
+
24
+ **CRITICAL**: Use spacing values from a base-4/base-8 grid. Never use arbitrary values.
25
+
26
+ ### Allowed spacing values
27
+ ```
28
+ 4, 8, 12, 16, 20, 24, 32, 40, 48
29
+ ```
30
+
31
+ ### Bad (arbitrary values that create visual dissonance)
32
+ ```swift
33
+ // WRONG - these numbers have no relationship to each other
34
+ .padding(.bottom, 26)
35
+ .padding(.bottom, 34)
36
+ .padding(.bottom, 36)
37
+ HStack(spacing: 18)
38
+ .padding(14)
39
+ ```
40
+
41
+ ### Good (values from a consistent grid)
42
+ ```swift
43
+ // RIGHT - predictable rhythm the eye can follow
44
+ .padding(.horizontal, 20)
45
+ .padding(.top, 8)
46
+ Spacer().frame(height: 32)
47
+ HStack(spacing: 4) // or 8, 12, 16
48
+ .padding(.vertical, 12)
49
+ .padding(.horizontal, 16)
50
+ ```
51
+
52
+ ### Standard padding assignments
53
+ - **Outer content padding**: 16-20pt horizontal
54
+ - **Between major sections**: 24-32pt vertical
55
+ - **Within grouped components**: 4-12pt
56
+ - **Card/row internal padding**: 12-16pt vertical, 16pt horizontal
57
+
58
+ ---
59
+
60
+ ## 2. Typography: Hierarchy Through Weight, Not Just Size
61
+
62
+ ### The principle
63
+ Use **fewer font sizes** with **clear weight differentiation**. Lighter weights at larger sizes; medium/regular at smaller sizes. This creates sophistication rather than visual chaos.
64
+
65
+ ### Recommended type scale (for a data-focused app)
66
+ | Role | Size | Weight | Notes |
67
+ |------|------|--------|-------|
68
+ | Hero number | 36-42pt | `.light` | Large but visually light -- elegant, not heavy |
69
+ | Secondary stat | 20-24pt | `.light` | Same weight family as hero, smaller |
70
+ | Body / toggle label | 15pt | `.regular` | Standard iOS body size |
71
+ | Section header (uppercase) | 11pt | `.medium` | With tracking/letter-spacing |
72
+ | Caption / subtitle | 11-13pt | `.regular` | Secondary information |
73
+
74
+ ### Bad (too many sizes, inconsistent weights)
75
+ ```swift
76
+ // WRONG - 7 different sizes with no clear system
77
+ .font(.system(size: 60, weight: .ultraLight)) // hero
78
+ .font(.system(size: 44, weight: .regular)) // stat (too close to hero)
79
+ .font(.system(size: 31, weight: .ultraLight)) // percent symbol (odd ratio)
80
+ .font(.system(size: 18, weight: .regular)) // label (too big for a toggle)
81
+ .font(.system(size: 14, weight: .regular)) // header
82
+ .font(.system(size: 13, weight: .regular)) // another header
83
+ .font(.system(size: 12, weight: .regular)) // button (too small to read)
84
+ ```
85
+
86
+ ### Good (clear hierarchy, fewer sizes)
87
+ ```swift
88
+ // RIGHT - 5 sizes, clear purpose for each
89
+ .font(.system(size: 42, weight: .light, design: .monospaced)) // hero
90
+ .font(.system(size: 24, weight: .light, design: .monospaced)) // stat value
91
+ .font(.system(size: 15, weight: .regular, design: .monospaced)) // body
92
+ .font(.system(size: 14, weight: .regular, design: .monospaced)) // secondary
93
+ .font(.system(size: 11, weight: .medium, design: .monospaced)) // label
94
+ ```
95
+
96
+ ### Font design consistency
97
+ Pick ONE font design and use it everywhere -- app AND widgets:
98
+ ```swift
99
+ // If using monospaced, use it everywhere
100
+ design: .monospaced // app views, widgets, lock screen -- all of them
101
+
102
+ // NEVER mix designs between app and widgets
103
+ // BAD: .monospaced in app, .rounded in lock screen widget
104
+ ```
105
+
106
+ ### Letter spacing (tracking)
107
+ Use at most 2 values, and only on uppercase labels:
108
+ ```swift
109
+ .tracking(1.5) // section labels: "NOTIFICATIONS", "DAY", "LEFT"
110
+ .tracking(3) // navigation/toolbar titles
111
+ ```
112
+
113
+ **Never use 3+ different tracking values** like `kerning(4)`, `kerning(4.5)`, `kerning(5)` -- the differences are imperceptible but the inconsistency registers subconsciously.
114
+
115
+ ### Numeric formatting for identifiers
116
+ Years and other fixed identifiers should not be locale-grouped.
117
+ ```swift
118
+ // RIGHT - stable, non-grouped identifier text
119
+ Text(String(year)) // "2026"
120
+ Text(year, format: .number.grouping(.never))
121
+
122
+ // WRONG - locale grouping can render "2,026"
123
+ Text("\(year)")
124
+ ```
125
+
126
+ ---
127
+
128
+ ## 3. Colors: System Semantic Colors Over Hardcoded Values
129
+
130
+ ### The principle
131
+ Use SwiftUI's semantic color system. It automatically handles light/dark mode, accessibility, and looks native. Hardcoded colors with manual opacity values create maintenance nightmares and look artificial.
132
+
133
+ ### Bad (hardcoded white with a dozen opacity values)
134
+ ```swift
135
+ // WRONG - impossible to maintain, doesn't adapt to light mode
136
+ Color.black.ignoresSafeArea() // forced dark
137
+ Color.white.opacity(0.08) // ring background
138
+ Color.white.opacity(0.09) // divider
139
+ Color.white.opacity(0.3) // year text
140
+ Color.white.opacity(0.32) // stat label
141
+ Color.white.opacity(0.42) // percent symbol
142
+ Color.white.opacity(0.44) // toggle tint
143
+ Color.white.opacity(0.72) // button text
144
+ Color.white.opacity(0.88) // toggle label
145
+ Color.white.opacity(0.9) // stat value
146
+ Color.white.opacity(0.94) // ring fill
147
+ ```
148
+
149
+ ### Good (semantic system colors)
150
+ ```swift
151
+ // RIGHT - adapts automatically, looks native, easy to maintain
152
+ Color(.systemBackground) // main background
153
+ Color(.secondarySystemBackground) // card/group backgrounds
154
+ Color(.separator) // dividers (with optional opacity)
155
+ Color.primary // primary text and UI elements
156
+ .foregroundStyle(.secondary) // secondary text
157
+ .foregroundStyle(.tertiary) // labels, captions
158
+ ```
159
+
160
+ ### When you do need opacity
161
+ Limit to 2-3 values with clear purposes:
162
+ ```swift
163
+ .opacity(0.15) // subtle background strokes
164
+ .opacity(0.3) // separator lines
165
+ // That's it. If you need more, you're probably hardcoding what semantic colors handle.
166
+ ```
167
+
168
+ ---
169
+
170
+ ## 4. Component Sizing: Proportional, Not Oversized
171
+
172
+ ### Progress rings / circular indicators
173
+ ```swift
174
+ // App main view: 200x200 with thin stroke
175
+ .frame(width: 200, height: 200)
176
+ Circle().stroke(..., lineWidth: 3)
177
+
178
+ // Widget (systemSmall): 90x90, same stroke
179
+ .frame(width: 90, height: 90)
180
+ Circle().stroke(..., lineWidth: 3)
181
+
182
+ // WRONG: oversized ring with thick inconsistent strokes
183
+ .frame(width: 260, height: 260) // too large, dominates screen
184
+ Circle().stroke(..., lineWidth: 9) // background
185
+ Circle().stroke(..., lineWidth: 8) // fill -- WHY different from background?
186
+ ```
187
+
188
+ ### Stroke width consistency
189
+ **Always use the same lineWidth for background and foreground strokes of the same element:**
190
+ ```swift
191
+ // RIGHT
192
+ Circle().stroke(background, lineWidth: 3)
193
+ Circle().trim(from: 0, to: fraction).stroke(fill, lineWidth: 3)
194
+
195
+ // WRONG - creates visual misalignment
196
+ Circle().stroke(background, lineWidth: 9)
197
+ Circle().trim(from: 0, to: fraction).stroke(fill, lineWidth: 8)
198
+ ```
199
+
200
+ ### List rows and toggle rows
201
+ ```swift
202
+ // RIGHT - natural sizing with proper padding
203
+ Toggle(isOn: $value) {
204
+ Text(title)
205
+ .font(.system(size: 15, weight: .regular, design: .monospaced))
206
+ }
207
+ .padding(.horizontal, 16)
208
+ .padding(.vertical, 12)
209
+
210
+ // WRONG - fixed oversized height
211
+ HStack {
212
+ Text(label)
213
+ .font(.system(size: 18)) // too big for a toggle label
214
+ Spacer()
215
+ Toggle("", isOn: $isOn)
216
+ .labelsHidden() // why hide the label? Use Toggle properly
217
+ }
218
+ .frame(height: 70) // way too tall
219
+ ```
220
+
221
+ ---
222
+
223
+ ## 5. Grouped Content & Cards: Use System Patterns
224
+
225
+ ### Bad (over-engineered custom card)
226
+ ```swift
227
+ // WRONG - custom gradient, overlay border, huge corner radius
228
+ VStack { ... }
229
+ .padding(.vertical, 4) // too tight
230
+ .background(
231
+ RoundedRectangle(cornerRadius: 22) // too round
232
+ .fill(LinearGradient( // unnecessary gradient
233
+ colors: [Color(white: 0.10), Color(white: 0.085)],
234
+ startPoint: .topLeading, endPoint: .bottomTrailing
235
+ ))
236
+ )
237
+ .overlay(
238
+ RoundedRectangle(cornerRadius: 22)
239
+ .stroke(Color.white.opacity(0.08), lineWidth: 1) // decorative border
240
+ )
241
+ ```
242
+
243
+ ### Good (native grouped style)
244
+ ```swift
245
+ // RIGHT - simple, native, works in light and dark mode
246
+ VStack(spacing: 0) {
247
+ row1
248
+ Divider().padding(.leading, 16)
249
+ row2
250
+ Divider().padding(.leading, 16)
251
+ row3
252
+ }
253
+ .background(Color(.secondarySystemBackground))
254
+ .clipShape(.rect(cornerRadius: 10))
255
+ ```
256
+
257
+ ### Key rules for grouped content
258
+ - **Corner radius**: 10pt for cards/groups (matches iOS system style). Never 22pt+.
259
+ - **Dividers**: Use the system `Divider()` with `.padding(.leading, 16)` for iOS-standard inset. Never build custom divider structs.
260
+ - **Card padding**: 12-16pt vertical, 16pt horizontal. Never 4pt vertical.
261
+ - **Background**: `Color(.secondarySystemBackground)` -- never custom gradients for standard cards.
262
+
263
+ ---
264
+
265
+ ## 6. Navigation: Use NavigationStack
266
+
267
+ ```swift
268
+ // RIGHT - proper navigation with minimal toolbar
269
+ NavigationStack {
270
+ ScrollView {
271
+ content
272
+ }
273
+ .toolbar {
274
+ ToolbarItem(placement: .principal) {
275
+ Text("Title")
276
+ .font(.system(size: 13, weight: .medium, design: .monospaced))
277
+ .tracking(3)
278
+ .foregroundStyle(.tertiary)
279
+ }
280
+ }
281
+ .navigationBarTitleDisplayMode(.inline)
282
+ }
283
+
284
+ // WRONG - no navigation structure, just a ZStack
285
+ ZStack {
286
+ Color.black.ignoresSafeArea()
287
+ ScrollView {
288
+ VStack {
289
+ Text("2026").font(...) // manually placed "title"
290
+ content
291
+ }
292
+ }
293
+ }
294
+ ```
295
+
296
+ ---
297
+
298
+ ## 7. WidgetKit: Use Native Components
299
+
300
+ ### Circular lock screen widget
301
+ ```swift
302
+ // RIGHT - use Gauge, it's purpose-built for this
303
+ Gauge(value: entry.fraction) {
304
+ Text("")
305
+ } currentValueLabel: {
306
+ Text("\(Int(entry.percentage))%")
307
+ .font(.system(size: 12, weight: .medium, design: .monospaced))
308
+ }
309
+ .gaugeStyle(.accessoryCircular)
310
+ .containerBackground(.fill.tertiary, for: .widget)
311
+
312
+ // WRONG - manual circle drawing for lock screen
313
+ ZStack {
314
+ Circle().stroke(Color.primary.opacity(0.18), lineWidth: 4)
315
+ Circle().trim(from: 0, to: progress).stroke(...)
316
+ Text(percentText)
317
+ .font(.system(size: 14, weight: .bold, design: .rounded)) // wrong font design!
318
+ }
319
+ ```
320
+
321
+ ### Rectangular lock screen widget
322
+ ```swift
323
+ // RIGHT - use Gauge with linearCapacity
324
+ VStack(alignment: .leading, spacing: 4) {
325
+ HStack {
326
+ Text(year).font(.system(size: 13, weight: .semibold, design: .monospaced))
327
+ Spacer()
328
+ Text(percentage).font(.system(size: 13, weight: .medium, design: .monospaced))
329
+ .foregroundStyle(.secondary)
330
+ }
331
+ Gauge(value: fraction) { Text("") }
332
+ .gaugeStyle(.linearCapacity)
333
+ .tint(.primary)
334
+ HStack {
335
+ Spacer()
336
+ Text("\(dayOfYear)/\(totalDays)")
337
+ .font(.system(size: 11, weight: .regular, design: .monospaced))
338
+ .foregroundStyle(.secondary)
339
+ }
340
+ }
341
+ .containerBackground(.fill.tertiary, for: .widget)
342
+
343
+ // WRONG - custom GeometryReader progress bar
344
+ GeometryReader { proxy in
345
+ ZStack(alignment: .leading) {
346
+ RoundedRectangle(cornerRadius: 2).fill(Color.primary.opacity(0.16))
347
+ RoundedRectangle(cornerRadius: 2).fill(Color.primary)
348
+ .frame(width: max(2, proxy.size.width * progress))
349
+ }
350
+ }
351
+ .frame(height: 6)
352
+ ```
353
+
354
+ ### Widget background
355
+ ```swift
356
+ // RIGHT
357
+ .containerBackground(.fill.tertiary, for: .widget)
358
+
359
+ // WRONG - hardcoded color
360
+ .containerBackground(.black, for: .widget)
361
+ ```
362
+
363
+ ### Widget family coverage
364
+ Support all relevant families -- don't skip common ones:
365
+ ```swift
366
+ .supportedFamilies([
367
+ .accessoryCircular, // lock screen circle
368
+ .accessoryRectangular, // lock screen rectangle
369
+ .accessoryInline, // lock screen inline text
370
+ .systemSmall, // home screen small
371
+ .systemMedium, // home screen medium
372
+ .systemLarge, // home screen large
373
+ ])
374
+ ```
375
+
376
+ ### Cross-family visual consistency
377
+ Medium and large home widgets should share the same structural layout:
378
+ - Header: year on the left, percentage on the right
379
+ - Middle: progress bar
380
+ - Footer: `day/total` right aligned
381
+
382
+ Do not re-invent hierarchy per family unless there is a hard size constraint.
383
+
384
+ Always include explicit internal padding on home widgets to avoid clipping near rounded edges:
385
+ ```swift
386
+ .padding(.horizontal, 12)
387
+ .padding(.vertical, 12)
388
+ ```
389
+
390
+ ### Widget memory budget (hard limit)
391
+ Widget extensions have a tight memory budget (commonly around 30 MB). Dense visualizations can be killed by `EXC_RESOURCE` if built from too many nested views.
392
+
393
+ ```swift
394
+ // RIGHT - draw dense dot grids in one pass
395
+ Canvas { context, size in
396
+ // draw 365/366 dots here
397
+ }
398
+
399
+ // WRONG - hundreds of nested subviews (high memory overhead)
400
+ LazyVGrid(columns: columns) {
401
+ ForEach(1...366, id: \.self) { day in
402
+ ZStack { Circle(); partialFillLayer }
403
+ }
404
+ }
405
+ ```
406
+
407
+ ### Timeline refresh (match data granularity)
408
+ ```swift
409
+ // RIGHT - refresh at midnight for day-level data
410
+ let tomorrow = calendar.startOfDay(for: calendar.date(byAdding: .day, value: 1, to: now)!)
411
+ Timeline(entries: [entry], policy: .after(tomorrow))
412
+
413
+ // RIGHT - periodic refresh for time-of-day dependent percentages/partial fills
414
+ let refresh = Calendar.current.date(byAdding: .minute, value: 15, to: now)!
415
+ Timeline(entries: [entry], policy: .after(refresh))
416
+
417
+ // WRONG - minute-level refresh for static daily data
418
+ let tooFrequent = Calendar.current.date(byAdding: .minute, value: 1, to: now)!
419
+ Timeline(entries: [entry], policy: .after(tooFrequent))
420
+ ```
421
+
422
+ ---
423
+
424
+ ## 8. Interactive Elements
425
+
426
+ ### Toggles
427
+ ```swift
428
+ // RIGHT - use Toggle with its built-in label, tint with a single accent color
429
+ Toggle(isOn: $value) {
430
+ Text(title)
431
+ .font(.system(size: 15, weight: .regular, design: .monospaced))
432
+ }
433
+ .tint(.green)
434
+
435
+ // WRONG - hidden label with manual HStack layout
436
+ HStack {
437
+ Text(label).font(.system(size: 18))
438
+ Spacer()
439
+ Toggle("", isOn: $isOn)
440
+ .labelsHidden()
441
+ .tint(Color.white.opacity(0.44)) // low-contrast tint
442
+ }
443
+ ```
444
+
445
+ ### Mutually exclusive options
446
+ When options are exclusive (e.g. daily/weekly/monthly cadence), use one selected value, not three independent toggles.
447
+
448
+ ```swift
449
+ // RIGHT - single source of truth
450
+ enum Cadence: String, CaseIterable { case daily, weekly, monthly }
451
+ @State private var cadence: Cadence = .daily
452
+
453
+ ForEach(Cadence.allCases, id: \.rawValue) { option in
454
+ Button {
455
+ cadence = option
456
+ } label: {
457
+ HStack {
458
+ Image(systemName: cadence == option ? "checkmark.circle.fill" : "circle")
459
+ Text(option.rawValue.capitalized)
460
+ }
461
+ }
462
+ }
463
+
464
+ // RIGHT - one preview action when content is shared
465
+ Button("Preview") { sendPreview() }
466
+
467
+ // WRONG - independent toggles allow contradictory state
468
+ Toggle("Daily", isOn: $daily)
469
+ Toggle("Weekly", isOn: $weekly)
470
+ Toggle("Monthly", isOn: $monthly)
471
+ ```
472
+
473
+ ### Animated transitions for changing numbers
474
+ ```swift
475
+ // Add to any Text that displays a changing numeric value
476
+ Text(String(format: "%.2f", percentage))
477
+ .contentTransition(.numericText())
478
+ ```
479
+
480
+ ---
481
+
482
+ ## 9. Interactive Editors: Centralize Geometry and State
483
+
484
+ Interactive editors (collages, crops, canvases, media framing tools, layout pickers) need stricter state and layout discipline than ordinary forms.
485
+
486
+ ### Presentation state
487
+ Present editor flows from payload state, not from a separate `Bool` plus independently-managed data.
488
+
489
+ ```swift
490
+ // RIGHT - presentation only happens when payload exists
491
+ @State private var activeCropRequest: CropRequest?
492
+
493
+ .sheet(item: $activeCropRequest) { request in
494
+ CropEditor(request: request)
495
+ }
496
+
497
+ // WRONG - the sheet can open before the backing data is ready
498
+ @State private var showCropEditor = false
499
+ @State private var selectedImage: UIImage?
500
+
501
+ .sheet(isPresented: $showCropEditor) {
502
+ if let selectedImage { CropEditor(image: selectedImage) }
503
+ }
504
+ ```
505
+
506
+ ### Shared geometry model
507
+ If the app previews pan/zoom/crop/layout live and later exports the result, use one shared geometry model for both preview and render.
508
+
509
+ ```swift
510
+ // RIGHT - one source of truth for bounds and transforms
511
+ let normalized = EditorGeometry.normalizedAdjustment(adjustment, imageSize: image.size, slotSize: slotSize)
512
+ let drawRect = EditorGeometry.drawRect(for: image.size, in: slotRect, adjustment: adjustment)
513
+
514
+ // WRONG - preview and export each invent their own math
515
+ let previewOffset = ...
516
+ let exportOffset = ...
517
+ ```
518
+
519
+ If a user can zoom out enough to reveal background, that must be an intentional part of the shared geometry model, not an editor-only exception.
520
+
521
+ ### Gesture coordination
522
+ Tap, long-press-drag, and pinch are not independent features. In SwiftUI they compete unless you model their relationship explicitly.
523
+
524
+ - Use a single interaction state for the active tile/card/canvas item.
525
+ - Decide which gesture has priority and which ones should run simultaneously.
526
+ - Reset temporary gesture state deliberately when selection changes.
527
+ - Prefer one coherent state machine over scattered booleans tied to individual gestures.
528
+
529
+ ### Fixed editor layout
530
+ If the screen must not scroll, budget vertical space top-down using a few named regions:
531
+ - header
532
+ - canvas stage
533
+ - settings region
534
+ - bottom toolbar
535
+
536
+ Keep that sizing math in one place. Don't let each subview invent its own height.
537
+
538
+ ### Custom headers and safe areas
539
+ If you replace the system navigation bar with a custom header:
540
+ - Be explicit about whether the parent already respects the safe area.
541
+ - Do not add `safeAreaInsets.top` reflexively; double-counting it creates obvious dead space.
542
+ - Keep custom headers compact. They should feel like navigation chrome, not a full content section.
543
+
544
+ ### Settings surfaces
545
+ When an editor has several configuration modes (`Layout`, `Border`, `Ratio`, `Background`, etc.), show one active settings surface at a time instead of stacking every control on screen.
546
+
547
+ This keeps the canvas visually dominant and makes each control group easier to understand.
548
+
549
+ ---
550
+
551
+ ## 10. Data Model: Share Between App and Widgets
552
+
553
+ ```swift
554
+ // RIGHT - one model used everywhere
555
+ struct YearProgress {
556
+ // shared calculation logic
557
+ static func current() -> YearProgress { ... }
558
+ }
559
+ // Used by both ContentView and widget TimelineProvider
560
+
561
+ // If percentage is shown as live progress, include time-of-day in shared math
562
+ let dayProgress = elapsedInCurrentDay / totalSecondsInDay
563
+ let elapsedDays = Double(dayOfYear - 1) + dayProgress
564
+ let fraction = elapsedDays / Double(totalDays)
565
+
566
+ // WRONG - separate snapshot structs with duplicated date math
567
+ struct YearProgressSnapshot { ... } // in app
568
+ struct YearProgressWidgetSnapshot { ... } // in widget extension (duplicated!)
569
+ ```
570
+
571
+ ---
572
+
573
+ ## 11. Quick Checklist
574
+
575
+ Before shipping any SwiftUI view, verify:
576
+
577
+ - [ ] All spacing values come from the grid (4, 8, 12, 16, 20, 24, 32)
578
+ - [ ] Font sizes limited to 5 or fewer distinct values
579
+ - [ ] One font design used consistently (including widgets)
580
+ - [ ] Colors use semantic system colors, not hardcoded values with opacity
581
+ - [ ] Background and foreground strokes use the same lineWidth
582
+ - [ ] Cards use `Color(.secondarySystemBackground)` with 10pt corner radius
583
+ - [ ] Dividers use system `Divider()` with leading padding
584
+ - [ ] Toggle rows use Toggle's built-in label (not `.labelsHidden()`)
585
+ - [ ] Lock screen widgets use `Gauge` (not manual circle drawing)
586
+ - [ ] Widget background uses `.containerBackground(.fill.tertiary, for: .widget)`
587
+ - [ ] Year/identifier text avoids locale grouping when grouping is not desired
588
+ - [ ] Tracking/kerning limited to 2 values max
589
+ - [ ] NavigationStack is used (not bare ZStack)
590
+ - [ ] Timeline refresh rate matches data granularity (midnight vs periodic)
591
+ - [ ] Large/dense widget visuals use `Canvas` or similarly lightweight rendering
592
+ - [ ] Medium and large widget families share consistent hierarchy and internal padding
593
+ - [ ] Exclusive choices use a single selected value (not multiple toggles)
594
+ - [ ] Percentages include time-of-day when UI implies live progress
595
+ - [ ] No `minimumScaleFactor` hacks -- fix the layout instead
596
+ - [ ] Interactive editors present from payload state, not `Bool` + separate data
597
+ - [ ] Preview and export share the same geometry model for pan/zoom/crop/layout
598
+ - [ ] Custom headers do not double-count top safe-area inset
599
+ - [ ] No-scroll editor screens budget height through a centralized layout model
600
+ - [ ] Multi-mode editors show one focused settings surface instead of every control at once
601
+
602
+
603
+ ---
604
+
605
+ Vendored from: https://github.com/Dimillian/swiftui-design-principles
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": "1.1.0",
3
+ "author": "arjitj2",
4
+ "date": "February 2026",
5
+ "abstract": "Design principles for building polished, native-feeling SwiftUI apps and WidgetKit widgets. Derived from comparing production-quality iOS apps against poorly-built ones. Covers spacing systems, typography hierarchy, semantic colors, component sizing, WidgetKit patterns, and a pre-ship checklist.",
6
+ "references": [
7
+ "https://developer.apple.com/documentation/swiftui",
8
+ "https://developer.apple.com/documentation/widgetkit"
9
+ ]
10
+ }