@stacksjs/defaults 0.75.109 → 0.75.110

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 (748) hide show
  1. package/ai/AGENTS.md +36 -1
  2. package/ai/README.md +39 -1
  3. package/ai/skills/stacks-actions/SKILL.md +64 -6
  4. package/ai/skills/stacks-ai/SKILL.md +36 -10
  5. package/ai/skills/stacks-alias/SKILL.md +40 -85
  6. package/ai/skills/stacks-analytics/SKILL.md +23 -3
  7. package/ai/skills/stacks-arrays/SKILL.md +35 -9
  8. package/ai/skills/stacks-audio/SKILL.md +34 -0
  9. package/ai/skills/stacks-auth/ACCOUNT-WORKFLOWS.md +113 -0
  10. package/ai/skills/stacks-auth/SKILL.md +90 -57
  11. package/ai/skills/stacks-auto-imports/SKILL.md +80 -138
  12. package/ai/skills/stacks-browser/SKILL.md +82 -138
  13. package/ai/skills/stacks-browser-extension/SKILL.md +40 -0
  14. package/ai/skills/stacks-buddy/SKILL.md +2 -0
  15. package/ai/skills/stacks-build/SKILL.md +42 -23
  16. package/ai/skills/stacks-cache/SKILL.md +75 -115
  17. package/ai/skills/stacks-calendar/SKILL.md +61 -97
  18. package/ai/skills/stacks-charts/SKILL.md +34 -0
  19. package/ai/skills/stacks-chat/SKILL.md +18 -2
  20. package/ai/skills/stacks-chief-of-staff/LICENSE +21 -0
  21. package/ai/skills/stacks-chief-of-staff/NOTICE.md +10 -0
  22. package/ai/skills/stacks-chief-of-staff/PLAYBOOK.md +42 -0
  23. package/ai/skills/stacks-chief-of-staff/SKILL.md +28 -0
  24. package/ai/skills/stacks-cli/SKILL.md +23 -7
  25. package/ai/skills/stacks-cloud/SKILL.md +37 -20
  26. package/ai/skills/stacks-cms/PAGES.md +70 -0
  27. package/ai/skills/stacks-cms/SKILL.md +30 -18
  28. package/ai/skills/stacks-codebase-design/LICENSE +21 -0
  29. package/ai/skills/stacks-codebase-design/NOTICE.md +10 -0
  30. package/ai/skills/stacks-codebase-design/SKILL.md +10 -0
  31. package/ai/skills/stacks-collections/SKILL.md +25 -8
  32. package/ai/skills/stacks-commerce/SKILL.md +25 -1
  33. package/ai/skills/stacks-composables/BROWSER.md +97 -0
  34. package/ai/skills/stacks-composables/SKILL.md +87 -181
  35. package/ai/skills/stacks-config/SKILL.md +108 -162
  36. package/ai/skills/stacks-cron/SKILL.md +27 -13
  37. package/ai/skills/stacks-crosswind/SKILL.md +62 -167
  38. package/ai/skills/stacks-dashboard/SKILL.md +8 -0
  39. package/ai/skills/stacks-database/SKILL.md +98 -68
  40. package/ai/skills/stacks-datetime/SKILL.md +21 -5
  41. package/ai/skills/stacks-deploy/SKILL.md +17 -1
  42. package/ai/skills/stacks-design-brutalist/SKILL.md +1 -1
  43. package/ai/skills/stacks-design-minimalist/SKILL.md +17 -3
  44. package/ai/skills/stacks-design-soft/SKILL.md +16 -4
  45. package/ai/skills/stacks-design-taste/SKILL.md +55 -35
  46. package/ai/skills/stacks-design-taste-codex/SKILL.md +5 -5
  47. package/ai/skills/stacks-desktop/SKILL.md +22 -16
  48. package/ai/skills/stacks-development/SKILL.md +19 -8
  49. package/ai/skills/stacks-dns/SKILL.md +72 -139
  50. package/ai/skills/stacks-domain-modeling/ADR-FORMAT.md +47 -0
  51. package/ai/skills/stacks-domain-modeling/GLOSSARY-FORMAT.md +60 -0
  52. package/ai/skills/stacks-domain-modeling/LICENSE +21 -0
  53. package/ai/skills/stacks-domain-modeling/NOTICE.md +10 -0
  54. package/ai/skills/stacks-domain-modeling/SKILL.md +11 -0
  55. package/ai/skills/stacks-email/DELIVERY-CONTROLS.md +84 -0
  56. package/ai/skills/stacks-email/SKILL.md +18 -2
  57. package/ai/skills/stacks-enums/SKILL.md +28 -81
  58. package/ai/skills/stacks-env/SKILL.md +23 -15
  59. package/ai/skills/stacks-error-handling/SKILL.md +68 -121
  60. package/ai/skills/stacks-events/SKILL.md +83 -264
  61. package/ai/skills/stacks-faker/SKILL.md +28 -13
  62. package/ai/skills/stacks-feature-flags/SKILL.md +41 -0
  63. package/ai/skills/stacks-features/SKILL.md +46 -0
  64. package/ai/skills/stacks-flow/ENGINEERING.md +84 -0
  65. package/ai/skills/stacks-flow/LICENSE +21 -0
  66. package/ai/skills/stacks-flow/NOTICE.md +10 -0
  67. package/ai/skills/stacks-flow/SKILL.md +32 -0
  68. package/ai/skills/stacks-flow/upstream-skills.json +726 -0
  69. package/ai/skills/stacks-forms/SKILL.md +44 -0
  70. package/ai/skills/stacks-git/LICENSE +21 -0
  71. package/ai/skills/stacks-git/NOTICE.md +10 -0
  72. package/ai/skills/stacks-git/SKILL.md +11 -0
  73. package/ai/skills/stacks-grill-with-docs/LICENSE +21 -0
  74. package/ai/skills/stacks-grill-with-docs/NOTICE.md +10 -0
  75. package/ai/skills/stacks-grill-with-docs/PLAYBOOK.md +4 -0
  76. package/ai/skills/stacks-grill-with-docs/SKILL.md +24 -0
  77. package/ai/skills/stacks-grilling/LICENSE +21 -0
  78. package/ai/skills/stacks-grilling/NOTICE.md +17 -0
  79. package/ai/skills/stacks-grilling/SKILL.md +7 -0
  80. package/ai/skills/stacks-guard/LICENSE +21 -0
  81. package/ai/skills/stacks-guard/NOTICE.md +10 -0
  82. package/ai/skills/stacks-guard/SKILL.md +6 -0
  83. package/ai/skills/stacks-handoff/LICENSE +21 -0
  84. package/ai/skills/stacks-handoff/NOTICE.md +17 -0
  85. package/ai/skills/stacks-handoff/SKILL.md +8 -0
  86. package/ai/skills/stacks-http/SKILL.md +64 -297
  87. package/ai/skills/stacks-humanizer/LICENSE +21 -0
  88. package/ai/skills/stacks-humanizer/NOTICE.md +19 -0
  89. package/ai/skills/stacks-humanizer/SKILL.md +85 -0
  90. package/ai/skills/stacks-humanizer/references/patterns.md +350 -0
  91. package/ai/skills/stacks-i18n/SKILL.md +33 -8
  92. package/ai/skills/stacks-image/SKILL.md +37 -0
  93. package/ai/skills/stacks-image-to-code/SKILL.md +11 -6
  94. package/ai/skills/stacks-implement/LICENSE +21 -0
  95. package/ai/skills/stacks-implement/NOTICE.md +10 -0
  96. package/ai/skills/stacks-implement/PLAYBOOK.md +14 -0
  97. package/ai/skills/stacks-implement/SKILL.md +24 -0
  98. package/ai/skills/stacks-implement-spec/LICENSE +21 -0
  99. package/ai/skills/stacks-implement-spec/NOTICE.md +10 -0
  100. package/ai/skills/stacks-implement-spec/PLAYBOOK.md +37 -0
  101. package/ai/skills/stacks-implement-spec/SKILL.md +24 -0
  102. package/ai/skills/stacks-improve-codebase-architecture/HTML-REPORT.md +126 -0
  103. package/ai/skills/stacks-improve-codebase-architecture/LICENSE +21 -0
  104. package/ai/skills/stacks-improve-codebase-architecture/NOTICE.md +10 -0
  105. package/ai/skills/stacks-improve-codebase-architecture/PLAYBOOK.md +68 -0
  106. package/ai/skills/stacks-improve-codebase-architecture/SKILL.md +24 -0
  107. package/ai/skills/stacks-investigate/LICENSE +21 -0
  108. package/ai/skills/stacks-investigate/NOTICE.md +10 -0
  109. package/ai/skills/stacks-investigate/SKILL.md +6 -0
  110. package/ai/skills/stacks-jobs/SKILL.md +29 -8
  111. package/ai/skills/stacks-listeners/SKILL.md +13 -5
  112. package/ai/skills/stacks-logging/SKILL.md +71 -68
  113. package/ai/skills/stacks-loop/LICENSE +21 -0
  114. package/ai/skills/stacks-loop/NOTICE.md +10 -0
  115. package/ai/skills/stacks-loop/PLAYBOOK.md +28 -0
  116. package/ai/skills/stacks-loop/SKILL.md +28 -0
  117. package/ai/skills/stacks-mail/SKILL.md +46 -7
  118. package/ai/skills/stacks-marketing/CATALOG.md +60 -0
  119. package/ai/skills/stacks-marketing/LICENSE +21 -0
  120. package/ai/skills/stacks-marketing/NOTICE.md +5 -0
  121. package/ai/skills/stacks-marketing/SKILL.md +27 -0
  122. package/ai/skills/stacks-marketing/WORKFLOW.md +83 -0
  123. package/ai/skills/stacks-marketing-ab-testing/LICENSE +21 -0
  124. package/ai/skills/stacks-marketing-ab-testing/NOTICE.md +13 -0
  125. package/ai/skills/stacks-marketing-ab-testing/PLAYBOOK.md +352 -0
  126. package/ai/skills/stacks-marketing-ab-testing/SKILL.md +30 -0
  127. package/ai/skills/stacks-marketing-ab-testing/evals/evals.json +116 -0
  128. package/ai/skills/stacks-marketing-ab-testing/references/sample-size-guide.md +263 -0
  129. package/ai/skills/stacks-marketing-ab-testing/references/test-templates.md +277 -0
  130. package/ai/skills/stacks-marketing-ad-creative/LICENSE +21 -0
  131. package/ai/skills/stacks-marketing-ad-creative/NOTICE.md +13 -0
  132. package/ai/skills/stacks-marketing-ad-creative/PLAYBOOK.md +434 -0
  133. package/ai/skills/stacks-marketing-ad-creative/SKILL.md +30 -0
  134. package/ai/skills/stacks-marketing-ad-creative/assets/creative-review-template.html +432 -0
  135. package/ai/skills/stacks-marketing-ad-creative/evals/evals.json +280 -0
  136. package/ai/skills/stacks-marketing-ad-creative/references/awareness-headlines.md +54 -0
  137. package/ai/skills/stacks-marketing-ad-creative/references/creative-review-page.md +109 -0
  138. package/ai/skills/stacks-marketing-ad-creative/references/creative-roadmap.md +118 -0
  139. package/ai/skills/stacks-marketing-ad-creative/references/generative-tools.md +613 -0
  140. package/ai/skills/stacks-marketing-ad-creative/references/hook-system.md +115 -0
  141. package/ai/skills/stacks-marketing-ad-creative/references/imessage-video-ads.md +197 -0
  142. package/ai/skills/stacks-marketing-ad-creative/references/meta-creative-formats.md +114 -0
  143. package/ai/skills/stacks-marketing-ad-creative/references/motion-video-ads.md +126 -0
  144. package/ai/skills/stacks-marketing-ad-creative/references/platform-specs.md +213 -0
  145. package/ai/skills/stacks-marketing-ad-creative/references/short-form-video-specs.md +213 -0
  146. package/ai/skills/stacks-marketing-ad-creative/references/static-ad-templates.md +308 -0
  147. package/ai/skills/stacks-marketing-ads/LICENSE +21 -0
  148. package/ai/skills/stacks-marketing-ads/NOTICE.md +13 -0
  149. package/ai/skills/stacks-marketing-ads/PLAYBOOK.md +464 -0
  150. package/ai/skills/stacks-marketing-ads/SKILL.md +30 -0
  151. package/ai/skills/stacks-marketing-ads/evals/evals.json +192 -0
  152. package/ai/skills/stacks-marketing-ads/references/abm-playbook.md +101 -0
  153. package/ai/skills/stacks-marketing-ads/references/ad-copy-templates.md +207 -0
  154. package/ai/skills/stacks-marketing-ads/references/audience-targeting.md +243 -0
  155. package/ai/skills/stacks-marketing-ads/references/audit-guardrails.md +83 -0
  156. package/ai/skills/stacks-marketing-ads/references/b2b-paid-playbook.md +115 -0
  157. package/ai/skills/stacks-marketing-ads/references/conversion-tracking.md +361 -0
  158. package/ai/skills/stacks-marketing-ads/references/creative-research-automation.md +103 -0
  159. package/ai/skills/stacks-marketing-ads/references/google-ads-audit-checklist.md +84 -0
  160. package/ai/skills/stacks-marketing-ads/references/google-search-playbook.md +120 -0
  161. package/ai/skills/stacks-marketing-ads/references/linkedin-b2b-playbook.md +107 -0
  162. package/ai/skills/stacks-marketing-ads/references/meta-andromeda-playbook.md +44 -0
  163. package/ai/skills/stacks-marketing-ads/references/meta-decision-system.md +176 -0
  164. package/ai/skills/stacks-marketing-ads/references/payback-period.md +73 -0
  165. package/ai/skills/stacks-marketing-ads/references/platform-setup-checklists.md +277 -0
  166. package/ai/skills/stacks-marketing-ads/references/reading-google-ads-data.md +121 -0
  167. package/ai/skills/stacks-marketing-ads/references/rsa-output-spec.md +88 -0
  168. package/ai/skills/stacks-marketing-ai-seo/LICENSE +21 -0
  169. package/ai/skills/stacks-marketing-ai-seo/NOTICE.md +13 -0
  170. package/ai/skills/stacks-marketing-ai-seo/PLAYBOOK.md +494 -0
  171. package/ai/skills/stacks-marketing-ai-seo/SKILL.md +30 -0
  172. package/ai/skills/stacks-marketing-ai-seo/evals/evals.json +163 -0
  173. package/ai/skills/stacks-marketing-ai-seo/references/agent-readiness.md +66 -0
  174. package/ai/skills/stacks-marketing-ai-seo/references/citations-vs-recommendations.md +89 -0
  175. package/ai/skills/stacks-marketing-ai-seo/references/content-patterns.md +287 -0
  176. package/ai/skills/stacks-marketing-ai-seo/references/content-types.md +82 -0
  177. package/ai/skills/stacks-marketing-ai-seo/references/format-volatility.md +95 -0
  178. package/ai/skills/stacks-marketing-ai-seo/references/linkedin-ai-citations.md +131 -0
  179. package/ai/skills/stacks-marketing-ai-seo/references/okf.md +104 -0
  180. package/ai/skills/stacks-marketing-ai-seo/references/platform-ranking-factors.md +167 -0
  181. package/ai/skills/stacks-marketing-ai-seo/references/positioning-and-consensus.md +102 -0
  182. package/ai/skills/stacks-marketing-ai-seo/references/youtube-ai-citations.md +66 -0
  183. package/ai/skills/stacks-marketing-analytics/LICENSE +21 -0
  184. package/ai/skills/stacks-marketing-analytics/NOTICE.md +13 -0
  185. package/ai/skills/stacks-marketing-analytics/PLAYBOOK.md +307 -0
  186. package/ai/skills/stacks-marketing-analytics/SKILL.md +30 -0
  187. package/ai/skills/stacks-marketing-analytics/evals/evals.json +117 -0
  188. package/ai/skills/stacks-marketing-analytics/references/event-library.md +260 -0
  189. package/ai/skills/stacks-marketing-analytics/references/ga4-implementation.md +304 -0
  190. package/ai/skills/stacks-marketing-analytics/references/gtm-implementation.md +396 -0
  191. package/ai/skills/stacks-marketing-aso/LICENSE +21 -0
  192. package/ai/skills/stacks-marketing-aso/NOTICE.md +13 -0
  193. package/ai/skills/stacks-marketing-aso/PLAYBOOK.md +310 -0
  194. package/ai/skills/stacks-marketing-aso/SKILL.md +30 -0
  195. package/ai/skills/stacks-marketing-aso/evals/evals.json +104 -0
  196. package/ai/skills/stacks-marketing-aso/references/apple-specs.md +107 -0
  197. package/ai/skills/stacks-marketing-aso/references/benchmarks.md +131 -0
  198. package/ai/skills/stacks-marketing-aso/references/google-play-specs.md +135 -0
  199. package/ai/skills/stacks-marketing-aso/references/report-template.md +213 -0
  200. package/ai/skills/stacks-marketing-aso/references/scoring-criteria.md +213 -0
  201. package/ai/skills/stacks-marketing-attribution/LICENSE +21 -0
  202. package/ai/skills/stacks-marketing-attribution/NOTICE.md +13 -0
  203. package/ai/skills/stacks-marketing-attribution/PLAYBOOK.md +223 -0
  204. package/ai/skills/stacks-marketing-attribution/SKILL.md +30 -0
  205. package/ai/skills/stacks-marketing-attribution/evals/evals.json +128 -0
  206. package/ai/skills/stacks-marketing-attribution/references/attribution-models.md +74 -0
  207. package/ai/skills/stacks-marketing-attribution/references/by-business-type.md +54 -0
  208. package/ai/skills/stacks-marketing-attribution/references/first-party-tracking.md +253 -0
  209. package/ai/skills/stacks-marketing-attribution/references/measurement-paradigms.md +85 -0
  210. package/ai/skills/stacks-marketing-churn-prevention/LICENSE +21 -0
  211. package/ai/skills/stacks-marketing-churn-prevention/NOTICE.md +13 -0
  212. package/ai/skills/stacks-marketing-churn-prevention/PLAYBOOK.md +420 -0
  213. package/ai/skills/stacks-marketing-churn-prevention/SKILL.md +30 -0
  214. package/ai/skills/stacks-marketing-churn-prevention/evals/evals.json +107 -0
  215. package/ai/skills/stacks-marketing-churn-prevention/references/cancel-flow-patterns.md +316 -0
  216. package/ai/skills/stacks-marketing-churn-prevention/references/dunning-playbook.md +413 -0
  217. package/ai/skills/stacks-marketing-co-marketing/LICENSE +21 -0
  218. package/ai/skills/stacks-marketing-co-marketing/NOTICE.md +13 -0
  219. package/ai/skills/stacks-marketing-co-marketing/PLAYBOOK.md +306 -0
  220. package/ai/skills/stacks-marketing-co-marketing/SKILL.md +30 -0
  221. package/ai/skills/stacks-marketing-co-marketing/evals/evals.json +98 -0
  222. package/ai/skills/stacks-marketing-co-marketing/references/partnership-types.md +100 -0
  223. package/ai/skills/stacks-marketing-cold-email/LICENSE +21 -0
  224. package/ai/skills/stacks-marketing-cold-email/NOTICE.md +13 -0
  225. package/ai/skills/stacks-marketing-cold-email/PLAYBOOK.md +210 -0
  226. package/ai/skills/stacks-marketing-cold-email/SKILL.md +30 -0
  227. package/ai/skills/stacks-marketing-cold-email/evals/evals.json +137 -0
  228. package/ai/skills/stacks-marketing-cold-email/references/benchmarks.md +87 -0
  229. package/ai/skills/stacks-marketing-cold-email/references/deliverability.md +111 -0
  230. package/ai/skills/stacks-marketing-cold-email/references/follow-up-sequences.md +81 -0
  231. package/ai/skills/stacks-marketing-cold-email/references/frameworks.md +90 -0
  232. package/ai/skills/stacks-marketing-cold-email/references/linkedin-outreach.md +91 -0
  233. package/ai/skills/stacks-marketing-cold-email/references/multichannel-cadence.md +79 -0
  234. package/ai/skills/stacks-marketing-cold-email/references/outbound-plays.md +88 -0
  235. package/ai/skills/stacks-marketing-cold-email/references/personalization.md +90 -0
  236. package/ai/skills/stacks-marketing-cold-email/references/reply-handling.md +65 -0
  237. package/ai/skills/stacks-marketing-cold-email/references/subject-lines.md +53 -0
  238. package/ai/skills/stacks-marketing-community-marketing/LICENSE +21 -0
  239. package/ai/skills/stacks-marketing-community-marketing/NOTICE.md +13 -0
  240. package/ai/skills/stacks-marketing-community-marketing/PLAYBOOK.md +171 -0
  241. package/ai/skills/stacks-marketing-community-marketing/SKILL.md +30 -0
  242. package/ai/skills/stacks-marketing-community-marketing/evals/evals.json +103 -0
  243. package/ai/skills/stacks-marketing-community-marketing/references/community-models.md +63 -0
  244. package/ai/skills/stacks-marketing-competitor-profiling/LICENSE +21 -0
  245. package/ai/skills/stacks-marketing-competitor-profiling/NOTICE.md +13 -0
  246. package/ai/skills/stacks-marketing-competitor-profiling/PLAYBOOK.md +436 -0
  247. package/ai/skills/stacks-marketing-competitor-profiling/SKILL.md +30 -0
  248. package/ai/skills/stacks-marketing-competitor-profiling/evals/evals.json +97 -0
  249. package/ai/skills/stacks-marketing-competitor-profiling/references/templates.md +167 -0
  250. package/ai/skills/stacks-marketing-competitor-profiling/references/tool-reference.md +314 -0
  251. package/ai/skills/stacks-marketing-competitors/LICENSE +21 -0
  252. package/ai/skills/stacks-marketing-competitors/NOTICE.md +13 -0
  253. package/ai/skills/stacks-marketing-competitors/PLAYBOOK.md +283 -0
  254. package/ai/skills/stacks-marketing-competitors/SKILL.md +30 -0
  255. package/ai/skills/stacks-marketing-competitors/evals/evals.json +119 -0
  256. package/ai/skills/stacks-marketing-competitors/references/content-architecture.md +277 -0
  257. package/ai/skills/stacks-marketing-competitors/references/templates.md +226 -0
  258. package/ai/skills/stacks-marketing-content-strategy/LICENSE +21 -0
  259. package/ai/skills/stacks-marketing-content-strategy/NOTICE.md +13 -0
  260. package/ai/skills/stacks-marketing-content-strategy/PLAYBOOK.md +437 -0
  261. package/ai/skills/stacks-marketing-content-strategy/SKILL.md +30 -0
  262. package/ai/skills/stacks-marketing-content-strategy/evals/evals.json +116 -0
  263. package/ai/skills/stacks-marketing-content-strategy/references/content-distribution.md +83 -0
  264. package/ai/skills/stacks-marketing-content-strategy/references/headless-cms.md +194 -0
  265. package/ai/skills/stacks-marketing-copy-editing/LICENSE +21 -0
  266. package/ai/skills/stacks-marketing-copy-editing/NOTICE.md +13 -0
  267. package/ai/skills/stacks-marketing-copy-editing/PLAYBOOK.md +485 -0
  268. package/ai/skills/stacks-marketing-copy-editing/SKILL.md +30 -0
  269. package/ai/skills/stacks-marketing-copy-editing/evals/evals.json +117 -0
  270. package/ai/skills/stacks-marketing-copy-editing/references/checklist.md +77 -0
  271. package/ai/skills/stacks-marketing-copy-editing/references/content-refresh.md +71 -0
  272. package/ai/skills/stacks-marketing-copy-editing/references/plain-english-alternatives.md +394 -0
  273. package/ai/skills/stacks-marketing-copywriting/LICENSE +21 -0
  274. package/ai/skills/stacks-marketing-copywriting/NOTICE.md +13 -0
  275. package/ai/skills/stacks-marketing-copywriting/PLAYBOOK.md +282 -0
  276. package/ai/skills/stacks-marketing-copywriting/SKILL.md +30 -0
  277. package/ai/skills/stacks-marketing-copywriting/evals/evals.json +140 -0
  278. package/ai/skills/stacks-marketing-copywriting/references/ai-tells.md +261 -0
  279. package/ai/skills/stacks-marketing-copywriting/references/copy-frameworks.md +432 -0
  280. package/ai/skills/stacks-marketing-copywriting/references/natural-transitions.md +256 -0
  281. package/ai/skills/stacks-marketing-council/LICENSE +21 -0
  282. package/ai/skills/stacks-marketing-council/NOTICE.md +13 -0
  283. package/ai/skills/stacks-marketing-council/PLAYBOOK.md +157 -0
  284. package/ai/skills/stacks-marketing-council/SKILL.md +30 -0
  285. package/ai/skills/stacks-marketing-council/evals/evals.json +70 -0
  286. package/ai/skills/stacks-marketing-council/references/advisor-template.md +51 -0
  287. package/ai/skills/stacks-marketing-council/references/advisors/alex-hormozi.md +43 -0
  288. package/ai/skills/stacks-marketing-council/references/advisors/ann-handley.md +43 -0
  289. package/ai/skills/stacks-marketing-council/references/advisors/april-dunford.md +41 -0
  290. package/ai/skills/stacks-marketing-council/references/advisors/byron-sharp.md +43 -0
  291. package/ai/skills/stacks-marketing-council/references/advisors/claude-hopkins.md +42 -0
  292. package/ai/skills/stacks-marketing-council/references/advisors/david-ogilvy.md +42 -0
  293. package/ai/skills/stacks-marketing-council/references/advisors/eugene-schwartz.md +42 -0
  294. package/ai/skills/stacks-marketing-council/references/advisors/gary-halbert.md +43 -0
  295. package/ai/skills/stacks-marketing-council/references/advisors/gary-vaynerchuk.md +43 -0
  296. package/ai/skills/stacks-marketing-council/references/advisors/rory-sutherland.md +42 -0
  297. package/ai/skills/stacks-marketing-council/references/advisors/russell-brunson.md +43 -0
  298. package/ai/skills/stacks-marketing-council/references/advisors/seth-godin.md +43 -0
  299. package/ai/skills/stacks-marketing-cro/LICENSE +21 -0
  300. package/ai/skills/stacks-marketing-cro/NOTICE.md +13 -0
  301. package/ai/skills/stacks-marketing-cro/PLAYBOOK.md +194 -0
  302. package/ai/skills/stacks-marketing-cro/SKILL.md +30 -0
  303. package/ai/skills/stacks-marketing-cro/evals/evals.json +111 -0
  304. package/ai/skills/stacks-marketing-cro/references/experiments.md +248 -0
  305. package/ai/skills/stacks-marketing-cro/references/form.md +422 -0
  306. package/ai/skills/stacks-marketing-customer-research/LICENSE +21 -0
  307. package/ai/skills/stacks-marketing-customer-research/NOTICE.md +13 -0
  308. package/ai/skills/stacks-marketing-customer-research/PLAYBOOK.md +304 -0
  309. package/ai/skills/stacks-marketing-customer-research/SKILL.md +30 -0
  310. package/ai/skills/stacks-marketing-customer-research/evals/evals.json +176 -0
  311. package/ai/skills/stacks-marketing-customer-research/references/interviews-and-surveys.md +155 -0
  312. package/ai/skills/stacks-marketing-customer-research/references/source-guides.md +401 -0
  313. package/ai/skills/stacks-marketing-directory-submissions/LICENSE +21 -0
  314. package/ai/skills/stacks-marketing-directory-submissions/NOTICE.md +13 -0
  315. package/ai/skills/stacks-marketing-directory-submissions/PLAYBOOK.md +397 -0
  316. package/ai/skills/stacks-marketing-directory-submissions/SKILL.md +30 -0
  317. package/ai/skills/stacks-marketing-directory-submissions/evals/evals.json +121 -0
  318. package/ai/skills/stacks-marketing-directory-submissions/references/directory-list.md +545 -0
  319. package/ai/skills/stacks-marketing-directory-submissions/references/positioning-variations.md +232 -0
  320. package/ai/skills/stacks-marketing-directory-submissions/references/submission-tracker-template.csv +272 -0
  321. package/ai/skills/stacks-marketing-emails/LICENSE +21 -0
  322. package/ai/skills/stacks-marketing-emails/NOTICE.md +13 -0
  323. package/ai/skills/stacks-marketing-emails/PLAYBOOK.md +336 -0
  324. package/ai/skills/stacks-marketing-emails/SKILL.md +30 -0
  325. package/ai/skills/stacks-marketing-emails/evals/evals.json +105 -0
  326. package/ai/skills/stacks-marketing-emails/references/copy-guidelines.md +113 -0
  327. package/ai/skills/stacks-marketing-emails/references/email-types.md +515 -0
  328. package/ai/skills/stacks-marketing-emails/references/sequence-templates.md +168 -0
  329. package/ai/skills/stacks-marketing-events/LICENSE +21 -0
  330. package/ai/skills/stacks-marketing-events/NOTICE.md +13 -0
  331. package/ai/skills/stacks-marketing-events/PLAYBOOK.md +127 -0
  332. package/ai/skills/stacks-marketing-events/SKILL.md +30 -0
  333. package/ai/skills/stacks-marketing-events/evals/evals.json +92 -0
  334. package/ai/skills/stacks-marketing-events/references/event-portfolio-strategy.md +80 -0
  335. package/ai/skills/stacks-marketing-events/references/speaking.md +49 -0
  336. package/ai/skills/stacks-marketing-events/references/sponsorship-roi.md +57 -0
  337. package/ai/skills/stacks-marketing-events/references/webinar-funnel.md +88 -0
  338. package/ai/skills/stacks-marketing-free-tools/LICENSE +21 -0
  339. package/ai/skills/stacks-marketing-free-tools/NOTICE.md +13 -0
  340. package/ai/skills/stacks-marketing-free-tools/PLAYBOOK.md +186 -0
  341. package/ai/skills/stacks-marketing-free-tools/SKILL.md +30 -0
  342. package/ai/skills/stacks-marketing-free-tools/evals/evals.json +103 -0
  343. package/ai/skills/stacks-marketing-free-tools/references/tool-benchmarks.md +35 -0
  344. package/ai/skills/stacks-marketing-free-tools/references/tool-types.md +217 -0
  345. package/ai/skills/stacks-marketing-ideas/LICENSE +21 -0
  346. package/ai/skills/stacks-marketing-ideas/NOTICE.md +13 -0
  347. package/ai/skills/stacks-marketing-ideas/PLAYBOOK.md +167 -0
  348. package/ai/skills/stacks-marketing-ideas/SKILL.md +30 -0
  349. package/ai/skills/stacks-marketing-ideas/evals/evals.json +105 -0
  350. package/ai/skills/stacks-marketing-ideas/references/guerrilla-marketing.md +56 -0
  351. package/ai/skills/stacks-marketing-ideas/references/ideas-by-category.md +366 -0
  352. package/ai/skills/stacks-marketing-image/LICENSE +21 -0
  353. package/ai/skills/stacks-marketing-image/NOTICE.md +13 -0
  354. package/ai/skills/stacks-marketing-image/PLAYBOOK.md +336 -0
  355. package/ai/skills/stacks-marketing-image/SKILL.md +30 -0
  356. package/ai/skills/stacks-marketing-image/evals/evals.json +89 -0
  357. package/ai/skills/stacks-marketing-image/references/ai-image-prompting.md +229 -0
  358. package/ai/skills/stacks-marketing-influencer-marketing/LICENSE +21 -0
  359. package/ai/skills/stacks-marketing-influencer-marketing/NOTICE.md +13 -0
  360. package/ai/skills/stacks-marketing-influencer-marketing/PLAYBOOK.md +198 -0
  361. package/ai/skills/stacks-marketing-influencer-marketing/SKILL.md +30 -0
  362. package/ai/skills/stacks-marketing-influencer-marketing/evals/evals.json +89 -0
  363. package/ai/skills/stacks-marketing-influencer-marketing/references/ugc-creator-program.md +91 -0
  364. package/ai/skills/stacks-marketing-launch/LICENSE +21 -0
  365. package/ai/skills/stacks-marketing-launch/NOTICE.md +13 -0
  366. package/ai/skills/stacks-marketing-launch/PLAYBOOK.md +381 -0
  367. package/ai/skills/stacks-marketing-launch/SKILL.md +30 -0
  368. package/ai/skills/stacks-marketing-launch/evals/evals.json +135 -0
  369. package/ai/skills/stacks-marketing-launch/references/shipped-changes.md +84 -0
  370. package/ai/skills/stacks-marketing-launch/references/site-launch-qa.md +57 -0
  371. package/ai/skills/stacks-marketing-lead-magnets/LICENSE +21 -0
  372. package/ai/skills/stacks-marketing-lead-magnets/NOTICE.md +13 -0
  373. package/ai/skills/stacks-marketing-lead-magnets/PLAYBOOK.md +308 -0
  374. package/ai/skills/stacks-marketing-lead-magnets/SKILL.md +30 -0
  375. package/ai/skills/stacks-marketing-lead-magnets/evals/evals.json +105 -0
  376. package/ai/skills/stacks-marketing-lead-magnets/references/benchmarks.md +129 -0
  377. package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill-corpus-design.md +89 -0
  378. package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill-release.md +71 -0
  379. package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill.md +109 -0
  380. package/ai/skills/stacks-marketing-lead-magnets/references/format-guide.md +196 -0
  381. package/ai/skills/stacks-marketing-loops/LICENSE +21 -0
  382. package/ai/skills/stacks-marketing-loops/NOTICE.md +13 -0
  383. package/ai/skills/stacks-marketing-loops/PLAYBOOK.md +111 -0
  384. package/ai/skills/stacks-marketing-loops/SKILL.md +30 -0
  385. package/ai/skills/stacks-marketing-loops/evals/evals.json +133 -0
  386. package/ai/skills/stacks-marketing-loops/references/loop-catalog.md +796 -0
  387. package/ai/skills/stacks-marketing-loops/references/loop-guardrails.md +73 -0
  388. package/ai/skills/stacks-marketing-loops/references/loop-orchestration.md +71 -0
  389. package/ai/skills/stacks-marketing-loops/references/loop-state.md +67 -0
  390. package/ai/skills/stacks-marketing-loops/references/loop-template.md +79 -0
  391. package/ai/skills/stacks-marketing-loops/references/outbound-operator.md +86 -0
  392. package/ai/skills/stacks-marketing-loops/references/seo-operator.md +110 -0
  393. package/ai/skills/stacks-marketing-offers/LICENSE +21 -0
  394. package/ai/skills/stacks-marketing-offers/NOTICE.md +13 -0
  395. package/ai/skills/stacks-marketing-offers/PLAYBOOK.md +151 -0
  396. package/ai/skills/stacks-marketing-offers/SKILL.md +30 -0
  397. package/ai/skills/stacks-marketing-offers/evals/evals.json +21 -0
  398. package/ai/skills/stacks-marketing-offers/references/bonus-stacking.md +150 -0
  399. package/ai/skills/stacks-marketing-offers/references/examples.md +215 -0
  400. package/ai/skills/stacks-marketing-offers/references/guarantee-design.md +172 -0
  401. package/ai/skills/stacks-marketing-offers/references/offer-anatomy.md +203 -0
  402. package/ai/skills/stacks-marketing-offers/references/offer-formats.md +240 -0
  403. package/ai/skills/stacks-marketing-offers/references/saas-offers.md +116 -0
  404. package/ai/skills/stacks-marketing-offers/references/scarcity-urgency.md +175 -0
  405. package/ai/skills/stacks-marketing-offers/references/value-equation.md +134 -0
  406. package/ai/skills/stacks-marketing-onboarding/LICENSE +21 -0
  407. package/ai/skills/stacks-marketing-onboarding/NOTICE.md +13 -0
  408. package/ai/skills/stacks-marketing-onboarding/PLAYBOOK.md +257 -0
  409. package/ai/skills/stacks-marketing-onboarding/SKILL.md +30 -0
  410. package/ai/skills/stacks-marketing-onboarding/evals/evals.json +108 -0
  411. package/ai/skills/stacks-marketing-onboarding/references/activation-models.md +57 -0
  412. package/ai/skills/stacks-marketing-onboarding/references/experiments.md +258 -0
  413. package/ai/skills/stacks-marketing-onboarding/references/minimum-path-to-value.md +49 -0
  414. package/ai/skills/stacks-marketing-paywalls/LICENSE +21 -0
  415. package/ai/skills/stacks-marketing-paywalls/NOTICE.md +13 -0
  416. package/ai/skills/stacks-marketing-paywalls/PLAYBOOK.md +223 -0
  417. package/ai/skills/stacks-marketing-paywalls/SKILL.md +30 -0
  418. package/ai/skills/stacks-marketing-paywalls/evals/evals.json +93 -0
  419. package/ai/skills/stacks-marketing-paywalls/references/experiments.md +164 -0
  420. package/ai/skills/stacks-marketing-plan/LICENSE +21 -0
  421. package/ai/skills/stacks-marketing-plan/NOTICE.md +13 -0
  422. package/ai/skills/stacks-marketing-plan/PLAYBOOK.md +300 -0
  423. package/ai/skills/stacks-marketing-plan/SKILL.md +30 -0
  424. package/ai/skills/stacks-marketing-plan/evals/evals.json +140 -0
  425. package/ai/skills/stacks-marketing-plan/references/aarrr-framework.md +180 -0
  426. package/ai/skills/stacks-marketing-plan/references/budget-planning.md +177 -0
  427. package/ai/skills/stacks-marketing-plan/references/client-types.md +373 -0
  428. package/ai/skills/stacks-marketing-plan/references/current-state-rubric.md +255 -0
  429. package/ai/skills/stacks-marketing-plan/references/example-quietude.md +972 -0
  430. package/ai/skills/stacks-marketing-plan/references/funding-stage-unlocks.md +230 -0
  431. package/ai/skills/stacks-marketing-plan/references/growth-patterns.md +190 -0
  432. package/ai/skills/stacks-marketing-plan/references/idea-cross-reference.md +265 -0
  433. package/ai/skills/stacks-marketing-plan/references/market-sizing.md +166 -0
  434. package/ai/skills/stacks-marketing-plan/references/measurement-framework.md +213 -0
  435. package/ai/skills/stacks-marketing-plan/references/methodology.md +365 -0
  436. package/ai/skills/stacks-marketing-plan/references/ops-stack-mapping.md +197 -0
  437. package/ai/skills/stacks-marketing-plan/references/plan-template.md +494 -0
  438. package/ai/skills/stacks-marketing-plan/references/team-and-agency-model.md +278 -0
  439. package/ai/skills/stacks-marketing-popups/LICENSE +21 -0
  440. package/ai/skills/stacks-marketing-popups/NOTICE.md +13 -0
  441. package/ai/skills/stacks-marketing-popups/PLAYBOOK.md +450 -0
  442. package/ai/skills/stacks-marketing-popups/SKILL.md +30 -0
  443. package/ai/skills/stacks-marketing-popups/evals/evals.json +94 -0
  444. package/ai/skills/stacks-marketing-pricing/LICENSE +21 -0
  445. package/ai/skills/stacks-marketing-pricing/NOTICE.md +13 -0
  446. package/ai/skills/stacks-marketing-pricing/PLAYBOOK.md +291 -0
  447. package/ai/skills/stacks-marketing-pricing/SKILL.md +30 -0
  448. package/ai/skills/stacks-marketing-pricing/evals/evals.json +131 -0
  449. package/ai/skills/stacks-marketing-pricing/references/pricing-models.md +66 -0
  450. package/ai/skills/stacks-marketing-pricing/references/pricing-page-teardown.md +87 -0
  451. package/ai/skills/stacks-marketing-pricing/references/research-methods.md +156 -0
  452. package/ai/skills/stacks-marketing-pricing/references/tier-structure.md +232 -0
  453. package/ai/skills/stacks-marketing-product-marketing/LICENSE +21 -0
  454. package/ai/skills/stacks-marketing-product-marketing/NOTICE.md +13 -0
  455. package/ai/skills/stacks-marketing-product-marketing/PLAYBOOK.md +255 -0
  456. package/ai/skills/stacks-marketing-product-marketing/SKILL.md +30 -0
  457. package/ai/skills/stacks-marketing-product-marketing/evals/evals.json +98 -0
  458. package/ai/skills/stacks-marketing-programmatic-seo/LICENSE +21 -0
  459. package/ai/skills/stacks-marketing-programmatic-seo/NOTICE.md +13 -0
  460. package/ai/skills/stacks-marketing-programmatic-seo/PLAYBOOK.md +238 -0
  461. package/ai/skills/stacks-marketing-programmatic-seo/SKILL.md +30 -0
  462. package/ai/skills/stacks-marketing-programmatic-seo/evals/evals.json +107 -0
  463. package/ai/skills/stacks-marketing-programmatic-seo/references/implementation-platforms.md +41 -0
  464. package/ai/skills/stacks-marketing-programmatic-seo/references/playbooks.md +308 -0
  465. package/ai/skills/stacks-marketing-prospecting/LICENSE +21 -0
  466. package/ai/skills/stacks-marketing-prospecting/NOTICE.md +13 -0
  467. package/ai/skills/stacks-marketing-prospecting/PLAYBOOK.md +273 -0
  468. package/ai/skills/stacks-marketing-prospecting/SKILL.md +30 -0
  469. package/ai/skills/stacks-marketing-prospecting/evals/evals.json +163 -0
  470. package/ai/skills/stacks-marketing-prospecting/references/account-research.md +59 -0
  471. package/ai/skills/stacks-marketing-prospecting/references/b2b-prospecting.md +106 -0
  472. package/ai/skills/stacks-marketing-prospecting/references/compliance.md +161 -0
  473. package/ai/skills/stacks-marketing-prospecting/references/data-sources.md +300 -0
  474. package/ai/skills/stacks-marketing-prospecting/references/demand-signals.md +131 -0
  475. package/ai/skills/stacks-marketing-prospecting/references/enrichment-playbook.md +61 -0
  476. package/ai/skills/stacks-marketing-prospecting/references/local-prospecting.md +165 -0
  477. package/ai/skills/stacks-marketing-prospecting/references/saas-prospecting.md +123 -0
  478. package/ai/skills/stacks-marketing-prospecting/references/signal-plays.md +99 -0
  479. package/ai/skills/stacks-marketing-prospecting/references/sourcing-and-enrichment.md +89 -0
  480. package/ai/skills/stacks-marketing-psychology/LICENSE +21 -0
  481. package/ai/skills/stacks-marketing-psychology/NOTICE.md +13 -0
  482. package/ai/skills/stacks-marketing-psychology/PLAYBOOK.md +451 -0
  483. package/ai/skills/stacks-marketing-psychology/SKILL.md +30 -0
  484. package/ai/skills/stacks-marketing-psychology/evals/evals.json +88 -0
  485. package/ai/skills/stacks-marketing-public-relations/LICENSE +21 -0
  486. package/ai/skills/stacks-marketing-public-relations/NOTICE.md +13 -0
  487. package/ai/skills/stacks-marketing-public-relations/PLAYBOOK.md +150 -0
  488. package/ai/skills/stacks-marketing-public-relations/SKILL.md +30 -0
  489. package/ai/skills/stacks-marketing-public-relations/evals/evals.json +36 -0
  490. package/ai/skills/stacks-marketing-public-relations/references/crisis-communications.md +113 -0
  491. package/ai/skills/stacks-marketing-public-relations/references/journalist-pitching.md +368 -0
  492. package/ai/skills/stacks-marketing-public-relations/references/media-outlets.md +207 -0
  493. package/ai/skills/stacks-marketing-public-relations/references/newsjacking.md +220 -0
  494. package/ai/skills/stacks-marketing-public-relations/references/podcast-guest-prep.md +60 -0
  495. package/ai/skills/stacks-marketing-public-relations/references/press-platforms.md +188 -0
  496. package/ai/skills/stacks-marketing-public-relations/references/statement-templates.md +145 -0
  497. package/ai/skills/stacks-marketing-public-relations/references/story-angles.md +87 -0
  498. package/ai/skills/stacks-marketing-referrals/LICENSE +21 -0
  499. package/ai/skills/stacks-marketing-referrals/NOTICE.md +13 -0
  500. package/ai/skills/stacks-marketing-referrals/PLAYBOOK.md +279 -0
  501. package/ai/skills/stacks-marketing-referrals/SKILL.md +30 -0
  502. package/ai/skills/stacks-marketing-referrals/evals/evals.json +202 -0
  503. package/ai/skills/stacks-marketing-referrals/references/affiliate-operations.md +64 -0
  504. package/ai/skills/stacks-marketing-referrals/references/affiliate-programs.md +167 -0
  505. package/ai/skills/stacks-marketing-referrals/references/program-examples.md +151 -0
  506. package/ai/skills/stacks-marketing-referrals/references/review-platform-rules.md +36 -0
  507. package/ai/skills/stacks-marketing-referrals/references/review-program-operations.md +62 -0
  508. package/ai/skills/stacks-marketing-referrals/references/review-programs.md +96 -0
  509. package/ai/skills/stacks-marketing-referrals/references/viral-mechanisms.md +102 -0
  510. package/ai/skills/stacks-marketing-revops/LICENSE +21 -0
  511. package/ai/skills/stacks-marketing-revops/NOTICE.md +13 -0
  512. package/ai/skills/stacks-marketing-revops/PLAYBOOK.md +345 -0
  513. package/ai/skills/stacks-marketing-revops/SKILL.md +30 -0
  514. package/ai/skills/stacks-marketing-revops/evals/evals.json +104 -0
  515. package/ai/skills/stacks-marketing-revops/references/automation-playbooks.md +290 -0
  516. package/ai/skills/stacks-marketing-revops/references/inbound-routing.md +43 -0
  517. package/ai/skills/stacks-marketing-revops/references/lifecycle-definitions.md +309 -0
  518. package/ai/skills/stacks-marketing-revops/references/routing-rules.md +203 -0
  519. package/ai/skills/stacks-marketing-revops/references/scoring-models.md +247 -0
  520. package/ai/skills/stacks-marketing-sales-enablement/LICENSE +21 -0
  521. package/ai/skills/stacks-marketing-sales-enablement/NOTICE.md +13 -0
  522. package/ai/skills/stacks-marketing-sales-enablement/PLAYBOOK.md +423 -0
  523. package/ai/skills/stacks-marketing-sales-enablement/SKILL.md +30 -0
  524. package/ai/skills/stacks-marketing-sales-enablement/evals/evals.json +153 -0
  525. package/ai/skills/stacks-marketing-sales-enablement/references/cold-call-scripts.md +68 -0
  526. package/ai/skills/stacks-marketing-sales-enablement/references/deck-frameworks.md +263 -0
  527. package/ai/skills/stacks-marketing-sales-enablement/references/demo-scripts.md +355 -0
  528. package/ai/skills/stacks-marketing-sales-enablement/references/objection-library.md +270 -0
  529. package/ai/skills/stacks-marketing-sales-enablement/references/one-pager-templates.md +208 -0
  530. package/ai/skills/stacks-marketing-sales-enablement/references/win-loss-analysis.md +72 -0
  531. package/ai/skills/stacks-marketing-schema/LICENSE +21 -0
  532. package/ai/skills/stacks-marketing-schema/NOTICE.md +13 -0
  533. package/ai/skills/stacks-marketing-schema/PLAYBOOK.md +187 -0
  534. package/ai/skills/stacks-marketing-schema/SKILL.md +30 -0
  535. package/ai/skills/stacks-marketing-schema/evals/evals.json +127 -0
  536. package/ai/skills/stacks-marketing-schema/references/schema-examples.md +392 -0
  537. package/ai/skills/stacks-marketing-seo-audit/LICENSE +21 -0
  538. package/ai/skills/stacks-marketing-seo-audit/NOTICE.md +13 -0
  539. package/ai/skills/stacks-marketing-seo-audit/PLAYBOOK.md +492 -0
  540. package/ai/skills/stacks-marketing-seo-audit/SKILL.md +30 -0
  541. package/ai/skills/stacks-marketing-seo-audit/evals/evals.json +204 -0
  542. package/ai/skills/stacks-marketing-seo-audit/references/ai-writing-detection.md +200 -0
  543. package/ai/skills/stacks-marketing-seo-audit/references/international-seo.md +228 -0
  544. package/ai/skills/stacks-marketing-seo-audit/references/local-seo-pages-and-measurement.md +39 -0
  545. package/ai/skills/stacks-marketing-seo-audit/references/local-seo-profile-and-citations.md +41 -0
  546. package/ai/skills/stacks-marketing-seo-audit/references/local-seo.md +86 -0
  547. package/ai/skills/stacks-marketing-seo-audit/references/rankings-push.md +62 -0
  548. package/ai/skills/stacks-marketing-seo-audit/references/title-tags.md +89 -0
  549. package/ai/skills/stacks-marketing-signup/LICENSE +21 -0
  550. package/ai/skills/stacks-marketing-signup/NOTICE.md +13 -0
  551. package/ai/skills/stacks-marketing-signup/PLAYBOOK.md +359 -0
  552. package/ai/skills/stacks-marketing-signup/SKILL.md +30 -0
  553. package/ai/skills/stacks-marketing-signup/evals/evals.json +88 -0
  554. package/ai/skills/stacks-marketing-site-architecture/LICENSE +21 -0
  555. package/ai/skills/stacks-marketing-site-architecture/NOTICE.md +13 -0
  556. package/ai/skills/stacks-marketing-site-architecture/PLAYBOOK.md +355 -0
  557. package/ai/skills/stacks-marketing-site-architecture/SKILL.md +30 -0
  558. package/ai/skills/stacks-marketing-site-architecture/evals/evals.json +113 -0
  559. package/ai/skills/stacks-marketing-site-architecture/references/mermaid-templates.md +216 -0
  560. package/ai/skills/stacks-marketing-site-architecture/references/navigation-patterns.md +305 -0
  561. package/ai/skills/stacks-marketing-site-architecture/references/platforms-and-migration.md +86 -0
  562. package/ai/skills/stacks-marketing-site-architecture/references/site-type-templates.md +293 -0
  563. package/ai/skills/stacks-marketing-sms/LICENSE +21 -0
  564. package/ai/skills/stacks-marketing-sms/NOTICE.md +13 -0
  565. package/ai/skills/stacks-marketing-sms/PLAYBOOK.md +348 -0
  566. package/ai/skills/stacks-marketing-sms/SKILL.md +30 -0
  567. package/ai/skills/stacks-marketing-sms/evals/evals.json +118 -0
  568. package/ai/skills/stacks-marketing-sms/references/compliance.md +202 -0
  569. package/ai/skills/stacks-marketing-sms/references/platforms.md +318 -0
  570. package/ai/skills/stacks-marketing-sms/references/sequence-templates.md +282 -0
  571. package/ai/skills/stacks-marketing-sms/references/whatsapp.md +260 -0
  572. package/ai/skills/stacks-marketing-social/LICENSE +21 -0
  573. package/ai/skills/stacks-marketing-social/NOTICE.md +13 -0
  574. package/ai/skills/stacks-marketing-social/PLAYBOOK.md +452 -0
  575. package/ai/skills/stacks-marketing-social/SKILL.md +30 -0
  576. package/ai/skills/stacks-marketing-social/evals/evals.json +150 -0
  577. package/ai/skills/stacks-marketing-social/references/carousel-frameworks.md +141 -0
  578. package/ai/skills/stacks-marketing-social/references/listening-sources-template.md +123 -0
  579. package/ai/skills/stacks-marketing-social/references/listening.md +288 -0
  580. package/ai/skills/stacks-marketing-social/references/platform-limits.md +110 -0
  581. package/ai/skills/stacks-marketing-social/references/platforms.md +176 -0
  582. package/ai/skills/stacks-marketing-social/references/post-templates.md +179 -0
  583. package/ai/skills/stacks-marketing-social/references/reverse-engineering.md +195 -0
  584. package/ai/skills/stacks-marketing-social/references/short-form-video.md +237 -0
  585. package/ai/skills/stacks-marketing-social/references/x-algorithm.md +69 -0
  586. package/ai/skills/stacks-marketing-video/LICENSE +21 -0
  587. package/ai/skills/stacks-marketing-video/NOTICE.md +13 -0
  588. package/ai/skills/stacks-marketing-video/PLAYBOOK.md +330 -0
  589. package/ai/skills/stacks-marketing-video/SKILL.md +30 -0
  590. package/ai/skills/stacks-marketing-video/evals/evals.json +118 -0
  591. package/ai/skills/stacks-marketing-video/references/ai-video-prompting.md +175 -0
  592. package/ai/skills/stacks-marketing-video/references/edit-anatomy.md +86 -0
  593. package/ai/skills/stacks-marketing-video/references/product-demo-recording.md +176 -0
  594. package/ai/skills/stacks-middleware/SKILL.md +37 -21
  595. package/ai/skills/stacks-migrations/SKILL.md +29 -5
  596. package/ai/skills/stacks-mobile/SKILL.md +25 -4
  597. package/ai/skills/stacks-models/SKILL.md +35 -15
  598. package/ai/skills/stacks-models/references/model-capabilities.md +104 -0
  599. package/ai/skills/stacks-native/CAPABILITIES.md +536 -0
  600. package/ai/skills/stacks-native/CATALOG.md +930 -0
  601. package/ai/skills/stacks-native/RECIPES.md +108 -0
  602. package/ai/skills/stacks-native/SKILL.md +79 -0
  603. package/ai/skills/stacks-newsletter/SKILL.md +39 -0
  604. package/ai/skills/stacks-notifications/SKILL.md +118 -203
  605. package/ai/skills/stacks-objects/SKILL.md +18 -4
  606. package/ai/skills/stacks-orm/SKILL.md +112 -328
  607. package/ai/skills/stacks-pagination/SKILL.md +40 -0
  608. package/ai/skills/stacks-path/SKILL.md +38 -18
  609. package/ai/skills/stacks-payments/SKILL.md +9 -1
  610. package/ai/skills/stacks-pr/CREDITS.md +3 -0
  611. package/ai/skills/stacks-pr/LICENSE +21 -0
  612. package/ai/skills/stacks-pr/NOTICE.md +10 -0
  613. package/ai/skills/stacks-pr/PLAYBOOK.md +127 -0
  614. package/ai/skills/stacks-pr/SKILL.md +23 -0
  615. package/ai/skills/stacks-prototype/LICENSE +21 -0
  616. package/ai/skills/stacks-prototype/NOTICE.md +10 -0
  617. package/ai/skills/stacks-prototype/SKILL.md +6 -0
  618. package/ai/skills/stacks-push/SKILL.md +20 -0
  619. package/ai/skills/stacks-query-builder/SKILL.md +21 -5
  620. package/ai/skills/stacks-queue/DURABLE-WORKFLOWS.md +121 -0
  621. package/ai/skills/stacks-queue/SKILL.md +37 -6
  622. package/ai/skills/stacks-realtime/SKILL.md +29 -140
  623. package/ai/skills/stacks-redesign/SKILL.md +1 -1
  624. package/ai/skills/stacks-registry/SKILL.md +20 -48
  625. package/ai/skills/stacks-repl/SKILL.md +31 -7
  626. package/ai/skills/stacks-research/LICENSE +21 -0
  627. package/ai/skills/stacks-research/NOTICE.md +10 -0
  628. package/ai/skills/stacks-research/PLAYBOOK.md +10 -0
  629. package/ai/skills/stacks-research/SKILL.md +23 -0
  630. package/ai/skills/stacks-retro/LICENSE +21 -0
  631. package/ai/skills/stacks-retro/NOTICE.md +10 -0
  632. package/ai/skills/stacks-retro/SKILL.md +10 -0
  633. package/ai/skills/stacks-review/LICENSE +21 -0
  634. package/ai/skills/stacks-review/NOTICE.md +10 -0
  635. package/ai/skills/stacks-review/SKILL.md +15 -0
  636. package/ai/skills/stacks-router/SKILL.md +33 -2
  637. package/ai/skills/stacks-routes/SKILL.md +25 -2
  638. package/ai/skills/stacks-scaffold-exercises/LICENSE +21 -0
  639. package/ai/skills/stacks-scaffold-exercises/NOTICE.md +10 -0
  640. package/ai/skills/stacks-scaffold-exercises/PLAYBOOK.md +106 -0
  641. package/ai/skills/stacks-scaffold-exercises/SKILL.md +23 -0
  642. package/ai/skills/stacks-scaffolding/SKILL.md +27 -11
  643. package/ai/skills/stacks-scheduler/SKILL.md +52 -25
  644. package/ai/skills/stacks-search-engine/SKILL.md +28 -7
  645. package/ai/skills/stacks-security/SKILL.md +22 -6
  646. package/ai/skills/stacks-server/SKILL.md +47 -85
  647. package/ai/skills/stacks-setup-deep-modules/LICENSE +21 -0
  648. package/ai/skills/stacks-setup-deep-modules/NOTICE.md +10 -0
  649. package/ai/skills/stacks-setup-deep-modules/SKILL.md +55 -0
  650. package/ai/skills/stacks-setup-engineering/LICENSE +21 -0
  651. package/ai/skills/stacks-setup-engineering/NOTICE.md +10 -0
  652. package/ai/skills/stacks-setup-engineering/PLAYBOOK.md +115 -0
  653. package/ai/skills/stacks-setup-engineering/SKILL.md +24 -0
  654. package/ai/skills/stacks-setup-engineering/domain.md +51 -0
  655. package/ai/skills/stacks-setup-engineering/issue-tracker-github.md +46 -0
  656. package/ai/skills/stacks-setup-engineering/issue-tracker-gitlab.md +46 -0
  657. package/ai/skills/stacks-setup-engineering/issue-tracker-local.md +30 -0
  658. package/ai/skills/stacks-setup-engineering/triage-labels.md +15 -0
  659. package/ai/skills/stacks-sites/SKILL.md +44 -0
  660. package/ai/skills/stacks-skills/SKILL.md +33 -0
  661. package/ai/skills/stacks-slug/SKILL.md +15 -12
  662. package/ai/skills/stacks-sms/SKILL.md +33 -6
  663. package/ai/skills/stacks-socials/SKILL.md +81 -294
  664. package/ai/skills/stacks-storage/SKILL.md +34 -15
  665. package/ai/skills/stacks-storage/UPLOADS-AND-DISKS.md +133 -0
  666. package/ai/skills/stacks-strings/SKILL.md +41 -35
  667. package/ai/skills/stacks-stx/SKILL.md +63 -58
  668. package/ai/skills/stacks-tdd/LICENSE +21 -0
  669. package/ai/skills/stacks-tdd/NOTICE.md +10 -0
  670. package/ai/skills/stacks-tdd/SKILL.md +10 -0
  671. package/ai/skills/stacks-tdd/mocking.md +59 -0
  672. package/ai/skills/stacks-tdd/tests.md +77 -0
  673. package/ai/skills/stacks-teach/GLOSSARY-FORMAT.md +35 -0
  674. package/ai/skills/stacks-teach/LEARNING-RECORD-FORMAT.md +46 -0
  675. package/ai/skills/stacks-teach/LICENSE +21 -0
  676. package/ai/skills/stacks-teach/MISSION-FORMAT.md +31 -0
  677. package/ai/skills/stacks-teach/NOTICE.md +10 -0
  678. package/ai/skills/stacks-teach/PLAYBOOK.md +136 -0
  679. package/ai/skills/stacks-teach/RESOURCES-FORMAT.md +32 -0
  680. package/ai/skills/stacks-teach/SKILL.md +24 -0
  681. package/ai/skills/stacks-technical-diagrams/SKILL.md +2 -2
  682. package/ai/skills/stacks-technical-diagrams/bin/diagrams +1 -1
  683. package/ai/skills/stacks-technical-diagrams/renderers/shared/bun-runtime.mjs +1 -1
  684. package/ai/skills/stacks-test-fixtures/LICENSE +21 -0
  685. package/ai/skills/stacks-test-fixtures/NOTICE.md +10 -0
  686. package/ai/skills/stacks-test-fixtures/SKILL.md +38 -0
  687. package/ai/skills/stacks-testing/SKILL.md +77 -4
  688. package/ai/skills/stacks-to-questionnaire/LICENSE +21 -0
  689. package/ai/skills/stacks-to-questionnaire/NOTICE.md +10 -0
  690. package/ai/skills/stacks-to-questionnaire/PLAYBOOK.md +51 -0
  691. package/ai/skills/stacks-to-questionnaire/SKILL.md +24 -0
  692. package/ai/skills/stacks-to-spec/LICENSE +21 -0
  693. package/ai/skills/stacks-to-spec/NOTICE.md +10 -0
  694. package/ai/skills/stacks-to-spec/PLAYBOOK.md +72 -0
  695. package/ai/skills/stacks-to-spec/SKILL.md +24 -0
  696. package/ai/skills/stacks-to-tickets/LICENSE +21 -0
  697. package/ai/skills/stacks-to-tickets/NOTICE.md +10 -0
  698. package/ai/skills/stacks-to-tickets/PLAYBOOK.md +102 -0
  699. package/ai/skills/stacks-to-tickets/SKILL.md +24 -0
  700. package/ai/skills/stacks-triage/AGENT-BRIEF.md +207 -0
  701. package/ai/skills/stacks-triage/LICENSE +21 -0
  702. package/ai/skills/stacks-triage/NOTICE.md +10 -0
  703. package/ai/skills/stacks-triage/OUT-OF-SCOPE.md +105 -0
  704. package/ai/skills/stacks-triage/PLAYBOOK.md +109 -0
  705. package/ai/skills/stacks-triage/SKILL.md +24 -0
  706. package/ai/skills/stacks-tunnel/SKILL.md +29 -19
  707. package/ai/skills/stacks-types/SKILL.md +77 -168
  708. package/ai/skills/stacks-ui/SKILL.md +66 -228
  709. package/ai/skills/stacks-unslop/NOTICE.md +25 -0
  710. package/ai/skills/stacks-unslop/SKILL.md +95 -0
  711. package/ai/skills/stacks-unslop/references/core-contract.md +88 -0
  712. package/ai/skills/stacks-unslop/references/patterns.md +110 -0
  713. package/ai/skills/stacks-unslop/references/presets.md +37 -0
  714. package/ai/skills/stacks-unslop/references/voice.md +95 -0
  715. package/ai/skills/stacks-utils/SKILL.md +45 -25
  716. package/ai/skills/stacks-validation/SKILL.md +67 -4
  717. package/ai/skills/stacks-video/SKILL.md +33 -0
  718. package/ai/skills/stacks-wait-what/LICENSE +21 -0
  719. package/ai/skills/stacks-wait-what/NOTICE.md +10 -0
  720. package/ai/skills/stacks-wait-what/PLAYBOOK.md +4 -0
  721. package/ai/skills/stacks-wait-what/SKILL.md +24 -0
  722. package/ai/skills/stacks-wayfinder/LICENSE +21 -0
  723. package/ai/skills/stacks-wayfinder/NOTICE.md +10 -0
  724. package/ai/skills/stacks-wayfinder/PLAYBOOK.md +125 -0
  725. package/ai/skills/stacks-wayfinder/SKILL.md +24 -0
  726. package/ai/skills/stacks-whois/SKILL.md +13 -3
  727. package/ai/skills/stacks-wizard/LICENSE +21 -0
  728. package/ai/skills/stacks-wizard/NOTICE.md +10 -0
  729. package/ai/skills/stacks-wizard/SKILL.md +8 -0
  730. package/ai/skills/stacks-wizard/scripts/template.sh +42 -26
  731. package/ai/skills/stacks-writing-beats/LICENSE +21 -0
  732. package/ai/skills/stacks-writing-beats/NOTICE.md +10 -0
  733. package/ai/skills/stacks-writing-beats/PLAYBOOK.md +64 -0
  734. package/ai/skills/stacks-writing-beats/SKILL.md +28 -0
  735. package/ai/skills/stacks-writing-for-agents/LICENSE +21 -0
  736. package/ai/skills/stacks-writing-for-agents/NOTICE.md +10 -0
  737. package/ai/skills/stacks-writing-for-agents/SKILL.md +7 -1
  738. package/ai/skills/stacks-writing-fragments/LICENSE +21 -0
  739. package/ai/skills/stacks-writing-fragments/NOTICE.md +10 -0
  740. package/ai/skills/stacks-writing-fragments/PLAYBOOK.md +76 -0
  741. package/ai/skills/stacks-writing-fragments/SKILL.md +28 -0
  742. package/ai/skills/stacks-writing-shape/LICENSE +21 -0
  743. package/ai/skills/stacks-writing-shape/NOTICE.md +10 -0
  744. package/ai/skills/stacks-writing-shape/PLAYBOOK.md +76 -0
  745. package/ai/skills/stacks-writing-shape/SKILL.md +28 -0
  746. package/ide/vscode/package.json +1 -1
  747. package/package.json +2 -2
  748. /package/ai/skills/stacks-technical-diagrams/{bunfig.toml → runtime.toml} +0 -0
@@ -0,0 +1,15 @@
1
+ # Triage Labels
2
+
3
+ The skills speak in terms of five canonical triage roles. This file maps those roles to the actual label strings used in this repo's issue tracker.
4
+
5
+ | Label in mattpocock/skills | Label in our tracker | Meaning |
6
+ | -------------------------- | -------------------- | ---------------------------------------- |
7
+ | `needs-triage` | `needs-triage` | Maintainer needs to evaluate this issue |
8
+ | `needs-info` | `needs-info` | Waiting on reporter for more information |
9
+ | `ready-for-agent` | `ready-for-agent` | Fully specified, ready for an AFK agent |
10
+ | `ready-for-human` | `ready-for-human` | Requires human implementation |
11
+ | `wontfix` | `wontfix` | Will not be actioned |
12
+
13
+ When a skill mentions a role (e.g. "apply the AFK-ready triage label"), use the corresponding label string from this table.
14
+
15
+ Edit the "Label in our tracker" column to match whatever vocabulary you actually use.
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: stacks-sites
3
+ description: Use when resolving multi-site tenants by host, provisioning sites, scoping queries, or authorizing site-owned content. Covers @stacksjs/sites and config/sites.ts.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # Multi-site tenancy
10
+
11
+ The native package resolves hosts and carries a site snapshot through a request.
12
+ Host tenancy and an authenticated administrator's team ownership are different
13
+ contracts; do not substitute one for the other.
14
+
15
+ ## Resolution and explicit scoping
16
+
17
+ Use siteResolver with configured resolver/store behavior. normalizeHost,
18
+ classifyHost, requestHost and resolveSiteByHost own host parsing and lookup.
19
+ currentSite, currentSiteId, requireSite and runWithSite serve API request context.
20
+ An unresolved site fails a required-site operation rather than silently selecting
21
+ another tenant. Respect platform hosts and configured forwarded-host trust.
22
+
23
+ forSite(query, column, siteId) adds an explicit predicate. Defining a Site model
24
+ does not globally scope every raw query. A site id in an arbitrary request body
25
+ is not an authenticated or host-resolved tenant. siteOwnership governs admin
26
+ resources using the caller's real team membership; public reads scope by host.
27
+
28
+ API AsyncLocalStorage is not the snapshot read by every stx server render.
29
+ Templates use requestContext.site() through the serving layer's per-request
30
+ snapshot. Read stacks-config and stacks-stx before crossing that boundary.
31
+
32
+ ## Provisioning
33
+
34
+ provisionSite refreshes a supplied tenant's site/branding and creates missing
35
+ starter pages while preserving matched existing paths. Verify normalized nested
36
+ slugs and parent paths before relying on reprovisioning idempotency for a complex
37
+ page hierarchy. Pass actual tenancy and
38
+ page input; it does not invent a tenant model or overwrite all CMS content.
39
+ Use stacks-cms document APIs for pages and stacks-forms for site-owned forms.
40
+
41
+ Test two concurrent sites, platform/unresolved hosts, query predicates,
42
+ administrator membership, reprovisioning and edited-page preservation.
43
+ Source: core/sites/src/{context,resolver,middleware,scoping,provision,snapshot}.ts.
44
+ Evidence: sites.test.ts and provision.test.ts.
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: stacks-skills
3
+ description: Use when discovering, validating, overriding, or distributing Stacks agent skills. Covers @stacksjs/skills, app/Skills, bundled defaults and buddy setup:ai.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # Native skill discovery
10
+
11
+ listSkills returns sorted unique names. resolveSkillPath and getSkill resolve
12
+ app/Skills before storage/framework/defaults/ai/skills. A same-name app skill
13
+ shadows the framework definition; it is not a second copy in the result.
14
+
15
+ getSkill returns metadata, instructions, source path and supporting directory
16
+ entries. validateSkill checks name/description requirements, name spelling,
17
+ lengths and folder-name agreement. It is not a full YAML parser or a semantic
18
+ proof that every referenced API exists. Use loadSkillMetadata for discovery
19
+ without inventing a separate registry of names.
20
+
21
+ buddy setup:ai materializes the merged set for the selected agent, using
22
+ per-skill symlinks or copies. Preserve shared references inside skill directories
23
+ so copy mode still works. Do not overwrite authored AGENTS.md or a real CLAUDE.md
24
+ merely to refresh generated files. Future app installs receive bundled skills
25
+ through @stacksjs/defaults and managed scaffold sync.
26
+
27
+ Read stacks-writing-for-agents before authoring instructions. New native
28
+ packages need a skill or an explicit mapping in docs:native-skills. Keep the
29
+ documentation page, sidebar, source notice when imported, and supporting files
30
+ together. Test runtime discovery and fresh-app distribution, not only filenames.
31
+
32
+ Source: core/skills/src/skills.ts and core/buddy/src/commands/setup-ai.ts.
33
+ Evidence: skills.test.ts, setup-ai.test.ts and the docs/distribution contracts.
@@ -18,17 +18,14 @@ URL-friendly slug generation with database uniqueness checking.
18
18
  ```typescript
19
19
  import { uniqueSlug } from '@stacksjs/slug'
20
20
 
21
- // Basic usage — checks 'slug' column in inferred table
21
+ // No table/column supplied: plain slugification, no database collision check
22
22
  const slug = await uniqueSlug('My Blog Post Title')
23
23
  // → 'my-blog-post-title'
24
24
 
25
- // If 'my-blog-post-title' exists in DB:
26
- // → 'my-blog-post-title-2'
27
-
28
- // With options
25
+ // Supply BOTH table and column to check collisions
29
26
  const slug = await uniqueSlug('Product Name', {
30
27
  table: 'products', // database table to check
31
- column: 'slug' // column name (default: 'slug')
28
+ column: 'slug' // required for database checking
32
29
  })
33
30
  ```
34
31
 
@@ -48,7 +45,7 @@ slugify('Ünïcödé Têxt') // 'unicode-text'
48
45
  slugify(' Extra Spaces ') // 'extra-spaces'
49
46
  ```
50
47
 
51
- Re-exported from `ts-slug` — handles Unicode transliteration.
48
+ Re-exported from `ts-slug` - handles Unicode transliteration.
52
49
 
53
50
  ## Model Usage
54
51
 
@@ -62,7 +59,7 @@ defineModel({
62
59
  slug: {
63
60
  unique: true,
64
61
  validation: { rule: schema.string() },
65
- // Auto-generated from title via uniqueSlug()
62
+ // Populate explicitly in the action using uniqueSlug(title, options)
66
63
  }
67
64
  }
68
65
  })
@@ -72,14 +69,20 @@ defineModel({
72
69
 
73
70
  ```typescript
74
71
  interface SlugifyOptions {
75
- table?: string // database table for uniqueness check
76
- column?: string // column name (default: 'slug')
72
+ table: TableNames // database table for uniqueness check
73
+ column: string // no implicit column default
77
74
  }
78
75
  ```
79
76
 
80
77
  ## Gotchas
81
- - `uniqueSlug()` is async — it queries the database
82
- - `slugify()` is sync — no database interaction
78
+ - Omitting either table or column returns the base slug with no query.
79
+ - The check and insert are separate: keep a UNIQUE index and handle/retry an
80
+ insert conflict. A helper cannot reserve the returned slug against a race.
81
+ - Collision attempts are bounded; after repeated conflicts the helper returns
82
+ a cryptographically randomized suffix instead of looping forever.
83
+ - Declaring a slug attribute does not itself populate it from the title.
84
+ - `uniqueSlug()` is async - it queries the database
85
+ - `slugify()` is sync - no database interaction
83
86
  - Collision detection appends `-2`, `-3`, etc. (not random suffixes)
84
87
  - Unicode characters are transliterated (u → u, e → e, etc.)
85
88
  - For string-only slugification without DB, use `slug()` from `@stacksjs/strings` instead
@@ -22,7 +22,7 @@ Multi-driver SMS system with verification (OTP), templates, bulk sending, and a
22
22
 
23
23
  ```typescript
24
24
  // Main facade and functions
25
- import SMS, { sms, send, sendSms, sendBulk, sendTemplate } from '@stacksjs/sms'
25
+ import { SMS, sms, send, sendSms, sendBulk, sendTemplate } from '@stacksjs/sms'
26
26
  import { startVerification, checkVerification, cancelVerification } from '@stacksjs/sms'
27
27
  import { formatE164, isValidPhoneNumber, isEnabled, getConfig, configure, getDriver, init } from '@stacksjs/sms'
28
28
  import { SmsBuilder } from '@stacksjs/sms'
@@ -34,7 +34,7 @@ import { VonageDriver, createVonageDriver } from '@stacksjs/sms'
34
34
 
35
35
  ## SMS Facade Object
36
36
 
37
- The `SMS` default export aggregates all functions:
37
+ The named `SMS` export aggregates the SMS facade functions:
38
38
 
39
39
  ```typescript
40
40
  SMS.init() // Load config from config/sms.ts
@@ -190,7 +190,7 @@ Returns a failed result (without throwing) if the template is not found.
190
190
  import { formatE164, isValidPhoneNumber } from '@stacksjs/sms'
191
191
 
192
192
  // Normalize to E.164 format
193
- formatE164('+1 (234) 567-890') // '+12345678900'
193
+ formatE164('+1 (234) 567-8900') // '+12345678900'
194
194
  formatE164('2345678900', '1') // '+12345678900'
195
195
  formatE164('002345678900') // '+2345678900' (00 prefix stripped)
196
196
 
@@ -371,15 +371,42 @@ interface VerificationResult {
371
371
  ```
372
372
 
373
373
  ## Gotchas
374
- - SMS is **disabled by default** (`enabled: false`) -- must set to `true` in `config/sms.ts`
374
+ - SMS config defaults disabled, but low-level send does not enforce isEnabled; application entrypoints must honor that gate before dispatch
375
375
  - Provider API keys go in `.env`, not config files
376
376
  - Config is loaded lazily via dynamic import on first `send()`/operation -- `init()` pre-loads it
377
377
  - Only Twilio and Vonage drivers are fully implemented; other drivers (gupshup, plivo, sns, telnyx, etc.) are commented-out placeholders
378
378
  - `pinpoint` appears in config but has no driver implementation in `getDriver()` -- using it throws `'Unsupported SMS provider: pinpoint'`
379
379
  - `defaultCountryCode` is a numeric dialing prefix such as `'1'` for the US or `'44'` for the UK
380
380
  - Template variables use single-brace syntax `{variableName}`, NOT double-brace
381
- - `sendBulk()` sends all messages in parallel via `Promise.all` -- no rate limiting
382
- - Twilio verification requires a `verifyServiceSid` passed to the driver constructor, which is not part of the standard config structure
381
+ - Facade sendBulk uses config.bulk.concurrency (default 10) and delayMs between chunks; provider driver sendBulk still sends its chunk concurrently
382
+ - Twilio verification uses drivers.twilio.verifyServiceSid from TWILIO_VERIFY_SERVICE_SID, forwarded by getDriver to the constructor
383
383
  - Vonage JWT authentication is a simplified placeholder -- real RS256 signing is not fully implemented
384
384
  - `getDriver()` creates a new driver instance each time unless accessed through the cached `getDefaultDriver()`
385
385
  - `sendTemplate()` returns a failed result (not an exception) if the template name is not found
386
+
387
+
388
+ ## Native inbound compliance and helpers
389
+
390
+ `handleInboundSms({ from, body }, { appName?, helpContact? })` classifies
391
+ STOP/START/HELP, persists opt-out or opt-in, and returns the reply an inbound
392
+ webhook should send. `optOutPhone`, `optInPhone`,
393
+ `isPhoneOptedOut` and `normalizePhone` use the persistent
394
+ `sms_opt_outs` table. Apply its model migration first. Sending through the
395
+ generic notification SMS channel checks opt-outs; inspect the selected direct
396
+ send path before assuming a low-level provider call applies that policy.
397
+
398
+ For Twilio webhooks, `verifyTwilioWebhook(url, fields, signature, authToken)`
399
+ validates the exact external URL and submitted fields. `parseTwilioInbound`
400
+ normalizes its payload. `classifySmsIntent/smsComplianceReply` are pure helpers;
401
+ they do not themselves persist consent. Use the persistent handleInboundSms
402
+ workflow when consent state must affect future sends.
403
+
404
+ `estimateSmsSegments(body)` reports GSM-7/UCS-2 estimates; provider billing is
405
+ authoritative. `isWithinSmsQuietHours(date, { startHour, endHour, timezone? })`
406
+ is a policy helper, not an automatic send gate. Config keys such as spend caps
407
+ or quiet hours must be traced to their consumers before promising enforcement.
408
+
409
+ Sources: `storage/framework/core/sms/src/opt-out.ts` and `compliance.ts`.
410
+ Tests: `opt-out.test.ts` and `compliance.test.ts` under core/sms/tests.
411
+ Twilio/Vonage implementations do not imply a live provider delivery contract;
412
+ credentials, registration and provider account configuration remain prerequisites.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: stacks-socials
3
- description: Use when implementing social authentication in Stacks - OAuth2 flows with GitHub/Google/Facebook/Twitter providers, the AbstractProvider base class, PKCE support, state management, scope configuration, social user profiles, or token handling. Covers @stacksjs/socials.
3
+ description: Use when implementing social sign-in, Apple callbacks, PKCE/session handoff, named publishing identities, or publishing through native platform drivers. Covers @stacksjs/socials and config/socials.ts.
4
4
  license: MIT
5
5
  compatibility: Bun >= 1.3.0, TypeScript
6
6
  allowed-tools: Read Edit Write Bash Grep Glob
@@ -8,296 +8,83 @@ allowed-tools: Read Edit Write Bash Grep Glob
8
8
 
9
9
  # Stacks Socials
10
10
 
11
- OAuth2-based social authentication with 4 built-in providers.
12
-
13
- ## Key Paths
14
- - Core package: `storage/framework/core/socials/src/`
15
-
16
- ## Source Files
17
- ```
18
- socials/src/
19
- ├── index.ts # re-exports from drivers/
20
- ├── abstract.ts # AbstractProvider base class
21
- ├── token.ts # Token class
22
- ├── types.ts # SocialUser, provider-specific interfaces
23
- ├── exceptions.ts # InvalidStateException, ConfigException
24
- └── drivers/
25
- ├── index.ts # re-exports all 4 providers
26
- ├── github.ts # GitHub OAuth provider
27
- ├── google.ts # Google OAuth provider
28
- ├── facebook.ts # Facebook OAuth provider
29
- └── twitter.ts # Twitter/X OAuth2 + PKCE provider
30
- ```
31
-
32
- ## AbstractProvider Base Class
33
-
34
- All providers extend `AbstractProvider` which implements `ProviderInterface`. The constructor takes a `ProviderConfig`:
35
-
36
- ```typescript
37
- interface ProviderConfig {
38
- clientId: string
39
- clientSecret: string
40
- redirectUrl: string
41
- guzzle?: Record<string, any>
42
- }
43
- ```
44
-
45
- Properties and methods on `AbstractProvider`:
46
-
47
- ```typescript
48
- abstract class AbstractProvider implements ProviderInterface {
49
- // Protected state
50
- protected clientId: string
51
- protected clientSecret: string
52
- protected redirectUrl: string
53
- protected parameters: Record<string, any> = {}
54
- protected _scopes: string[] = []
55
- protected scopeSeparator: string = ','
56
- protected _stateless: boolean = false
57
- protected _usesPKCE: boolean = false
58
- protected user: SocialUser | null = null
59
-
60
- // Abstract methods (each provider implements)
61
- abstract getAuthUrl(): Promise<string> // public, returns Promise
62
- protected abstract getTokenUrl(): string // protected
63
- abstract getAccessToken(code: string): Promise<string>
64
- abstract getUserByToken(token: string): Promise<SocialUser>
65
-
66
- // Scope management
67
- scopes(scopes: string | string[]): this // merge into existing (deduplicates via Set)
68
- setScopes(scopes: string | string[]): this // replace all scopes (deduplicates via Set)
69
- getScopes(): string[]
70
-
71
- // Configuration
72
- setRedirectUrl(url: string): this
73
- stateless(): this // sets _stateless = true
74
- enablePKCE(): this // sets _usesPKCE = true
75
- with(parameters: Record<string, any>): this // replaces custom query parameters
76
-
77
- // User retrieval
78
- async userFromToken(token: string): Promise<SocialUser> // calls getUserByToken, adds token
79
-
80
- // URL building (protected)
81
- protected buildAuthUrlFromBase(url: string, state: string | null): string
82
- protected getCodeFields(state: string | null = null): Record<string, any>
83
- protected formatScopes(scopes: string[], scopeSeparator: string): string
84
-
85
- // State helpers (protected)
86
- protected usesState(): boolean // returns !_stateless
87
- protected isStateless(): boolean // returns _stateless
88
- protected getState(): string // 20 random bytes -> 40 hex chars
89
-
90
- // PKCE helpers (protected)
91
- protected usesPKCE(): boolean
92
- protected getCodeVerifier(): string // 48 random bytes -> 96 hex chars
93
- protected async getCodeChallenge(): Promise<string> // SHA-256 of verifier, base64url encoded
94
- protected getCodeChallengeMethod(): string // always 'S256'
95
- }
96
- ```
97
-
98
- The `getCodeFields()` method builds the query parameters for the authorization URL:
99
- - Always includes: `client_id`, `redirect_uri`, `scope` (joined by `scopeSeparator`), `response_type: 'code'`
100
- - Conditionally adds `state` when `usesState()` is true
101
- - Conditionally adds `code_challenge` and `code_challenge_method` when `usesPKCE()` is true
102
- - Merges in any custom `parameters` set via `with()`
103
-
104
- ## Provider Implementations
105
-
106
- ### GitHub Provider
107
-
108
- ```typescript
109
- class GitHubProvider extends AbstractProvider {
110
- protected baseUrl = 'https://github.com'
111
- protected apiUrl = 'https://api.github.com'
112
- }
113
- ```
114
-
115
- - Config source: `config.services.github` (clientId, clientSecret, redirectUrl, scopes)
116
- - Default scopes: `['read:user', 'user:email']`
117
- - Auth URL: `https://github.com/login/oauth/authorize` with scopes joined by space
118
- - Token URL: `https://github.com/login/oauth/access_token` (POST)
119
- - User API: Fetches `/user` and `/user/emails` in parallel via `Promise.all`
120
- - Email resolution: Primary email first, then verified, then first available
121
- - Uses `@stacksjs/api` `fetcher` for HTTP requests
122
- - Throws `ConfigException` if clientId, clientSecret, or redirectUrl missing
123
- - GitHub token response: `GitHubTokenResponse { access_token, error?, error_description? }`
124
-
125
- ### Google Provider
126
-
127
- ```typescript
128
- class GoogleProvider extends AbstractProvider {
129
- protected baseUrl = 'https://accounts.google.com'
130
- protected apiUrl = 'https://www.googleapis.com'
131
- }
132
- ```
133
-
134
- - Config source: `config.services.google`
135
- - Default scopes: `['https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email']`
136
- - Auth URL: `https://accounts.google.com/o/oauth2/v2/auth` (includes `access_type: 'offline'`, `prompt: 'consent'`)
137
- - Token URL: `https://accounts.google.com/oauth2/v4/token` (POST with `grant_type: 'authorization_code'`)
138
- - User API: `https://www.googleapis.com/oauth2/v2/userinfo` with Bearer token
139
- - Maps `given_name` to `nickname`, `picture` to `avatar`
140
- - Google user type: `{ id, email, verified_email, name, given_name, family_name, picture, locale }`
141
-
142
- ### Facebook Provider
143
-
144
- ```typescript
145
- class FacebookProvider extends AbstractProvider {
146
- protected baseUrl = 'https://www.facebook.com'
147
- protected apiUrl = 'https://graph.facebook.com'
148
- }
149
- ```
150
-
151
- - Config source: `config.services.facebook`
152
- - Default scopes: `['email', 'public_profile']`
153
- - Auth URL: `https://www.facebook.com/v18.0/dialog/oauth` with scopes joined by comma
154
- - Token URL: `https://graph.facebook.com/v18.0/oauth/access_token` (GET request, not POST)
155
- - User API: `https://graph.facebook.com/v18.0/me?fields=id,name,email,picture`
156
- - Token is passed as query parameter `access_token`, not in Authorization header
157
- - Always sets `nickname: null` (Facebook does not expose usernames)
158
- - Avatar extracted from `picture.data.url`
159
- - Error response shape: `{ error: { message, type, code } }` (nested object, unlike other providers)
160
-
161
- ### Twitter/X Provider
162
-
163
- ```typescript
164
- class TwitterProvider extends AbstractProvider {
165
- protected baseUrl = 'https://twitter.com'
166
- protected apiUrl = 'https://api.twitter.com'
167
- private codeVerifier: string | null = null
168
- }
169
- ```
170
-
171
- - Config source: `config.services.twitter`
172
- - Default scopes: `['users.read', 'tweet.read']`
173
- - Uses OAuth 2.0 with PKCE (not OAuth 1.0a)
174
- - Auth URL: `https://twitter.com/i/oauth2/authorize` with PKCE code challenge
175
- - Token URL: `https://api.twitter.com/2/oauth2/token` (POST with Basic auth)
176
- - User API: `https://api.twitter.com/2/users/me?user.fields=profile_image_url` with Bearer token
177
- - PKCE implementation uses its own `generateCodeVerifier()` and `generateCodeChallenge()` methods (using `node:crypto` `randomBytes` and `createHash`), not the base class PKCE
178
- - Code verifier: `randomBytes(32)` -> base64 -> alphanumeric only -> max 128 chars
179
- - Token exchange uses Basic auth: `Buffer.from(clientId:clientSecret).toString('base64')`
180
- - `getAccessToken()` throws if `codeVerifier` is null -- `getAuthUrl()` must be called first
181
- - Maps `username` to `nickname`, `profile_image_url` to `avatar`
182
-
183
- ## SocialUser Interface
184
-
185
- ```typescript
186
- interface SocialUser {
187
- id: string
188
- nickname: string | null
189
- name: string
190
- email: string | null
191
- avatar: string | null
192
- token: string
193
- raw?: any // full provider API response
194
- }
195
- ```
196
-
197
- ## ProviderInterface
198
-
199
- ```typescript
200
- interface ProviderInterface {
201
- getAuthUrl: () => Promise<string>
202
- getAccessToken: (code: string) => Promise<string>
203
- getUserByToken: (token: string) => Promise<SocialUser>
204
- }
205
- ```
206
-
207
- ## Token Class
208
-
209
- ```typescript
210
- class Token {
211
- constructor(
212
- public accessToken: string,
213
- public refreshToken: string | null = null,
214
- public expiresIn: number | null = null,
215
- public approvedScopes: string[] = [],
216
- ) {}
217
- }
218
- ```
219
-
220
- ## Provider-Specific Types
221
-
222
- ```typescript
223
- // GitHub
224
- interface GitHubUser { id: number, login: string, name: string | null, avatar_url: string | null, [key: string]: any }
225
- interface GitHubEmail { email: string, primary: boolean, verified: boolean }
226
- interface GitHubTokenResponse { access_token: string, error?: string, error_description?: string }
227
-
228
- // Twitter/X
229
- interface TwitterUser { id: string, username: string, name: string, email?: string, profile_image_url?: string }
230
- interface TwitterTokenResponse { access_token: string, token_type: string, expires_in: number, scope: string, error?: string, error_description?: string }
231
-
232
- // Google (local to google.ts)
233
- interface GoogleUser { id: string, email: string, verified_email: boolean, name: string, given_name: string, family_name: string, picture: string, locale: string }
234
- interface GoogleTokenResponse { access_token: string, token_type: string, expires_in: number, error?: string, error_description?: string }
235
-
236
- // Facebook (local to facebook.ts)
237
- interface FacebookUser { id: string, email?: string, name: string, picture?: { data: { url: string } } }
238
- interface FacebookTokenResponse { access_token: string, token_type: string, expires_in: number, error?: { message: string, type: string, code: number } }
239
- ```
240
-
241
- ## Exceptions
242
-
243
- ```typescript
244
- class InvalidStateException extends Error { name = 'InvalidStateException' }
245
- class ConfigException extends Error { name = 'ConfigException' }
246
- ```
247
-
248
- Providers throw `ConfigException` when `clientId`, `clientSecret`, or `redirectUrl` are missing.
249
-
250
- ## OAuth2 Flow
251
-
252
- ### 1. Get Auth URL
253
- ```typescript
254
- const github = new GitHubProvider({ clientId: '', clientSecret: '', redirectUrl: '' })
255
- const authUrl = await github.scopes(['user:email', 'read:org']).getAuthUrl()
256
- // Each provider reads actual config from config.services.<provider>
257
- // The constructor config is overridden by getConfig() in each provider
258
- ```
259
-
260
- ### 2. Handle Callback
261
- ```typescript
262
- const token = await github.getAccessToken(code)
263
- const user = await github.getUserByToken(token)
264
- // user: { id, nickname, name, email, avatar, token, raw }
265
- ```
266
-
267
- ### 3. User from Existing Token
268
- ```typescript
269
- const user = await github.userFromToken(existingToken)
270
- // Calls getUserByToken internally, adds token to result
271
- ```
272
-
273
- ## Configuration Source
274
-
275
- All providers read from the Stacks config object:
276
- ```typescript
277
- config.services.github // { clientId, clientSecret, redirectUrl, scopes }
278
- config.services.google // { clientId, clientSecret, redirectUrl, scopes }
279
- config.services.facebook // { clientId, clientSecret, redirectUrl, scopes }
280
- config.services.twitter // { clientId, clientSecret, redirectUrl, scopes }
281
- ```
282
-
283
- Each provider's `getConfig()` method reads these and also calls `this.setScopes()` with the configured scopes.
284
-
285
- ## Dependencies
286
- - `@stacksjs/api` -- `fetcher` used for all HTTP requests (provides `.withHeaders()`, `.get()`, `.post()`)
287
- - `@stacksjs/config` -- provides `config.services.*` for provider credentials
288
- - `node:buffer` and `node:crypto` -- used by Twitter provider for PKCE and Basic auth
289
-
290
- ## Gotchas
291
- - The `ProviderConfig` constructor params are largely ignored -- each provider's `getConfig()` reads from `config.services.*` instead
292
- - `getAuthUrl()` returns `Promise<string>` (not `string`) -- it is async
293
- - `getTokenUrl()` is `protected` -- not part of the public `ProviderInterface`
294
- - GitHub joins scopes with space, Facebook with comma, Google with space, Twitter with space
295
- - Facebook uses GET for token exchange; all others use POST
296
- - Facebook `nickname` is always `null`
297
- - Twitter requires `getAuthUrl()` before `getAccessToken()` because the code verifier is stored as instance state
298
- - Twitter uses its own PKCE implementation via `node:crypto`, not the base class `getCodeVerifier()`/`getCodeChallenge()`
299
- - Google auth URL includes `access_type: 'offline'` and `prompt: 'consent'` for refresh token support
300
- - The base class state token is 40 hex chars (20 bytes), not the 20 chars stated in some docs
301
- - `userFromToken()` spreads the user object and adds/overwrites the `token` field
302
- - All providers include the full API response in `SocialUser.raw`
303
- - Errors from GitHub/Google/Twitter are flat objects with `error` + `error_description`; Facebook nests it under `error.message`
11
+ The native package has separate social sign-in and publishing APIs. Selecting a
12
+ publishing identity does not sign a user into the app, and a sign-in token is not
13
+ necessarily authorized to publish.
14
+
15
+ ## Social sign-in
16
+
17
+ Apple, Facebook, GitHub, Google and X providers implement getAuthUrl,
18
+ getAccessToken(code), getUserByToken(token) and inherited userFromToken.
19
+ configuredSocialProviders/isSocialProviderConfigured/socialProvider expose the
20
+ native provider registry and prerequisite checks. Render buttons from that
21
+ registry rather than guessing clientId/clientSecret works for every provider.
22
+
23
+ Apple uses teamId/keyId/privateKey to mint a client-secret JWT; it has no static
24
+ client secret requirement. Its callback is a cross-site POST, so a GET-only
25
+ callback cannot complete it. Read the native default auth route/actions and
26
+ provider test before handling one-time Apple name data or ID-token verification.
27
+ Meta API version is centralized in meta-graph.ts rather than an obsolete v18
28
+ copied into every example.
29
+
30
+ Scopes/setScopes/with/setRedirectUrl belong to AbstractProvider. Providers read
31
+ their actual services config and impose provider-specific scope and credential
32
+ rules. withState supplies the flow's state and validateState checks the expected
33
+ and returned values; persist expected state in the native callback session.
34
+ Twitter sign-in keeps a PKCE verifier on its instance; getAuthUrl must
35
+ precede its exchange on the same stateful flow. Persist and validate state/PKCE
36
+ through the native callback path before minting an app credential; low-level
37
+ getUserByToken alone does not prove the browser initiated a login.
38
+
39
+ SocialUser includes emailVerified. Respect the provider's verification signal
40
+ and the configured account-linking policy, using auth's resolveSocialSignIn
41
+ instead of attaching any equal email address to an existing account. Provider
42
+ errors and ConfigException/InvalidStateException are different from successful
43
+ profile retrieval. Never log raw credential fields.
44
+
45
+ ## Session handoff
46
+
47
+ socialHandoffRedirect(pack, { redirectTo?, allowedHosts? }) emits a no-store
48
+ redirect with the native encoded session handoff. Browser useAuth's
49
+ completeSocialLogin consumes it and removes the fragment. isSafeHandoffTarget
50
+ checks permitted redirect shape; choose a server-owned landing path. The helper
51
+ also supplies a failed-sign-in redirect. These are separate from provider token
52
+ exchange and the auth cookie/session issuance policy.
53
+
54
+ ## Named publishing identities
55
+
56
+ config/socials.ts declares identities/platforms and optional defaultIdentity.
57
+ resolveSocialCredentials and the six platform-specific resolvers read settings
58
+ after config readiness, with explicit identity selection and environment-backed
59
+ credentials. envName/envSegment define the SOCIALS_<IDENTITY>_<PLATFORM>_<FIELD>
60
+ namespace. An identity's declared platform and required fields are checked; a
61
+ handle used in a permalink is not an authentication credential.
62
+
63
+ Native publishing drivers cover Bluesky, X, LinkedIn, Mastodon, Instagram and
64
+ Threads. publishingDriver/platform options and toDriverIdentity map the actual
65
+ account/instance/URN fields; socialPublishTarget resolves a complete target,
66
+ including a Bluesky session, and publishAs(platform, post, identity?, env?) sends
67
+ through it. PublishPostInput/PublishedPost/SocialPublishingDriver are exported
68
+ contracts. Read their driver methods before using media, metrics, deletion,
69
+ refresh or profile functionality; support differs per provider.
70
+
71
+ ## Authorization and operational limits
72
+
73
+ The native terminal consent helper in authorize.ts currently supports X only.
74
+ It uses loopback callback URI, checked state and PKCE; offline.access supplies
75
+ refresh credentials. Declaring another publishing platform does not make the
76
+ same interactive consent helper support it. Stored tokens, platform account
77
+ access and provider app registration remain prerequisites.
78
+
79
+ Drafting or reviewing a post does not itself authorize publishAs, deletion,
80
+ credential writes or a consent flow. Use the task's explicit authorization for
81
+ those actions. Local driver/request tests establish behavior, not live platform
82
+ conformance or successful publication for arbitrary accounts.
83
+
84
+ ## Source and evidence
85
+
86
+ `storage/framework/core/socials/src/index.ts`, registry.ts, abstract.ts,
87
+ handoff.ts, identities.ts, publish.ts, authorize.ts, meta-graph.ts and drivers/.
88
+ Tests: registry.test.ts, apple.test.ts, session-handoff.test.ts,
89
+ identities.test.ts, publish.test.ts, authorize.test.ts,
90
+ credentials-stay-out-of-output.test.ts and meta-graph.test.ts.