lsd-pi 1.1.10 → 1.2.1

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 (545) hide show
  1. package/dist/onboarding.js +3 -3
  2. package/dist/resources/agents/scout.md +6 -0
  3. package/dist/resources/extensions/slash-commands/index.js +2 -0
  4. package/dist/resources/extensions/slash-commands/init.js +47 -0
  5. package/dist/resources/extensions/slash-commands/plan.js +238 -51
  6. package/dist/resources/extensions/slash-commands/tools.js +14 -27
  7. package/dist/resources/extensions/subagent/index.js +14 -11
  8. package/dist/resources/extensions/usage/index.js +87 -36
  9. package/package.json +1 -1
  10. package/packages/pi-ai/dist/models.generated.d.ts +222 -1
  11. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  12. package/packages/pi-ai/dist/models.generated.js +227 -6
  13. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  14. package/packages/pi-ai/dist/models.test.js +28 -0
  15. package/packages/pi-ai/dist/models.test.js.map +1 -1
  16. package/packages/pi-ai/scripts/generate-models.ts +10 -100
  17. package/packages/pi-ai/src/models.generated.ts +227 -6
  18. package/packages/pi-ai/src/models.test.ts +30 -0
  19. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
  20. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  21. package/packages/pi-coding-agent/dist/core/agent-session.js +39 -5
  22. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  23. package/packages/pi-coding-agent/dist/core/resource-loader-lsd-md.test.js +59 -7
  24. package/packages/pi-coding-agent/dist/core/resource-loader-lsd-md.test.js.map +1 -1
  25. package/packages/pi-coding-agent/dist/core/resource-loader.js +4 -4
  26. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  27. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -1
  28. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  29. package/packages/pi-coding-agent/dist/core/sdk.js +18 -7
  30. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  31. package/packages/pi-coding-agent/dist/core/sdk.test.js +80 -0
  32. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  33. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +12 -5
  34. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  35. package/packages/pi-coding-agent/dist/core/settings-manager.js +23 -9
  36. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  37. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  38. package/packages/pi-coding-agent/dist/core/system-prompt.js +10 -0
  39. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  40. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +8 -4
  41. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  42. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +32 -5
  43. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  44. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  45. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +8 -0
  46. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  47. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  48. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +34 -25
  49. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  50. package/packages/pi-coding-agent/dist/tests/path-display.test.js +13 -0
  51. package/packages/pi-coding-agent/dist/tests/path-display.test.js.map +1 -1
  52. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.d.ts +2 -0
  53. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.d.ts.map +1 -0
  54. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.js +15 -0
  55. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.js.map +1 -0
  56. package/packages/pi-coding-agent/package.json +1 -1
  57. package/packages/pi-coding-agent/src/core/agent-session.ts +48 -5
  58. package/packages/pi-coding-agent/src/core/resource-loader-lsd-md.test.ts +67 -7
  59. package/packages/pi-coding-agent/src/core/resource-loader.ts +4 -4
  60. package/packages/pi-coding-agent/src/core/sdk.test.ts +100 -0
  61. package/packages/pi-coding-agent/src/core/sdk.ts +23 -8
  62. package/packages/pi-coding-agent/src/core/settings-manager.ts +36 -15
  63. package/packages/pi-coding-agent/src/core/system-prompt.ts +26 -0
  64. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +41 -10
  65. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +11 -0
  66. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +43 -27
  67. package/packages/pi-coding-agent/src/tests/path-display.test.ts +14 -0
  68. package/pkg/package.json +1 -1
  69. package/src/resources/agents/scout.md +6 -0
  70. package/src/resources/extensions/slash-commands/index.ts +2 -0
  71. package/src/resources/extensions/slash-commands/init.ts +55 -0
  72. package/src/resources/extensions/slash-commands/plan.ts +279 -53
  73. package/src/resources/extensions/slash-commands/tools.ts +15 -29
  74. package/src/resources/extensions/subagent/index.ts +14 -11
  75. package/src/resources/extensions/usage/index.ts +92 -38
  76. package/dist/resources/agents/javascript-pro.md +0 -280
  77. package/dist/resources/agents/researcher.md +0 -29
  78. package/dist/resources/agents/teams-builder.md +0 -74
  79. package/dist/resources/agents/teams-reviewer.md +0 -113
  80. package/dist/resources/agents/typescript-pro.md +0 -255
  81. package/dist/resources/skills/accessibility/SKILL.md +0 -522
  82. package/dist/resources/skills/accessibility/references/WCAG.md +0 -162
  83. package/dist/resources/skills/core-web-vitals/SKILL.md +0 -441
  84. package/dist/resources/skills/core-web-vitals/references/LCP.md +0 -208
  85. package/dist/resources/skills/frontend-design/SKILL.md +0 -45
  86. package/dist/resources/skills/make-interfaces-feel-better/SKILL.md +0 -122
  87. package/dist/resources/skills/make-interfaces-feel-better/animations.md +0 -379
  88. package/dist/resources/skills/make-interfaces-feel-better/performance.md +0 -88
  89. package/dist/resources/skills/make-interfaces-feel-better/surfaces.md +0 -247
  90. package/dist/resources/skills/make-interfaces-feel-better/typography.md +0 -123
  91. package/dist/resources/skills/react-best-practices/README.md +0 -123
  92. package/dist/resources/skills/react-best-practices/SKILL.md +0 -136
  93. package/dist/resources/skills/react-best-practices/metadata.json +0 -15
  94. package/dist/resources/skills/react-best-practices/rules/_sections.md +0 -46
  95. package/dist/resources/skills/react-best-practices/rules/_template.md +0 -28
  96. package/dist/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  97. package/dist/resources/skills/react-best-practices/rules/advanced-init-once.md +0 -42
  98. package/dist/resources/skills/react-best-practices/rules/advanced-use-latest.md +0 -39
  99. package/dist/resources/skills/react-best-practices/rules/async-api-routes.md +0 -38
  100. package/dist/resources/skills/react-best-practices/rules/async-defer-await.md +0 -80
  101. package/dist/resources/skills/react-best-practices/rules/async-dependencies.md +0 -51
  102. package/dist/resources/skills/react-best-practices/rules/async-parallel.md +0 -28
  103. package/dist/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  104. package/dist/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  105. package/dist/resources/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  106. package/dist/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  107. package/dist/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  108. package/dist/resources/skills/react-best-practices/rules/bundle-preload.md +0 -50
  109. package/dist/resources/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  110. package/dist/resources/skills/react-best-practices/rules/client-localstorage-schema.md +0 -71
  111. package/dist/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +0 -48
  112. package/dist/resources/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  113. package/dist/resources/skills/react-best-practices/rules/js-batch-dom-css.md +0 -107
  114. package/dist/resources/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  115. package/dist/resources/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  116. package/dist/resources/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  117. package/dist/resources/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  118. package/dist/resources/skills/react-best-practices/rules/js-early-exit.md +0 -50
  119. package/dist/resources/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  120. package/dist/resources/skills/react-best-practices/rules/js-index-maps.md +0 -37
  121. package/dist/resources/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  122. package/dist/resources/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  123. package/dist/resources/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  124. package/dist/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  125. package/dist/resources/skills/react-best-practices/rules/rendering-activity.md +0 -26
  126. package/dist/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  127. package/dist/resources/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  128. package/dist/resources/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  129. package/dist/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  130. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  131. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  132. package/dist/resources/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  133. package/dist/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  134. package/dist/resources/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  135. package/dist/resources/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  136. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  137. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  138. package/dist/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  139. package/dist/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  140. package/dist/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  141. package/dist/resources/skills/react-best-practices/rules/rerender-memo.md +0 -44
  142. package/dist/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  143. package/dist/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  144. package/dist/resources/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  145. package/dist/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  146. package/dist/resources/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  147. package/dist/resources/skills/react-best-practices/rules/server-auth-actions.md +0 -96
  148. package/dist/resources/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  149. package/dist/resources/skills/react-best-practices/rules/server-cache-react.md +0 -76
  150. package/dist/resources/skills/react-best-practices/rules/server-dedup-props.md +0 -65
  151. package/dist/resources/skills/react-best-practices/rules/server-parallel-fetching.md +0 -83
  152. package/dist/resources/skills/react-best-practices/rules/server-serialization.md +0 -38
  153. package/dist/resources/skills/userinterface-wiki/SKILL.md +0 -253
  154. package/dist/resources/skills/userinterface-wiki/rules/_sections.md +0 -66
  155. package/dist/resources/skills/userinterface-wiki/rules/_template.md +0 -24
  156. package/dist/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +0 -30
  157. package/dist/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +0 -30
  158. package/dist/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +0 -36
  159. package/dist/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +0 -28
  160. package/dist/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +0 -19
  161. package/dist/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +0 -18
  162. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +0 -21
  163. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +0 -28
  164. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +0 -27
  165. package/dist/resources/skills/userinterface-wiki/rules/container-callback-ref.md +0 -31
  166. package/dist/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +0 -25
  167. package/dist/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +0 -13
  168. package/dist/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +0 -25
  169. package/dist/resources/skills/userinterface-wiki/rules/container-transition-delay.md +0 -21
  170. package/dist/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +0 -35
  171. package/dist/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +0 -48
  172. package/dist/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +0 -25
  173. package/dist/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +0 -28
  174. package/dist/resources/skills/userinterface-wiki/rules/context-reuse-single.md +0 -30
  175. package/dist/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +0 -25
  176. package/dist/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +0 -26
  177. package/dist/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +0 -22
  178. package/dist/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +0 -21
  179. package/dist/resources/skills/userinterface-wiki/rules/duration-press-hover.md +0 -21
  180. package/dist/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +0 -21
  181. package/dist/resources/skills/userinterface-wiki/rules/duration-small-state.md +0 -15
  182. package/dist/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +0 -21
  183. package/dist/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +0 -21
  184. package/dist/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +0 -27
  185. package/dist/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +0 -21
  186. package/dist/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +0 -22
  187. package/dist/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +0 -22
  188. package/dist/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +0 -15
  189. package/dist/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +0 -21
  190. package/dist/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +0 -21
  191. package/dist/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +0 -22
  192. package/dist/resources/skills/userinterface-wiki/rules/exit-key-required.md +0 -29
  193. package/dist/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +0 -29
  194. package/dist/resources/skills/userinterface-wiki/rules/exit-prop-required.md +0 -33
  195. package/dist/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +0 -27
  196. package/dist/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +0 -21
  197. package/dist/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +0 -34
  198. package/dist/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +0 -26
  199. package/dist/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +0 -25
  200. package/dist/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +0 -29
  201. package/dist/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +0 -25
  202. package/dist/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +0 -21
  203. package/dist/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +0 -23
  204. package/dist/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +0 -33
  205. package/dist/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +0 -29
  206. package/dist/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +0 -28
  207. package/dist/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +0 -23
  208. package/dist/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +0 -21
  209. package/dist/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +0 -32
  210. package/dist/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +0 -33
  211. package/dist/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +0 -27
  212. package/dist/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +0 -27
  213. package/dist/resources/skills/userinterface-wiki/rules/native-selection-styling.md +0 -18
  214. package/dist/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +0 -25
  215. package/dist/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +0 -41
  216. package/dist/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +0 -25
  217. package/dist/resources/skills/userinterface-wiki/rules/none-high-frequency.md +0 -29
  218. package/dist/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +0 -32
  219. package/dist/resources/skills/userinterface-wiki/rules/param-click-duration.md +0 -21
  220. package/dist/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +0 -21
  221. package/dist/resources/skills/userinterface-wiki/rules/param-q-value-range.md +0 -21
  222. package/dist/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +0 -21
  223. package/dist/resources/skills/userinterface-wiki/rules/physics-active-state.md +0 -23
  224. package/dist/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +0 -22
  225. package/dist/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +0 -23
  226. package/dist/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +0 -22
  227. package/dist/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +0 -27
  228. package/dist/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +0 -19
  229. package/dist/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +0 -22
  230. package/dist/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +0 -34
  231. package/dist/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +0 -32
  232. package/dist/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +0 -13
  233. package/dist/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +0 -31
  234. package/dist/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +0 -31
  235. package/dist/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +0 -37
  236. package/dist/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +0 -28
  237. package/dist/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +0 -27
  238. package/dist/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +0 -31
  239. package/dist/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +0 -28
  240. package/dist/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +0 -32
  241. package/dist/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +0 -33
  242. package/dist/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +0 -37
  243. package/dist/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +0 -27
  244. package/dist/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +0 -27
  245. package/dist/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +0 -29
  246. package/dist/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +0 -28
  247. package/dist/resources/skills/userinterface-wiki/rules/staging-dim-background.md +0 -22
  248. package/dist/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +0 -24
  249. package/dist/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +0 -22
  250. package/dist/resources/skills/userinterface-wiki/rules/timing-consistent.md +0 -24
  251. package/dist/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +0 -22
  252. package/dist/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +0 -22
  253. package/dist/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +0 -28
  254. package/dist/resources/skills/userinterface-wiki/rules/transition-name-required.md +0 -27
  255. package/dist/resources/skills/userinterface-wiki/rules/transition-name-unique.md +0 -24
  256. package/dist/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +0 -32
  257. package/dist/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +0 -24
  258. package/dist/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +0 -18
  259. package/dist/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +0 -15
  260. package/dist/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +0 -28
  261. package/dist/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +0 -24
  262. package/dist/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +0 -28
  263. package/dist/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +0 -18
  264. package/dist/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +0 -21
  265. package/dist/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +0 -15
  266. package/dist/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +0 -25
  267. package/dist/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +0 -15
  268. package/dist/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +0 -17
  269. package/dist/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +0 -21
  270. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +0 -21
  271. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +0 -16
  272. package/dist/resources/skills/userinterface-wiki/rules/type-underline-offset.md +0 -25
  273. package/dist/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +0 -23
  274. package/dist/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +0 -32
  275. package/dist/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +0 -49
  276. package/dist/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +0 -50
  277. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +0 -29
  278. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +0 -30
  279. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +0 -32
  280. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +0 -31
  281. package/dist/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +0 -33
  282. package/dist/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +0 -45
  283. package/dist/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +0 -37
  284. package/dist/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +0 -23
  285. package/dist/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +0 -36
  286. package/dist/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +0 -35
  287. package/dist/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +0 -45
  288. package/dist/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +0 -33
  289. package/dist/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +0 -41
  290. package/dist/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +0 -38
  291. package/dist/resources/skills/userinterface-wiki/rules/ux-serial-position.md +0 -31
  292. package/dist/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +0 -35
  293. package/dist/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +0 -28
  294. package/dist/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +0 -43
  295. package/dist/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +0 -29
  296. package/dist/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +0 -36
  297. package/dist/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +0 -49
  298. package/dist/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +0 -25
  299. package/dist/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +0 -49
  300. package/dist/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +0 -40
  301. package/dist/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +0 -35
  302. package/dist/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +0 -30
  303. package/dist/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +0 -25
  304. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +0 -25
  305. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +0 -23
  306. package/dist/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +0 -29
  307. package/dist/resources/skills/userinterface-wiki/rules/weight-match-action.md +0 -32
  308. package/dist/resources/skills/web-design-guidelines/SKILL.md +0 -39
  309. package/dist/resources/skills/web-quality-audit/SKILL.md +0 -168
  310. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -91
  311. package/src/resources/agents/javascript-pro.md +0 -280
  312. package/src/resources/agents/researcher.md +0 -29
  313. package/src/resources/agents/teams-builder.md +0 -74
  314. package/src/resources/agents/teams-reviewer.md +0 -113
  315. package/src/resources/agents/typescript-pro.md +0 -255
  316. package/src/resources/skills/accessibility/SKILL.md +0 -522
  317. package/src/resources/skills/accessibility/references/WCAG.md +0 -162
  318. package/src/resources/skills/core-web-vitals/SKILL.md +0 -441
  319. package/src/resources/skills/core-web-vitals/references/LCP.md +0 -208
  320. package/src/resources/skills/frontend-design/SKILL.md +0 -45
  321. package/src/resources/skills/make-interfaces-feel-better/SKILL.md +0 -122
  322. package/src/resources/skills/make-interfaces-feel-better/animations.md +0 -379
  323. package/src/resources/skills/make-interfaces-feel-better/performance.md +0 -88
  324. package/src/resources/skills/make-interfaces-feel-better/surfaces.md +0 -247
  325. package/src/resources/skills/make-interfaces-feel-better/typography.md +0 -123
  326. package/src/resources/skills/react-best-practices/README.md +0 -123
  327. package/src/resources/skills/react-best-practices/SKILL.md +0 -136
  328. package/src/resources/skills/react-best-practices/metadata.json +0 -15
  329. package/src/resources/skills/react-best-practices/rules/_sections.md +0 -46
  330. package/src/resources/skills/react-best-practices/rules/_template.md +0 -28
  331. package/src/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  332. package/src/resources/skills/react-best-practices/rules/advanced-init-once.md +0 -42
  333. package/src/resources/skills/react-best-practices/rules/advanced-use-latest.md +0 -39
  334. package/src/resources/skills/react-best-practices/rules/async-api-routes.md +0 -38
  335. package/src/resources/skills/react-best-practices/rules/async-defer-await.md +0 -80
  336. package/src/resources/skills/react-best-practices/rules/async-dependencies.md +0 -51
  337. package/src/resources/skills/react-best-practices/rules/async-parallel.md +0 -28
  338. package/src/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  339. package/src/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  340. package/src/resources/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  341. package/src/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  342. package/src/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  343. package/src/resources/skills/react-best-practices/rules/bundle-preload.md +0 -50
  344. package/src/resources/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  345. package/src/resources/skills/react-best-practices/rules/client-localstorage-schema.md +0 -71
  346. package/src/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +0 -48
  347. package/src/resources/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  348. package/src/resources/skills/react-best-practices/rules/js-batch-dom-css.md +0 -107
  349. package/src/resources/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  350. package/src/resources/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  351. package/src/resources/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  352. package/src/resources/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  353. package/src/resources/skills/react-best-practices/rules/js-early-exit.md +0 -50
  354. package/src/resources/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  355. package/src/resources/skills/react-best-practices/rules/js-index-maps.md +0 -37
  356. package/src/resources/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  357. package/src/resources/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  358. package/src/resources/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  359. package/src/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  360. package/src/resources/skills/react-best-practices/rules/rendering-activity.md +0 -26
  361. package/src/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  362. package/src/resources/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  363. package/src/resources/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  364. package/src/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  365. package/src/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  366. package/src/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  367. package/src/resources/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  368. package/src/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  369. package/src/resources/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  370. package/src/resources/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  371. package/src/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  372. package/src/resources/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  373. package/src/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  374. package/src/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  375. package/src/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  376. package/src/resources/skills/react-best-practices/rules/rerender-memo.md +0 -44
  377. package/src/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  378. package/src/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  379. package/src/resources/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  380. package/src/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  381. package/src/resources/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  382. package/src/resources/skills/react-best-practices/rules/server-auth-actions.md +0 -96
  383. package/src/resources/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  384. package/src/resources/skills/react-best-practices/rules/server-cache-react.md +0 -76
  385. package/src/resources/skills/react-best-practices/rules/server-dedup-props.md +0 -65
  386. package/src/resources/skills/react-best-practices/rules/server-parallel-fetching.md +0 -83
  387. package/src/resources/skills/react-best-practices/rules/server-serialization.md +0 -38
  388. package/src/resources/skills/userinterface-wiki/SKILL.md +0 -253
  389. package/src/resources/skills/userinterface-wiki/rules/_sections.md +0 -66
  390. package/src/resources/skills/userinterface-wiki/rules/_template.md +0 -24
  391. package/src/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +0 -30
  392. package/src/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +0 -30
  393. package/src/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +0 -36
  394. package/src/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +0 -28
  395. package/src/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +0 -19
  396. package/src/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +0 -18
  397. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +0 -21
  398. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +0 -28
  399. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +0 -27
  400. package/src/resources/skills/userinterface-wiki/rules/container-callback-ref.md +0 -31
  401. package/src/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +0 -25
  402. package/src/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +0 -13
  403. package/src/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +0 -25
  404. package/src/resources/skills/userinterface-wiki/rules/container-transition-delay.md +0 -21
  405. package/src/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +0 -35
  406. package/src/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +0 -48
  407. package/src/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +0 -25
  408. package/src/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +0 -28
  409. package/src/resources/skills/userinterface-wiki/rules/context-reuse-single.md +0 -30
  410. package/src/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +0 -25
  411. package/src/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +0 -26
  412. package/src/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +0 -22
  413. package/src/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +0 -21
  414. package/src/resources/skills/userinterface-wiki/rules/duration-press-hover.md +0 -21
  415. package/src/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +0 -21
  416. package/src/resources/skills/userinterface-wiki/rules/duration-small-state.md +0 -15
  417. package/src/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +0 -21
  418. package/src/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +0 -21
  419. package/src/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +0 -27
  420. package/src/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +0 -21
  421. package/src/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +0 -22
  422. package/src/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +0 -22
  423. package/src/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +0 -15
  424. package/src/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +0 -21
  425. package/src/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +0 -21
  426. package/src/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +0 -22
  427. package/src/resources/skills/userinterface-wiki/rules/exit-key-required.md +0 -29
  428. package/src/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +0 -29
  429. package/src/resources/skills/userinterface-wiki/rules/exit-prop-required.md +0 -33
  430. package/src/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +0 -27
  431. package/src/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +0 -21
  432. package/src/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +0 -34
  433. package/src/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +0 -26
  434. package/src/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +0 -25
  435. package/src/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +0 -29
  436. package/src/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +0 -25
  437. package/src/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +0 -21
  438. package/src/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +0 -23
  439. package/src/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +0 -33
  440. package/src/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +0 -29
  441. package/src/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +0 -28
  442. package/src/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +0 -23
  443. package/src/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +0 -21
  444. package/src/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +0 -32
  445. package/src/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +0 -33
  446. package/src/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +0 -27
  447. package/src/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +0 -27
  448. package/src/resources/skills/userinterface-wiki/rules/native-selection-styling.md +0 -18
  449. package/src/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +0 -25
  450. package/src/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +0 -41
  451. package/src/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +0 -25
  452. package/src/resources/skills/userinterface-wiki/rules/none-high-frequency.md +0 -29
  453. package/src/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +0 -32
  454. package/src/resources/skills/userinterface-wiki/rules/param-click-duration.md +0 -21
  455. package/src/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +0 -21
  456. package/src/resources/skills/userinterface-wiki/rules/param-q-value-range.md +0 -21
  457. package/src/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +0 -21
  458. package/src/resources/skills/userinterface-wiki/rules/physics-active-state.md +0 -23
  459. package/src/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +0 -22
  460. package/src/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +0 -23
  461. package/src/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +0 -22
  462. package/src/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +0 -27
  463. package/src/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +0 -19
  464. package/src/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +0 -22
  465. package/src/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +0 -34
  466. package/src/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +0 -32
  467. package/src/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +0 -13
  468. package/src/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +0 -31
  469. package/src/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +0 -31
  470. package/src/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +0 -37
  471. package/src/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +0 -28
  472. package/src/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +0 -27
  473. package/src/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +0 -31
  474. package/src/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +0 -28
  475. package/src/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +0 -32
  476. package/src/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +0 -33
  477. package/src/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +0 -37
  478. package/src/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +0 -27
  479. package/src/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +0 -27
  480. package/src/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +0 -29
  481. package/src/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +0 -28
  482. package/src/resources/skills/userinterface-wiki/rules/staging-dim-background.md +0 -22
  483. package/src/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +0 -24
  484. package/src/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +0 -22
  485. package/src/resources/skills/userinterface-wiki/rules/timing-consistent.md +0 -24
  486. package/src/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +0 -22
  487. package/src/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +0 -22
  488. package/src/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +0 -28
  489. package/src/resources/skills/userinterface-wiki/rules/transition-name-required.md +0 -27
  490. package/src/resources/skills/userinterface-wiki/rules/transition-name-unique.md +0 -24
  491. package/src/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +0 -32
  492. package/src/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +0 -24
  493. package/src/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +0 -18
  494. package/src/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +0 -15
  495. package/src/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +0 -28
  496. package/src/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +0 -24
  497. package/src/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +0 -28
  498. package/src/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +0 -18
  499. package/src/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +0 -21
  500. package/src/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +0 -15
  501. package/src/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +0 -25
  502. package/src/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +0 -15
  503. package/src/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +0 -17
  504. package/src/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +0 -21
  505. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +0 -21
  506. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +0 -16
  507. package/src/resources/skills/userinterface-wiki/rules/type-underline-offset.md +0 -25
  508. package/src/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +0 -23
  509. package/src/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +0 -32
  510. package/src/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +0 -49
  511. package/src/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +0 -50
  512. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +0 -29
  513. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +0 -30
  514. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +0 -32
  515. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +0 -31
  516. package/src/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +0 -33
  517. package/src/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +0 -45
  518. package/src/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +0 -37
  519. package/src/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +0 -23
  520. package/src/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +0 -36
  521. package/src/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +0 -35
  522. package/src/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +0 -45
  523. package/src/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +0 -33
  524. package/src/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +0 -41
  525. package/src/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +0 -38
  526. package/src/resources/skills/userinterface-wiki/rules/ux-serial-position.md +0 -31
  527. package/src/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +0 -35
  528. package/src/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +0 -28
  529. package/src/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +0 -43
  530. package/src/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +0 -29
  531. package/src/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +0 -36
  532. package/src/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +0 -49
  533. package/src/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +0 -25
  534. package/src/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +0 -49
  535. package/src/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +0 -40
  536. package/src/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +0 -35
  537. package/src/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +0 -30
  538. package/src/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +0 -25
  539. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +0 -25
  540. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +0 -23
  541. package/src/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +0 -29
  542. package/src/resources/skills/userinterface-wiki/rules/weight-match-action.md +0 -32
  543. package/src/resources/skills/web-design-guidelines/SKILL.md +0 -39
  544. package/src/resources/skills/web-quality-audit/SKILL.md +0 -168
  545. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -91
@@ -1,441 +0,0 @@
1
- ---
2
- name: core-web-vitals
3
- description: Optimize Core Web Vitals (LCP, INP, CLS) for better page experience and search ranking. Use when asked to "improve Core Web Vitals", "fix LCP", "reduce CLS", "optimize INP", "page experience optimization", or "fix layout shifts".
4
- license: MIT
5
- metadata:
6
- author: web-quality-skills
7
- version: "1.0"
8
- ---
9
-
10
- # Core Web Vitals optimization
11
-
12
- Targeted optimization for the three Core Web Vitals metrics that affect Google Search ranking and user experience.
13
-
14
- ## The three metrics
15
-
16
- | Metric | Measures | Good | Needs work | Poor |
17
- |--------|----------|------|------------|------|
18
- | **LCP** | Loading | ≤ 2.5s | 2.5s – 4s | > 4s |
19
- | **INP** | Interactivity | ≤ 200ms | 200ms – 500ms | > 500ms |
20
- | **CLS** | Visual Stability | ≤ 0.1 | 0.1 – 0.25 | > 0.25 |
21
-
22
- Google measures at the **75th percentile** — 75% of page visits must meet "Good" thresholds.
23
-
24
- ---
25
-
26
- ## LCP: Largest Contentful Paint
27
-
28
- LCP measures when the largest visible content element renders. Usually this is:
29
- - Hero image or video
30
- - Large text block
31
- - Background image
32
- - `<svg>` element
33
-
34
- ### Common LCP issues
35
-
36
- **1. Slow server response (TTFB > 800ms)**
37
- ```
38
- Fix: CDN, caching, optimized backend, edge rendering
39
- ```
40
-
41
- **2. Render-blocking resources**
42
- ```html
43
- <!-- ❌ Blocks rendering -->
44
- <link rel="stylesheet" href="/all-styles.css">
45
-
46
- <!-- ✅ Critical CSS inlined, rest deferred -->
47
- <style>/* Critical above-fold CSS */</style>
48
- <link rel="preload" href="/styles.css" as="style"
49
- onload="this.onload=null;this.rel='stylesheet'">
50
- ```
51
-
52
- **3. Slow resource load times**
53
- ```html
54
- <!-- ❌ No hints, discovered late -->
55
- <img src="/hero.jpg" alt="Hero">
56
-
57
- <!-- ✅ Preloaded with high priority -->
58
- <link rel="preload" href="/hero.webp" as="image" fetchpriority="high">
59
- <img src="/hero.webp" alt="Hero" fetchpriority="high">
60
- ```
61
-
62
- **4. Client-side rendering delays**
63
- ```javascript
64
- // ❌ Content loads after JavaScript
65
- useEffect(() => {
66
- fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
67
- }, []);
68
-
69
- // ✅ Server-side or static rendering
70
- // Use SSR, SSG, or streaming to send HTML with content
71
- export async function getServerSideProps() {
72
- const heroText = await fetchHeroText();
73
- return { props: { heroText } };
74
- }
75
- ```
76
-
77
- ### LCP optimization checklist
78
-
79
- ```markdown
80
- - [ ] TTFB < 800ms (use CDN, edge caching)
81
- - [ ] LCP image preloaded with fetchpriority="high"
82
- - [ ] LCP image optimized (WebP/AVIF, correct size)
83
- - [ ] Critical CSS inlined (< 14KB)
84
- - [ ] No render-blocking JavaScript in <head>
85
- - [ ] Fonts don't block text rendering (font-display: swap)
86
- - [ ] LCP element in initial HTML (not JS-rendered)
87
- ```
88
-
89
- ### LCP element identification
90
- ```javascript
91
- // Find your LCP element
92
- new PerformanceObserver((list) => {
93
- const entries = list.getEntries();
94
- const lastEntry = entries[entries.length - 1];
95
- console.log('LCP element:', lastEntry.element);
96
- console.log('LCP time:', lastEntry.startTime);
97
- }).observe({ type: 'largest-contentful-paint', buffered: true });
98
- ```
99
-
100
- ---
101
-
102
- ## INP: Interaction to Next Paint
103
-
104
- INP measures responsiveness across ALL interactions (clicks, taps, key presses) during a page visit. It reports the worst interaction (at 98th percentile for high-traffic pages).
105
-
106
- ### INP breakdown
107
-
108
- Total INP = **Input Delay** + **Processing Time** + **Presentation Delay**
109
-
110
- | Phase | Target | Optimization |
111
- |-------|--------|--------------|
112
- | Input Delay | < 50ms | Reduce main thread blocking |
113
- | Processing | < 100ms | Optimize event handlers |
114
- | Presentation | < 50ms | Minimize rendering work |
115
-
116
- ### Common INP issues
117
-
118
- **1. Long tasks blocking main thread**
119
- ```javascript
120
- // ❌ Long synchronous task
121
- function processLargeArray(items) {
122
- items.forEach(item => expensiveOperation(item));
123
- }
124
-
125
- // ✅ Break into chunks with yielding
126
- async function processLargeArray(items) {
127
- const CHUNK_SIZE = 100;
128
- for (let i = 0; i < items.length; i += CHUNK_SIZE) {
129
- const chunk = items.slice(i, i + CHUNK_SIZE);
130
- chunk.forEach(item => expensiveOperation(item));
131
-
132
- // Yield to main thread
133
- await new Promise(r => setTimeout(r, 0));
134
- // Or use scheduler.yield() when available
135
- }
136
- }
137
- ```
138
-
139
- **2. Heavy event handlers**
140
- ```javascript
141
- // ❌ All work in handler
142
- button.addEventListener('click', () => {
143
- // Heavy computation
144
- const result = calculateComplexThing();
145
- // DOM updates
146
- updateUI(result);
147
- // Analytics
148
- trackEvent('click');
149
- });
150
-
151
- // ✅ Prioritize visual feedback
152
- button.addEventListener('click', () => {
153
- // Immediate visual feedback
154
- button.classList.add('loading');
155
-
156
- // Defer non-critical work
157
- requestAnimationFrame(() => {
158
- const result = calculateComplexThing();
159
- updateUI(result);
160
- });
161
-
162
- // Use requestIdleCallback for analytics
163
- requestIdleCallback(() => trackEvent('click'));
164
- });
165
- ```
166
-
167
- **3. Third-party scripts**
168
- ```javascript
169
- // ❌ Eagerly loaded, blocks interactions
170
- <script src="https://heavy-widget.com/widget.js"></script>
171
-
172
- // ✅ Lazy loaded on interaction or visibility
173
- const loadWidget = () => {
174
- import('https://heavy-widget.com/widget.js')
175
- .then(widget => widget.init());
176
- };
177
- button.addEventListener('click', loadWidget, { once: true });
178
- ```
179
-
180
- **4. Excessive re-renders (React/Vue)**
181
- ```javascript
182
- // ❌ Re-renders entire tree
183
- function App() {
184
- const [count, setCount] = useState(0);
185
- return (
186
- <div>
187
- <Counter count={count} />
188
- <ExpensiveComponent /> {/* Re-renders on every count change */}
189
- </div>
190
- );
191
- }
192
-
193
- // ✅ Memoized expensive components
194
- const MemoizedExpensive = React.memo(ExpensiveComponent);
195
-
196
- function App() {
197
- const [count, setCount] = useState(0);
198
- return (
199
- <div>
200
- <Counter count={count} />
201
- <MemoizedExpensive />
202
- </div>
203
- );
204
- }
205
- ```
206
-
207
- ### INP optimization checklist
208
-
209
- ```markdown
210
- - [ ] No tasks > 50ms on main thread
211
- - [ ] Event handlers complete quickly (< 100ms)
212
- - [ ] Visual feedback provided immediately
213
- - [ ] Heavy work deferred with requestIdleCallback
214
- - [ ] Third-party scripts don't block interactions
215
- - [ ] Debounced input handlers where appropriate
216
- - [ ] Web Workers for CPU-intensive operations
217
- ```
218
-
219
- ### INP debugging
220
- ```javascript
221
- // Identify slow interactions
222
- new PerformanceObserver((list) => {
223
- for (const entry of list.getEntries()) {
224
- if (entry.duration > 200) {
225
- console.warn('Slow interaction:', {
226
- type: entry.name,
227
- duration: entry.duration,
228
- processingStart: entry.processingStart,
229
- processingEnd: entry.processingEnd,
230
- target: entry.target
231
- });
232
- }
233
- }
234
- }).observe({ type: 'event', buffered: true, durationThreshold: 16 });
235
- ```
236
-
237
- ---
238
-
239
- ## CLS: Cumulative Layout Shift
240
-
241
- CLS measures unexpected layout shifts. A shift occurs when a visible element changes position between frames without user interaction.
242
-
243
- **CLS Formula:** `impact fraction × distance fraction`
244
-
245
- ### Common CLS causes
246
-
247
- **1. Images without dimensions**
248
- ```html
249
- <!-- ❌ Causes layout shift when loaded -->
250
- <img src="photo.jpg" alt="Photo">
251
-
252
- <!-- ✅ Space reserved -->
253
- <img src="photo.jpg" alt="Photo" width="800" height="600">
254
-
255
- <!-- ✅ Or use aspect-ratio -->
256
- <img src="photo.jpg" alt="Photo" style="aspect-ratio: 4/3; width: 100%;">
257
- ```
258
-
259
- **2. Ads, embeds, and iframes**
260
- ```html
261
- <!-- ❌ Unknown size until loaded -->
262
- <iframe src="https://ad-network.com/ad"></iframe>
263
-
264
- <!-- ✅ Reserve space with min-height -->
265
- <div style="min-height: 250px;">
266
- <iframe src="https://ad-network.com/ad" height="250"></iframe>
267
- </div>
268
-
269
- <!-- ✅ Or use aspect-ratio container -->
270
- <div style="aspect-ratio: 16/9;">
271
- <iframe src="https://youtube.com/embed/..."
272
- style="width: 100%; height: 100%;"></iframe>
273
- </div>
274
- ```
275
-
276
- **3. Dynamically injected content**
277
- ```javascript
278
- // ❌ Inserts content above viewport
279
- notifications.prepend(newNotification);
280
-
281
- // ✅ Insert below viewport or use transform
282
- const insertBelow = viewport.bottom < newNotification.top;
283
- if (insertBelow) {
284
- notifications.prepend(newNotification);
285
- } else {
286
- // Animate in without shifting
287
- newNotification.style.transform = 'translateY(-100%)';
288
- notifications.prepend(newNotification);
289
- requestAnimationFrame(() => {
290
- newNotification.style.transform = '';
291
- });
292
- }
293
- ```
294
-
295
- **4. Web fonts causing FOUT**
296
- ```css
297
- /* ❌ Font swap shifts text */
298
- @font-face {
299
- font-family: 'Custom';
300
- src: url('custom.woff2') format('woff2');
301
- }
302
-
303
- /* ✅ Optional font (no shift if slow) */
304
- @font-face {
305
- font-family: 'Custom';
306
- src: url('custom.woff2') format('woff2');
307
- font-display: optional;
308
- }
309
-
310
- /* ✅ Or match fallback metrics */
311
- @font-face {
312
- font-family: 'Custom';
313
- src: url('custom.woff2') format('woff2');
314
- font-display: swap;
315
- size-adjust: 105%; /* Match fallback size */
316
- ascent-override: 95%;
317
- descent-override: 20%;
318
- }
319
- ```
320
-
321
- **5. Animations triggering layout**
322
- ```css
323
- /* ❌ Animates layout properties */
324
- .animate {
325
- transition: height 0.3s, width 0.3s;
326
- }
327
-
328
- /* ✅ Use transform instead */
329
- .animate {
330
- transition: transform 0.3s;
331
- }
332
- .animate.expanded {
333
- transform: scale(1.2);
334
- }
335
- ```
336
-
337
- ### CLS optimization checklist
338
-
339
- ```markdown
340
- - [ ] All images have width/height or aspect-ratio
341
- - [ ] All videos/embeds have reserved space
342
- - [ ] Ads have min-height containers
343
- - [ ] Fonts use font-display: optional or matched metrics
344
- - [ ] Dynamic content inserted below viewport
345
- - [ ] Animations use transform/opacity only
346
- - [ ] No content injected above existing content
347
- ```
348
-
349
- ### CLS debugging
350
- ```javascript
351
- // Track layout shifts
352
- new PerformanceObserver((list) => {
353
- for (const entry of list.getEntries()) {
354
- if (!entry.hadRecentInput) {
355
- console.log('Layout shift:', entry.value);
356
- entry.sources?.forEach(source => {
357
- console.log(' Shifted element:', source.node);
358
- console.log(' Previous rect:', source.previousRect);
359
- console.log(' Current rect:', source.currentRect);
360
- });
361
- }
362
- }
363
- }).observe({ type: 'layout-shift', buffered: true });
364
- ```
365
-
366
- ---
367
-
368
- ## Measurement tools
369
-
370
- ### Lab testing
371
- - **Chrome DevTools** → Performance panel, Lighthouse
372
- - **WebPageTest** → Detailed waterfall, filmstrip
373
- - **Lighthouse CLI** → `npx lighthouse <url>`
374
-
375
- ### Field data (real users)
376
- - **Chrome User Experience Report (CrUX)** → BigQuery or API
377
- - **Search Console** → Core Web Vitals report
378
- - **web-vitals library** → Send to your analytics
379
-
380
- ```javascript
381
- import {onLCP, onINP, onCLS} from 'web-vitals';
382
-
383
- function sendToAnalytics({name, value, rating}) {
384
- gtag('event', name, {
385
- event_category: 'Web Vitals',
386
- value: Math.round(name === 'CLS' ? value * 1000 : value),
387
- event_label: rating
388
- });
389
- }
390
-
391
- onLCP(sendToAnalytics);
392
- onINP(sendToAnalytics);
393
- onCLS(sendToAnalytics);
394
- ```
395
-
396
- ---
397
-
398
- ## Framework quick fixes
399
-
400
- ### Next.js
401
- ```jsx
402
- // LCP: Use next/image with priority
403
- import Image from 'next/image';
404
- <Image src="/hero.jpg" priority fill alt="Hero" />
405
-
406
- // INP: Use dynamic imports
407
- const HeavyComponent = dynamic(() => import('./Heavy'), { ssr: false });
408
-
409
- // CLS: Image component handles dimensions automatically
410
- ```
411
-
412
- ### React
413
- ```jsx
414
- // LCP: Preload in head
415
- <link rel="preload" href="/hero.jpg" as="image" fetchpriority="high" />
416
-
417
- // INP: Memoize and useTransition
418
- const [isPending, startTransition] = useTransition();
419
- startTransition(() => setExpensiveState(newValue));
420
-
421
- // CLS: Always specify dimensions in img tags
422
- ```
423
-
424
- ### Vue/Nuxt
425
- ```vue
426
- <!-- LCP: Use nuxt/image with preload -->
427
- <NuxtImg src="/hero.jpg" preload loading="eager" />
428
-
429
- <!-- INP: Use async components -->
430
- <component :is="() => import('./Heavy.vue')" />
431
-
432
- <!-- CLS: Use aspect-ratio CSS -->
433
- <img :style="{ aspectRatio: '16/9' }" />
434
- ```
435
-
436
- ## References
437
-
438
- - [web.dev LCP](https://web.dev/articles/lcp)
439
- - [web.dev INP](https://web.dev/articles/inp)
440
- - [web.dev CLS](https://web.dev/articles/cls)
441
- - [Code Optimizer skill](../code-optimizer/SKILL.md)
@@ -1,208 +0,0 @@
1
- # LCP optimization reference
2
-
3
- ## What is LCP?
4
-
5
- Largest Contentful Paint (LCP) measures when the largest content element in the viewport becomes visible. This is typically:
6
-
7
- - An `<img>` element
8
- - An `<image>` element inside `<svg>`
9
- - A `<video>` element with poster image
10
- - An element with a background image via `url()`
11
- - A block-level element containing text nodes
12
-
13
- ## LCP timeline
14
-
15
- ```
16
- [ Server Response ][ Resource Load ][ Render ]
17
- TTFB Download Paint
18
- └─────────────────────────────────────┘
19
- LCP Time
20
- ```
21
-
22
- ## Detailed optimizations
23
-
24
- ### 1. Server response time (TTFB)
25
-
26
- Target: < 800ms
27
-
28
- **Causes:**
29
- - Slow server/database queries
30
- - No CDN/edge caching
31
- - Inefficient backend code
32
- - Cold starts (serverless)
33
-
34
- **Solutions:**
35
- ```javascript
36
- // Use edge functions for dynamic content
37
- // Vercel example
38
- export const config = { runtime: 'edge' };
39
-
40
- // Use stale-while-revalidate caching
41
- // Cache-Control header
42
- res.setHeader('Cache-Control', 's-maxage=60, stale-while-revalidate=300');
43
- ```
44
-
45
- ### 2. Resource load time
46
-
47
- **For images:**
48
- ```html
49
- <!-- Preload LCP image -->
50
- <link rel="preload" as="image" href="/hero.webp"
51
- imagesrcset="/hero-400.webp 400w, /hero-800.webp 800w"
52
- imagesizes="100vw"
53
- fetchpriority="high">
54
-
55
- <!-- Modern format with fallback -->
56
- <picture>
57
- <source srcset="/hero.avif" type="image/avif">
58
- <source srcset="/hero.webp" type="image/webp">
59
- <img src="/hero.jpg" width="1200" height="600"
60
- fetchpriority="high" alt="Hero">
61
- </picture>
62
- ```
63
-
64
- **For text (web fonts):**
65
- ```css
66
- @font-face {
67
- font-family: 'Heading';
68
- src: url('/fonts/heading.woff2') format('woff2');
69
- font-display: swap; /* Show fallback immediately */
70
- }
71
- ```
72
-
73
- ### 3. Render blocking resources
74
-
75
- **Critical CSS pattern:**
76
- ```html
77
- <head>
78
- <!-- Inline critical CSS -->
79
- <style>
80
- /* Only above-fold styles, < 14KB */
81
- .hero { /* ... */ }
82
- .nav { /* ... */ }
83
- </style>
84
-
85
- <!-- Defer non-critical CSS -->
86
- <link rel="preload" href="/styles.css" as="style"
87
- onload="this.onload=null;this.rel='stylesheet'">
88
- </head>
89
- ```
90
-
91
- **Defer JavaScript:**
92
- ```html
93
- <!-- ❌ Blocks parsing -->
94
- <script src="/app.js"></script>
95
-
96
- <!-- ✅ Deferred (runs after HTML parsed) -->
97
- <script defer src="/app.js"></script>
98
-
99
- <!-- ✅ Module (deferred by default) -->
100
- <script type="module" src="/app.mjs"></script>
101
- ```
102
-
103
- ### 4. Client-side rendering
104
-
105
- **Problem:** Content not in initial HTML.
106
-
107
- **Solutions:**
108
-
109
- **Server-side rendering (SSR):**
110
- ```javascript
111
- // Next.js
112
- export async function getServerSideProps() {
113
- const data = await fetchHeroContent();
114
- return { props: { hero: data } };
115
- }
116
- ```
117
-
118
- **Static site generation (SSG):**
119
- ```javascript
120
- // Next.js
121
- export async function getStaticProps() {
122
- const data = await fetchHeroContent();
123
- return { props: { hero: data }, revalidate: 3600 };
124
- }
125
- ```
126
-
127
- **Streaming SSR:**
128
- ```jsx
129
- // React 18+
130
- import { Suspense } from 'react';
131
-
132
- function Page() {
133
- return (
134
- <Suspense fallback={<HeroSkeleton />}>
135
- <Hero />
136
- </Suspense>
137
- );
138
- }
139
- ```
140
-
141
- ## Framework-specific tips
142
-
143
- ### Next.js
144
- ```jsx
145
- import Image from 'next/image';
146
-
147
- // LCP image with priority
148
- <Image
149
- src="/hero.jpg"
150
- priority
151
- fill
152
- sizes="100vw"
153
- alt="Hero"
154
- />
155
- ```
156
-
157
- ### Nuxt
158
- ```vue
159
- <NuxtImg
160
- src="/hero.jpg"
161
- preload
162
- loading="eager"
163
- sizes="100vw"
164
- />
165
- ```
166
-
167
- ### Astro
168
- ```astro
169
- ---
170
- import { Image } from 'astro:assets';
171
- import hero from '../assets/hero.jpg';
172
- ---
173
- <Image
174
- src={hero}
175
- loading="eager"
176
- decoding="sync"
177
- alt="Hero"
178
- />
179
- ```
180
-
181
- ## Debugging LCP
182
-
183
- ```javascript
184
- // Identify LCP element
185
- new PerformanceObserver((entryList) => {
186
- const entries = entryList.getEntries();
187
- const lastEntry = entries[entries.length - 1];
188
-
189
- console.log('LCP:', {
190
- element: lastEntry.element,
191
- time: lastEntry.startTime,
192
- size: lastEntry.size,
193
- url: lastEntry.url,
194
- renderTime: lastEntry.renderTime,
195
- loadTime: lastEntry.loadTime
196
- });
197
- }).observe({ type: 'largest-contentful-paint', buffered: true });
198
- ```
199
-
200
- ## Common issues
201
-
202
- | Issue | Impact | Fix |
203
- |-------|--------|-----|
204
- | No preload for LCP image | +500-1000ms | Add `<link rel="preload">` |
205
- | Large unoptimized image | +300-800ms | Compress, use WebP/AVIF |
206
- | Render-blocking CSS | +200-500ms | Inline critical CSS |
207
- | Slow TTFB | +300-2000ms | CDN, edge caching |
208
- | Client-rendered content | +500-2000ms | SSR/SSG |
@@ -1,45 +0,0 @@
1
- ---
2
- name: frontend-design
3
- description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.
4
- license: Complete terms in LICENSE.txt
5
- ---
6
-
7
- This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
8
-
9
- The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
10
-
11
- ## Design Thinking
12
-
13
- Before coding, understand the context and commit to a BOLD aesthetic direction:
14
-
15
- - **Purpose**: What problem does this interface solve? Who uses it?
16
- - **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
17
- - **Constraints**: Technical requirements (framework, performance, accessibility).
18
- - **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
19
-
20
- **CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
21
-
22
- Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
23
-
24
- - Production-grade and functional
25
- - Visually striking and memorable
26
- - Cohesive with a clear aesthetic point-of-view
27
- - Meticulously refined in every detail
28
-
29
- ## Frontend Aesthetics Guidelines
30
-
31
- Focus on:
32
-
33
- - **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
34
- - **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
35
- - **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
36
- - **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
37
- - **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
38
-
39
- NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
40
-
41
- Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
42
-
43
- **IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
44
-
45
- Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.