@rune-kit/rune 2.10.0 → 2.11.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 (205) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +8 -6
  3. package/commands/rune.md +168 -168
  4. package/contexts/dev.md +34 -34
  5. package/contexts/research.md +43 -43
  6. package/contexts/review.md +55 -55
  7. package/extensions/ai-ml/PACK.md +88 -88
  8. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  9. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  10. package/extensions/ai-ml/skills/deep-research.md +146 -146
  11. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  12. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  13. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  14. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  15. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  16. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  17. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  18. package/extensions/analytics/PACK.md +92 -92
  19. package/extensions/analytics/skills/ab-testing.md +72 -72
  20. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  21. package/extensions/analytics/skills/data-validation.md +68 -68
  22. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  23. package/extensions/analytics/skills/sql-patterns.md +57 -57
  24. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  25. package/extensions/analytics/skills/tracking-setup.md +71 -71
  26. package/extensions/backend/PACK.md +104 -104
  27. package/extensions/backend/skills/api-patterns.md +84 -84
  28. package/extensions/backend/skills/async-pipeline.md +193 -193
  29. package/extensions/backend/skills/auth-patterns.md +97 -97
  30. package/extensions/backend/skills/background-jobs.md +133 -133
  31. package/extensions/backend/skills/caching-patterns.md +108 -108
  32. package/extensions/backend/skills/cli-generation.md +133 -133
  33. package/extensions/backend/skills/database-patterns.md +87 -87
  34. package/extensions/backend/skills/middleware-patterns.md +104 -104
  35. package/extensions/chrome-ext/PACK.md +93 -93
  36. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  37. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  38. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  39. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  40. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  41. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  42. package/extensions/content/PACK.md +96 -96
  43. package/extensions/content/skills/blog-patterns.md +88 -88
  44. package/extensions/content/skills/cms-integration.md +131 -131
  45. package/extensions/content/skills/content-scoring.md +107 -107
  46. package/extensions/content/skills/i18n.md +83 -83
  47. package/extensions/content/skills/mdx-authoring.md +137 -137
  48. package/extensions/content/skills/reference.md +1014 -1014
  49. package/extensions/content/skills/seo-patterns.md +67 -67
  50. package/extensions/content/skills/video-repurpose.md +153 -153
  51. package/extensions/devops/PACK.md +101 -101
  52. package/extensions/devops/skills/chaos-testing.md +67 -67
  53. package/extensions/devops/skills/ci-cd.md +75 -75
  54. package/extensions/devops/skills/docker.md +58 -58
  55. package/extensions/devops/skills/edge-serverless.md +163 -163
  56. package/extensions/devops/skills/infra-as-code.md +158 -158
  57. package/extensions/devops/skills/kubernetes.md +110 -110
  58. package/extensions/devops/skills/monitoring.md +57 -57
  59. package/extensions/devops/skills/server-setup.md +64 -64
  60. package/extensions/devops/skills/ssl-domain.md +42 -42
  61. package/extensions/ecommerce/PACK.md +116 -116
  62. package/extensions/ecommerce/skills/cart-system.md +79 -79
  63. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  64. package/extensions/ecommerce/skills/order-management.md +126 -126
  65. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  66. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  67. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  68. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  69. package/extensions/gamedev/PACK.md +142 -142
  70. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  71. package/extensions/gamedev/skills/audio-system.md +129 -129
  72. package/extensions/gamedev/skills/camera-system.md +87 -87
  73. package/extensions/gamedev/skills/ecs.md +98 -98
  74. package/extensions/gamedev/skills/game-loops.md +72 -72
  75. package/extensions/gamedev/skills/input-system.md +199 -199
  76. package/extensions/gamedev/skills/multiplayer.md +180 -180
  77. package/extensions/gamedev/skills/particles.md +105 -105
  78. package/extensions/gamedev/skills/physics-engine.md +89 -89
  79. package/extensions/gamedev/skills/scene-management.md +146 -146
  80. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  81. package/extensions/gamedev/skills/webgl.md +71 -71
  82. package/extensions/mobile/PACK.md +106 -106
  83. package/extensions/mobile/skills/app-store-connect.md +152 -152
  84. package/extensions/mobile/skills/app-store-prep.md +66 -66
  85. package/extensions/mobile/skills/deep-linking.md +109 -109
  86. package/extensions/mobile/skills/flutter.md +60 -60
  87. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  88. package/extensions/mobile/skills/native-bridge.md +66 -66
  89. package/extensions/mobile/skills/ota-updates.md +97 -97
  90. package/extensions/mobile/skills/push-notifications.md +111 -111
  91. package/extensions/mobile/skills/react-native.md +82 -82
  92. package/extensions/saas/PACK.md +116 -116
  93. package/extensions/saas/skills/billing-integration.md +200 -200
  94. package/extensions/saas/skills/feature-flags.md +130 -130
  95. package/extensions/saas/skills/multi-tenant.md +103 -103
  96. package/extensions/saas/skills/onboarding-flow.md +139 -139
  97. package/extensions/saas/skills/subscription-flow.md +95 -95
  98. package/extensions/saas/skills/team-management.md +144 -144
  99. package/extensions/security/PACK.md +99 -99
  100. package/extensions/security/skills/api-security.md +140 -140
  101. package/extensions/security/skills/compliance.md +68 -68
  102. package/extensions/security/skills/owasp-audit.md +64 -64
  103. package/extensions/security/skills/pentest-patterns.md +77 -77
  104. package/extensions/security/skills/secret-mgmt.md +65 -65
  105. package/extensions/security/skills/supply-chain.md +65 -65
  106. package/extensions/trading/PACK.md +80 -80
  107. package/extensions/trading/skills/chart-components.md +55 -55
  108. package/extensions/trading/skills/experiment-loop.md +125 -125
  109. package/extensions/trading/skills/fintech-patterns.md +47 -47
  110. package/extensions/trading/skills/indicator-library.md +58 -58
  111. package/extensions/trading/skills/quant-analysis.md +111 -111
  112. package/extensions/trading/skills/realtime-data.md +58 -58
  113. package/extensions/trading/skills/trade-logic.md +104 -104
  114. package/extensions/ui/PACK.md +130 -130
  115. package/extensions/ui/skills/a11y-audit.md +91 -91
  116. package/extensions/ui/skills/animation-patterns.md +127 -127
  117. package/extensions/ui/skills/component-patterns.md +100 -100
  118. package/extensions/ui/skills/design-decision.md +108 -108
  119. package/extensions/ui/skills/design-system.md +68 -68
  120. package/extensions/ui/skills/landing-patterns.md +155 -155
  121. package/extensions/ui/skills/palette-picker.md +173 -173
  122. package/extensions/ui/skills/react-health.md +90 -90
  123. package/extensions/ui/skills/type-system.md +125 -125
  124. package/extensions/ui/skills/web-vitals.md +153 -153
  125. package/extensions/zalo/PACK.md +145 -145
  126. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  127. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  128. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  129. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  130. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  131. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  132. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  133. package/hooks/auto-format/index.cjs +48 -48
  134. package/hooks/hooks.json +111 -111
  135. package/hooks/post-session-reflect/index.cjs +189 -189
  136. package/hooks/pre-compact/index.cjs +95 -95
  137. package/hooks/run-hook.cmd +1 -1
  138. package/hooks/secrets-scan/index.cjs +100 -100
  139. package/hooks/session-start/index.cjs +71 -71
  140. package/hooks/typecheck/index.cjs +65 -65
  141. package/package.json +63 -63
  142. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  143. package/references/ui-pro-max-data/charts.csv +26 -26
  144. package/references/ui-pro-max-data/colors.csv +161 -161
  145. package/references/ui-pro-max-data/styles.csv +68 -68
  146. package/references/ui-pro-max-data/typography.csv +74 -74
  147. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  148. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  149. package/skills/adversary/SKILL.md +283 -283
  150. package/skills/asset-creator/SKILL.md +157 -157
  151. package/skills/audit/SKILL.md +147 -2
  152. package/skills/autopsy/SKILL.md +335 -335
  153. package/skills/brainstorm/SKILL.md +342 -342
  154. package/skills/browser-pilot/SKILL.md +168 -168
  155. package/skills/constraint-check/SKILL.md +165 -165
  156. package/skills/context-engine/SKILL.md +404 -404
  157. package/skills/cook/SKILL.md +917 -863
  158. package/skills/db/SKILL.md +273 -273
  159. package/skills/debug/SKILL.md +465 -465
  160. package/skills/dependency-doctor/SKILL.md +265 -235
  161. package/skills/deploy/SKILL.md +274 -231
  162. package/skills/design/DESIGN-REFERENCE.md +365 -365
  163. package/skills/design/SKILL.md +589 -589
  164. package/skills/doc-processor/SKILL.md +254 -254
  165. package/skills/docs/SKILL.md +374 -374
  166. package/skills/docs-seeker/SKILL.md +177 -177
  167. package/skills/fix/SKILL.md +330 -330
  168. package/skills/git/SKILL.md +339 -339
  169. package/skills/hallucination-guard/SKILL.md +219 -219
  170. package/skills/incident/SKILL.md +254 -253
  171. package/skills/integrity-check/SKILL.md +169 -169
  172. package/skills/journal/SKILL.md +240 -240
  173. package/skills/launch/SKILL.md +344 -344
  174. package/skills/logic-guardian/SKILL.md +251 -251
  175. package/skills/marketing/SKILL.md +290 -289
  176. package/skills/mcp-builder/SKILL.md +425 -425
  177. package/skills/neural-memory/SKILL.md +362 -362
  178. package/skills/onboard/SKILL.md +404 -403
  179. package/skills/perf/SKILL.md +346 -346
  180. package/skills/plan/SKILL.md +433 -428
  181. package/skills/preflight/SKILL.md +415 -415
  182. package/skills/problem-solver/SKILL.md +380 -284
  183. package/skills/rescue/SKILL.md +474 -474
  184. package/skills/retro/SKILL.md +3 -1
  185. package/skills/review/SKILL.md +612 -588
  186. package/skills/review-intake/SKILL.md +249 -249
  187. package/skills/safeguard/SKILL.md +200 -200
  188. package/skills/sast/SKILL.md +190 -190
  189. package/skills/scaffold/SKILL.md +328 -287
  190. package/skills/scope-guard/SKILL.md +180 -180
  191. package/skills/scout/SKILL.md +263 -263
  192. package/skills/sentinel/SKILL.md +382 -381
  193. package/skills/sentinel-env/SKILL.md +254 -254
  194. package/skills/sequential-thinking/SKILL.md +234 -234
  195. package/skills/session-bridge/SKILL.md +543 -543
  196. package/skills/skill-forge/SKILL.md +581 -581
  197. package/skills/skill-router/SKILL.md +3 -0
  198. package/skills/surgeon/SKILL.md +215 -215
  199. package/skills/team/SKILL.md +556 -537
  200. package/skills/test/SKILL.md +614 -614
  201. package/skills/trend-scout/SKILL.md +145 -145
  202. package/skills/verification/SKILL.md +326 -326
  203. package/skills/video-creator/SKILL.md +201 -201
  204. package/skills/watchdog/SKILL.md +168 -168
  205. package/skills/worktree/SKILL.md +140 -140
@@ -1,125 +1,125 @@
1
- ---
2
- name: "type-system"
3
- pack: "@rune/ui"
4
- description: "Typography pairing database — 22 font pairings organized by product vibe. Each pairing includes Google Fonts URL, Tailwind config, size scale from display to caption, weight mapping, and line height ratios."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # type-system
10
-
11
- Typography pairing database — 22 font pairings organized by product vibe. Each pairing includes Google Fonts URL, Tailwind config, size scale from display to caption, weight mapping, and line height ratios. Decision tree maps product type and tone to the right pairing.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Detect product tone**
16
- Read `CLAUDE.md` or ask: "What is the product tone?" Classify: modern-tech | editorial | playful | corporate | developer | luxury | humanist | brutalist | minimal.
17
-
18
- **Step 2 — Recommend pairing**
19
- Apply the decision tree. Output the top 2 pairings with rationale (brand signal, readability score, Google Fonts load weight).
20
-
21
- **Step 3 — Generate @font-face / config**
22
- Emit the `<link>` preconnect + stylesheet tag for Google Fonts. Emit Tailwind `fontFamily` config. Emit a CSS type scale (`--text-display` through `--text-caption`).
23
-
24
- **Step 4 — Verify readability**
25
- Check: body size ≥ 14px, line-height ≥ 1.5 for body, ≤ 1.25 for headings. Flag any contrast failure using the project's background token.
26
-
27
- #### Decision Tree
28
-
29
- ```
30
- Product Tone → Pairing
31
- ──────────────────────────────────────────────────────────
32
- modern tech / saas → Space Grotesk + Inter
33
- editorial / blog → Playfair Display + Source Serif 4
34
- playful / kids / app → Fredoka + Nunito
35
- corporate / enterprise→ IBM Plex Sans + IBM Plex Serif
36
- developer tools / CLI → JetBrains Mono + Inter
37
- luxury / fashion → Cormorant Garamond + Montserrat
38
- humanist / health → DM Sans + DM Serif Display
39
- brutalist / bold → Bebas Neue + IBM Plex Mono
40
- minimal / productivity→ Inter + Inter (weight-only hierarchy)
41
- gaming / esports → Rajdhani + Exo 2
42
- ```
43
-
44
- #### Pairing Reference
45
-
46
- ```html
47
- <!-- Space Grotesk + Inter (modern-tech / saas) -->
48
- <link rel="preconnect" href="https://fonts.googleapis.com">
49
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
50
- <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
51
-
52
- <!-- Playfair Display + Source Serif 4 (editorial) -->
53
- <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;1,400&family=Source+Serif+4:wght@400;600&display=swap" rel="stylesheet">
54
-
55
- <!-- Fredoka + Nunito (playful) -->
56
- <link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;600;700&family=Nunito:wght@400;600&display=swap" rel="stylesheet">
57
-
58
- <!-- IBM Plex Sans + IBM Plex Serif (corporate) -->
59
- <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Serif:wght@400;600&display=swap" rel="stylesheet">
60
-
61
- <!-- JetBrains Mono + Inter (developer tools) -->
62
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
63
-
64
- <!-- Cormorant Garamond + Montserrat (luxury) -->
65
- <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,600;1,400&family=Montserrat:wght@400;500;700&display=swap" rel="stylesheet">
66
-
67
- <!-- DM Sans + DM Serif Display (humanist / health) -->
68
- <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600&family=DM+Serif+Display&display=swap" rel="stylesheet">
69
- ```
70
-
71
- ```css
72
- /* Type scale — Space Grotesk + Inter pairing */
73
- :root {
74
- --font-display: 'Space Grotesk', system-ui, sans-serif;
75
- --font-body: 'Inter', system-ui, sans-serif;
76
- --font-mono: 'JetBrains Mono', monospace;
77
-
78
- /* Scale */
79
- --text-display: clamp(2.5rem, 5vw, 4.5rem); /* 40–72px */
80
- --text-h1: clamp(2rem, 4vw, 2.5rem); /* 32–40px */
81
- --text-h2: clamp(1.375rem, 2.5vw, 1.75rem); /* 22–28px */
82
- --text-h3: 1.125rem; /* 18px */
83
- --text-body: 1rem; /* 16px */
84
- --text-small: 0.875rem; /* 14px */
85
- --text-caption: 0.75rem; /* 12px */
86
-
87
- /* Leading */
88
- --leading-tight: 1.2;
89
- --leading-snug: 1.35;
90
- --leading-normal: 1.5;
91
- --leading-relaxed:1.75;
92
- }
93
-
94
- h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); }
95
- body { font-family: var(--font-body); line-height: var(--leading-normal); }
96
- code, pre { font-family: var(--font-mono); }
97
-
98
- /* Financial numbers — always mono + bold */
99
- .number, .price, .stat {
100
- font-family: var(--font-mono);
101
- font-weight: 700;
102
- font-variant-numeric: tabular-nums;
103
- }
104
- ```
105
-
106
- ```js
107
- // tailwind.config.js — font pairing extension
108
- module.exports = {
109
- theme: {
110
- extend: {
111
- fontFamily: {
112
- display: ['Space Grotesk', 'system-ui', 'sans-serif'],
113
- body: ['Inter', 'system-ui', 'sans-serif'],
114
- mono: ['JetBrains Mono','monospace'],
115
- },
116
- fontSize: {
117
- 'display': ['clamp(2.5rem, 5vw, 4.5rem)', { lineHeight: '1.1' }],
118
- 'h1': ['clamp(2rem, 4vw, 2.5rem)', { lineHeight: '1.2' }],
119
- 'h2': ['1.75rem', { lineHeight: '1.3' }],
120
- 'h3': ['1.125rem', { lineHeight: '1.4' }],
121
- }
122
- }
123
- }
124
- }
125
- ```
1
+ ---
2
+ name: "type-system"
3
+ pack: "@rune/ui"
4
+ description: "Typography pairing database — 22 font pairings organized by product vibe. Each pairing includes Google Fonts URL, Tailwind config, size scale from display to caption, weight mapping, and line height ratios."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # type-system
10
+
11
+ Typography pairing database — 22 font pairings organized by product vibe. Each pairing includes Google Fonts URL, Tailwind config, size scale from display to caption, weight mapping, and line height ratios. Decision tree maps product type and tone to the right pairing.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Detect product tone**
16
+ Read `CLAUDE.md` or ask: "What is the product tone?" Classify: modern-tech | editorial | playful | corporate | developer | luxury | humanist | brutalist | minimal.
17
+
18
+ **Step 2 — Recommend pairing**
19
+ Apply the decision tree. Output the top 2 pairings with rationale (brand signal, readability score, Google Fonts load weight).
20
+
21
+ **Step 3 — Generate @font-face / config**
22
+ Emit the `<link>` preconnect + stylesheet tag for Google Fonts. Emit Tailwind `fontFamily` config. Emit a CSS type scale (`--text-display` through `--text-caption`).
23
+
24
+ **Step 4 — Verify readability**
25
+ Check: body size ≥ 14px, line-height ≥ 1.5 for body, ≤ 1.25 for headings. Flag any contrast failure using the project's background token.
26
+
27
+ #### Decision Tree
28
+
29
+ ```
30
+ Product Tone → Pairing
31
+ ──────────────────────────────────────────────────────────
32
+ modern tech / saas → Space Grotesk + Inter
33
+ editorial / blog → Playfair Display + Source Serif 4
34
+ playful / kids / app → Fredoka + Nunito
35
+ corporate / enterprise→ IBM Plex Sans + IBM Plex Serif
36
+ developer tools / CLI → JetBrains Mono + Inter
37
+ luxury / fashion → Cormorant Garamond + Montserrat
38
+ humanist / health → DM Sans + DM Serif Display
39
+ brutalist / bold → Bebas Neue + IBM Plex Mono
40
+ minimal / productivity→ Inter + Inter (weight-only hierarchy)
41
+ gaming / esports → Rajdhani + Exo 2
42
+ ```
43
+
44
+ #### Pairing Reference
45
+
46
+ ```html
47
+ <!-- Space Grotesk + Inter (modern-tech / saas) -->
48
+ <link rel="preconnect" href="https://fonts.googleapis.com">
49
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
50
+ <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
51
+
52
+ <!-- Playfair Display + Source Serif 4 (editorial) -->
53
+ <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;1,400&family=Source+Serif+4:wght@400;600&display=swap" rel="stylesheet">
54
+
55
+ <!-- Fredoka + Nunito (playful) -->
56
+ <link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;600;700&family=Nunito:wght@400;600&display=swap" rel="stylesheet">
57
+
58
+ <!-- IBM Plex Sans + IBM Plex Serif (corporate) -->
59
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Serif:wght@400;600&display=swap" rel="stylesheet">
60
+
61
+ <!-- JetBrains Mono + Inter (developer tools) -->
62
+ <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
63
+
64
+ <!-- Cormorant Garamond + Montserrat (luxury) -->
65
+ <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,600;1,400&family=Montserrat:wght@400;500;700&display=swap" rel="stylesheet">
66
+
67
+ <!-- DM Sans + DM Serif Display (humanist / health) -->
68
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600&family=DM+Serif+Display&display=swap" rel="stylesheet">
69
+ ```
70
+
71
+ ```css
72
+ /* Type scale — Space Grotesk + Inter pairing */
73
+ :root {
74
+ --font-display: 'Space Grotesk', system-ui, sans-serif;
75
+ --font-body: 'Inter', system-ui, sans-serif;
76
+ --font-mono: 'JetBrains Mono', monospace;
77
+
78
+ /* Scale */
79
+ --text-display: clamp(2.5rem, 5vw, 4.5rem); /* 40–72px */
80
+ --text-h1: clamp(2rem, 4vw, 2.5rem); /* 32–40px */
81
+ --text-h2: clamp(1.375rem, 2.5vw, 1.75rem); /* 22–28px */
82
+ --text-h3: 1.125rem; /* 18px */
83
+ --text-body: 1rem; /* 16px */
84
+ --text-small: 0.875rem; /* 14px */
85
+ --text-caption: 0.75rem; /* 12px */
86
+
87
+ /* Leading */
88
+ --leading-tight: 1.2;
89
+ --leading-snug: 1.35;
90
+ --leading-normal: 1.5;
91
+ --leading-relaxed:1.75;
92
+ }
93
+
94
+ h1, h2, h3 { font-family: var(--font-display); line-height: var(--leading-tight); }
95
+ body { font-family: var(--font-body); line-height: var(--leading-normal); }
96
+ code, pre { font-family: var(--font-mono); }
97
+
98
+ /* Financial numbers — always mono + bold */
99
+ .number, .price, .stat {
100
+ font-family: var(--font-mono);
101
+ font-weight: 700;
102
+ font-variant-numeric: tabular-nums;
103
+ }
104
+ ```
105
+
106
+ ```js
107
+ // tailwind.config.js — font pairing extension
108
+ module.exports = {
109
+ theme: {
110
+ extend: {
111
+ fontFamily: {
112
+ display: ['Space Grotesk', 'system-ui', 'sans-serif'],
113
+ body: ['Inter', 'system-ui', 'sans-serif'],
114
+ mono: ['JetBrains Mono','monospace'],
115
+ },
116
+ fontSize: {
117
+ 'display': ['clamp(2.5rem, 5vw, 4.5rem)', { lineHeight: '1.1' }],
118
+ 'h1': ['clamp(2rem, 4vw, 2.5rem)', { lineHeight: '1.2' }],
119
+ 'h2': ['1.75rem', { lineHeight: '1.3' }],
120
+ 'h3': ['1.125rem', { lineHeight: '1.4' }],
121
+ }
122
+ }
123
+ }
124
+ }
125
+ ```
@@ -1,153 +1,153 @@
1
- ---
2
- name: "web-vitals"
3
- pack: "@rune/ui"
4
- description: "Core Web Vitals performance audit — measures LCP, CLS, FCP, TBT, INP, and Speed Index against Google thresholds. Identifies render-blocking resources, network dependency chains, layout shift culprits, missing preloads, caching gaps, and tree-shaking opportunities."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # web-vitals
10
-
11
- Core Web Vitals performance audit — measures LCP, CLS, FCP, TBT, INP, and Speed Index against Google thresholds. Identifies render-blocking resources, network dependency chains, layout shift culprits, missing preloads, caching gaps, and tree-shaking opportunities. Framework-aware analysis for Next.js, Vite, SvelteKit, and Astro.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Detect build tooling and framework**
16
- Read `package.json`, config files (`next.config.*`, `vite.config.*`, `svelte.config.*`, `astro.config.*`), and build scripts. Identify:
17
- - Bundler: Webpack, Vite, Rollup, esbuild, Turbopack
18
- - Framework: Next.js (App Router vs Pages), SvelteKit, Astro, Remix
19
- - CSS strategy: Tailwind (content config), CSS Modules, global CSS
20
- - Compression: gzip/brotli configuration
21
- - Source maps: enabled in production? (should be external or disabled)
22
-
23
- **Step 2 — Audit render-blocking resources**
24
- Use Grep to scan HTML entry points and framework layouts for:
25
- - `<link rel="stylesheet">` in `<head>` without `media` attribute — blocks first paint
26
- - `<script>` tags without `async` or `defer` — blocks HTML parsing
27
- - CSS `@import` chains — each import is a sequential network request
28
- - Large inline `<style>` blocks (>50KB) — delays first paint
29
-
30
- For each blocking resource, estimate impact: 0ms impact = note but don't prioritize. Focus on resources that delay FCP by >100ms.
31
-
32
- **Step 3 — Analyze layout shift sources (CLS)**
33
- Use Grep to find common CLS culprits:
34
- - `<img>` and `<video>` without explicit `width` and `height` attributes — causes layout shift when media loads
35
- - Dynamic content injection above the fold (`insertBefore`, `prepend`, or React `useState` toggling visibility)
36
- - Web fonts without `font-display: swap` or `font-display: optional` — FOIT causes text layout shift
37
- - Ads or embeds without reserved space (`aspect-ratio` or `min-height` on container)
38
- - CSS animations that trigger layout (`top`, `left`, `width`, `height`) instead of composited properties (`transform`, `opacity`)
39
-
40
- #### CLS Fix Patterns
41
-
42
- ```html
43
- <!-- BEFORE: no dimensions → layout shift when image loads -->
44
- <img src="/hero.jpg" alt="Hero" />
45
-
46
- <!-- AFTER: explicit dimensions prevent CLS -->
47
- <img src="/hero.jpg" alt="Hero" width="1200" height="630"
48
- class="w-full h-auto" loading="lazy" decoding="async" />
49
- ```
50
-
51
- ```css
52
- /* Font display — prevent FOIT layout shift */
53
- @font-face {
54
- font-family: 'Space Grotesk';
55
- src: url('/fonts/space-grotesk.woff2') format('woff2');
56
- font-display: swap; /* show fallback immediately, swap when loaded */
57
- }
58
-
59
- /* Reserve space for dynamic content */
60
- .ad-container {
61
- min-height: 250px; /* match ad unit height */
62
- contain: layout; /* prevent layout influence on siblings */
63
- }
64
- ```
65
-
66
- **Step 4 — Network dependency chain analysis**
67
- Identify critical rendering path bottlenecks:
68
- - **Waterfall chains**: Resource A loads → discovers Resource B → discovers Resource C. Each link adds latency. Fix with `<link rel="preload">` for critical assets.
69
- - **Missing preconnects**: Third-party origins (fonts.googleapis.com, CDN, analytics) without `<link rel="preconnect">`. But verify the origin is actually used — unused preconnects waste connection resources.
70
- - **Large payloads without compression**: JS/CSS bundles >100KB served without gzip/brotli. Check server response headers for `Content-Encoding`.
71
- - **Duplicate requests**: Same resource fetched multiple times (common with CSS @import or uncoordinated dynamic imports).
72
-
73
- ```html
74
- <!-- Preload critical resources discovered late in the waterfall -->
75
- <link rel="preload" href="/fonts/inter-var.woff2" as="font"
76
- type="font/woff2" crossorigin />
77
- <link rel="preload" href="/hero-image.webp" as="image"
78
- fetchpriority="high" />
79
-
80
- <!-- Preconnect to third-party origins ACTUALLY used -->
81
- <link rel="preconnect" href="https://fonts.googleapis.com" />
82
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
83
- ```
84
-
85
- **Step 5 — Tree-shaking and code splitting audit**
86
- Check bundler configuration and import patterns:
87
-
88
- | Issue | Detection | Fix |
89
- |---|---|---|
90
- | Barrel file re-exports break tree-shaking | `index.ts` with `export * from` or `export { A, B, C, ... }` importing everything | Import directly from source: `import { Button } from './Button'` not `from '.'` |
91
- | `sideEffects: false` missing in package.json | Check `package.json` `sideEffects` field | Add `"sideEffects": false` (or list files with side effects like CSS imports) |
92
- | No code splitting at route level | Framework routes without `React.lazy()` or `dynamic()` | Next.js does this automatically; Vite needs manual `React.lazy()` |
93
- | Vendor chunk too large (>250KB) | Check build output for single large chunk | Configure `splitChunks` (Webpack) or `manualChunks` (Vite/Rollup) |
94
- | CSS not purged | Tailwind without `content` config, or unused CSS classes shipping | Verify `tailwind.config.js` `content` paths cover all template files |
95
-
96
- **Step 6 — Image optimization audit**
97
- Scan for image-related performance issues:
98
- - Serving JPEG/PNG when WebP/AVIF would save 30-60% bandwidth — check `<img>` `src` extensions
99
- - Missing `loading="lazy"` on below-the-fold images
100
- - Missing `fetchpriority="high"` on LCP image (hero image, above-the-fold banner)
101
- - Images served at full resolution without responsive `srcset` — wastes bandwidth on mobile
102
- - No `<picture>` element for art direction (different crops for mobile/desktop)
103
-
104
- ```html
105
- <!-- Optimized responsive image with modern formats -->
106
- <picture>
107
- <source srcset="/hero.avif" type="image/avif" />
108
- <source srcset="/hero.webp" type="image/webp" />
109
- <img
110
- src="/hero.jpg"
111
- alt="Product dashboard showing real-time analytics"
112
- width="1200" height="630"
113
- class="w-full h-auto"
114
- fetchpriority="high"
115
- decoding="async"
116
- />
117
- </picture>
118
-
119
- <!-- Below-the-fold: lazy load -->
120
- <img src="/feature.webp" alt="..." loading="lazy" decoding="async"
121
- width="600" height="400" class="w-full h-auto" />
122
- ```
123
-
124
- **Step 7 — Generate performance report**
125
- Produce a structured report with Core Web Vitals thresholds:
126
-
127
- ```
128
- Web Vitals Audit — [Project Name]
129
- ═══════════════════════════════════════
130
- Thresholds (Good / Needs Improvement / Poor):
131
- LCP: < 2.5s / < 4.0s / > 4.0s
132
- FCP: < 1.8s / < 3.0s / > 3.0s
133
- CLS: < 0.1 / < 0.25 / > 0.25
134
- INP: < 200ms / < 500ms / > 500ms
135
- TBT: < 200ms / < 600ms / > 600ms
136
- TTFB: < 800ms / < 1.8s / > 1.8s
137
-
138
- Top Issues (by estimated impact):
139
- 1. [HIGH] Hero image served as 2.4MB PNG — convert to WebP, save ~1.5MB
140
- 2. [HIGH] 3 render-blocking stylesheets in <head> — defer non-critical CSS
141
- 3. [MEDIUM] 4 images missing width/height — causes CLS on load
142
- 4. [MEDIUM] lodash imported wholesale — tree-shake or replace with lodash-es
143
- 5. [LOW] Font preconnect to unused origin — remove to free connection slot
144
- ```
145
-
146
- #### Sharp Edges
147
-
148
- | Failure Mode | Mitigation |
149
- |---|---|
150
- | Recommending image lazy-load on LCP element | Never lazy-load the LCP image — it must load eagerly with `fetchpriority="high"` |
151
- | Flagging render-blocking CSS that's actually critical | Distinguish critical (above-fold) CSS from non-critical before recommending defer |
152
- | Tree-shaking audit false positives on CSS-in-JS | CSS `import './styles.css'` is a side effect — don't flag as unused |
153
- | Preconnect removal breaks actual resource loading | Always verify zero requests went to the origin before recommending removal |
1
+ ---
2
+ name: "web-vitals"
3
+ pack: "@rune/ui"
4
+ description: "Core Web Vitals performance audit — measures LCP, CLS, FCP, TBT, INP, and Speed Index against Google thresholds. Identifies render-blocking resources, network dependency chains, layout shift culprits, missing preloads, caching gaps, and tree-shaking opportunities."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # web-vitals
10
+
11
+ Core Web Vitals performance audit — measures LCP, CLS, FCP, TBT, INP, and Speed Index against Google thresholds. Identifies render-blocking resources, network dependency chains, layout shift culprits, missing preloads, caching gaps, and tree-shaking opportunities. Framework-aware analysis for Next.js, Vite, SvelteKit, and Astro.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Detect build tooling and framework**
16
+ Read `package.json`, config files (`next.config.*`, `vite.config.*`, `svelte.config.*`, `astro.config.*`), and build scripts. Identify:
17
+ - Bundler: Webpack, Vite, Rollup, esbuild, Turbopack
18
+ - Framework: Next.js (App Router vs Pages), SvelteKit, Astro, Remix
19
+ - CSS strategy: Tailwind (content config), CSS Modules, global CSS
20
+ - Compression: gzip/brotli configuration
21
+ - Source maps: enabled in production? (should be external or disabled)
22
+
23
+ **Step 2 — Audit render-blocking resources**
24
+ Use Grep to scan HTML entry points and framework layouts for:
25
+ - `<link rel="stylesheet">` in `<head>` without `media` attribute — blocks first paint
26
+ - `<script>` tags without `async` or `defer` — blocks HTML parsing
27
+ - CSS `@import` chains — each import is a sequential network request
28
+ - Large inline `<style>` blocks (>50KB) — delays first paint
29
+
30
+ For each blocking resource, estimate impact: 0ms impact = note but don't prioritize. Focus on resources that delay FCP by >100ms.
31
+
32
+ **Step 3 — Analyze layout shift sources (CLS)**
33
+ Use Grep to find common CLS culprits:
34
+ - `<img>` and `<video>` without explicit `width` and `height` attributes — causes layout shift when media loads
35
+ - Dynamic content injection above the fold (`insertBefore`, `prepend`, or React `useState` toggling visibility)
36
+ - Web fonts without `font-display: swap` or `font-display: optional` — FOIT causes text layout shift
37
+ - Ads or embeds without reserved space (`aspect-ratio` or `min-height` on container)
38
+ - CSS animations that trigger layout (`top`, `left`, `width`, `height`) instead of composited properties (`transform`, `opacity`)
39
+
40
+ #### CLS Fix Patterns
41
+
42
+ ```html
43
+ <!-- BEFORE: no dimensions → layout shift when image loads -->
44
+ <img src="/hero.jpg" alt="Hero" />
45
+
46
+ <!-- AFTER: explicit dimensions prevent CLS -->
47
+ <img src="/hero.jpg" alt="Hero" width="1200" height="630"
48
+ class="w-full h-auto" loading="lazy" decoding="async" />
49
+ ```
50
+
51
+ ```css
52
+ /* Font display — prevent FOIT layout shift */
53
+ @font-face {
54
+ font-family: 'Space Grotesk';
55
+ src: url('/fonts/space-grotesk.woff2') format('woff2');
56
+ font-display: swap; /* show fallback immediately, swap when loaded */
57
+ }
58
+
59
+ /* Reserve space for dynamic content */
60
+ .ad-container {
61
+ min-height: 250px; /* match ad unit height */
62
+ contain: layout; /* prevent layout influence on siblings */
63
+ }
64
+ ```
65
+
66
+ **Step 4 — Network dependency chain analysis**
67
+ Identify critical rendering path bottlenecks:
68
+ - **Waterfall chains**: Resource A loads → discovers Resource B → discovers Resource C. Each link adds latency. Fix with `<link rel="preload">` for critical assets.
69
+ - **Missing preconnects**: Third-party origins (fonts.googleapis.com, CDN, analytics) without `<link rel="preconnect">`. But verify the origin is actually used — unused preconnects waste connection resources.
70
+ - **Large payloads without compression**: JS/CSS bundles >100KB served without gzip/brotli. Check server response headers for `Content-Encoding`.
71
+ - **Duplicate requests**: Same resource fetched multiple times (common with CSS @import or uncoordinated dynamic imports).
72
+
73
+ ```html
74
+ <!-- Preload critical resources discovered late in the waterfall -->
75
+ <link rel="preload" href="/fonts/inter-var.woff2" as="font"
76
+ type="font/woff2" crossorigin />
77
+ <link rel="preload" href="/hero-image.webp" as="image"
78
+ fetchpriority="high" />
79
+
80
+ <!-- Preconnect to third-party origins ACTUALLY used -->
81
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
82
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
83
+ ```
84
+
85
+ **Step 5 — Tree-shaking and code splitting audit**
86
+ Check bundler configuration and import patterns:
87
+
88
+ | Issue | Detection | Fix |
89
+ |---|---|---|
90
+ | Barrel file re-exports break tree-shaking | `index.ts` with `export * from` or `export { A, B, C, ... }` importing everything | Import directly from source: `import { Button } from './Button'` not `from '.'` |
91
+ | `sideEffects: false` missing in package.json | Check `package.json` `sideEffects` field | Add `"sideEffects": false` (or list files with side effects like CSS imports) |
92
+ | No code splitting at route level | Framework routes without `React.lazy()` or `dynamic()` | Next.js does this automatically; Vite needs manual `React.lazy()` |
93
+ | Vendor chunk too large (>250KB) | Check build output for single large chunk | Configure `splitChunks` (Webpack) or `manualChunks` (Vite/Rollup) |
94
+ | CSS not purged | Tailwind without `content` config, or unused CSS classes shipping | Verify `tailwind.config.js` `content` paths cover all template files |
95
+
96
+ **Step 6 — Image optimization audit**
97
+ Scan for image-related performance issues:
98
+ - Serving JPEG/PNG when WebP/AVIF would save 30-60% bandwidth — check `<img>` `src` extensions
99
+ - Missing `loading="lazy"` on below-the-fold images
100
+ - Missing `fetchpriority="high"` on LCP image (hero image, above-the-fold banner)
101
+ - Images served at full resolution without responsive `srcset` — wastes bandwidth on mobile
102
+ - No `<picture>` element for art direction (different crops for mobile/desktop)
103
+
104
+ ```html
105
+ <!-- Optimized responsive image with modern formats -->
106
+ <picture>
107
+ <source srcset="/hero.avif" type="image/avif" />
108
+ <source srcset="/hero.webp" type="image/webp" />
109
+ <img
110
+ src="/hero.jpg"
111
+ alt="Product dashboard showing real-time analytics"
112
+ width="1200" height="630"
113
+ class="w-full h-auto"
114
+ fetchpriority="high"
115
+ decoding="async"
116
+ />
117
+ </picture>
118
+
119
+ <!-- Below-the-fold: lazy load -->
120
+ <img src="/feature.webp" alt="..." loading="lazy" decoding="async"
121
+ width="600" height="400" class="w-full h-auto" />
122
+ ```
123
+
124
+ **Step 7 — Generate performance report**
125
+ Produce a structured report with Core Web Vitals thresholds:
126
+
127
+ ```
128
+ Web Vitals Audit — [Project Name]
129
+ ═══════════════════════════════════════
130
+ Thresholds (Good / Needs Improvement / Poor):
131
+ LCP: < 2.5s / < 4.0s / > 4.0s
132
+ FCP: < 1.8s / < 3.0s / > 3.0s
133
+ CLS: < 0.1 / < 0.25 / > 0.25
134
+ INP: < 200ms / < 500ms / > 500ms
135
+ TBT: < 200ms / < 600ms / > 600ms
136
+ TTFB: < 800ms / < 1.8s / > 1.8s
137
+
138
+ Top Issues (by estimated impact):
139
+ 1. [HIGH] Hero image served as 2.4MB PNG — convert to WebP, save ~1.5MB
140
+ 2. [HIGH] 3 render-blocking stylesheets in <head> — defer non-critical CSS
141
+ 3. [MEDIUM] 4 images missing width/height — causes CLS on load
142
+ 4. [MEDIUM] lodash imported wholesale — tree-shake or replace with lodash-es
143
+ 5. [LOW] Font preconnect to unused origin — remove to free connection slot
144
+ ```
145
+
146
+ #### Sharp Edges
147
+
148
+ | Failure Mode | Mitigation |
149
+ |---|---|
150
+ | Recommending image lazy-load on LCP element | Never lazy-load the LCP image — it must load eagerly with `fetchpriority="high"` |
151
+ | Flagging render-blocking CSS that's actually critical | Distinguish critical (above-fold) CSS from non-critical before recommending defer |
152
+ | Tree-shaking audit false positives on CSS-in-JS | CSS `import './styles.css'` is a side effect — don't flag as unused |
153
+ | Preconnect removal breaks actual resource loading | Always verify zero requests went to the origin before recommending removal |