@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
@@ -1,357 +1,141 @@
1
1
  ---
2
2
  name: stacks-orm
3
- description: Use when working with the Stacks ORM - defining models with defineModel(), model relationships (hasOne, hasMany, belongsTo, belongsToMany, morphOne, hasManyThrough), attributes, traits, factories, computed properties, query building, transactions, or the 107 built-in models. Covers @stacksjs/orm, storage/framework/orm/, and storage/framework/defaults/app/Models/.
3
+ description: Use when querying or writing Stacks models, using transactions and relationships, preserving inferred model types, or enabling native model traits. Covers @stacksjs/orm, the model runtime, and 107 built-in models.
4
4
  license: MIT
5
- compatibility: Bun >= 1.3.0, TypeScript, SQLite >= 3.47.2
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
6
  allowed-tools: Read Edit Write Bash Grep Glob
7
7
  ---
8
8
 
9
9
  # Stacks ORM
10
10
 
11
- ## Key Paths
12
- - Core ORM package: `storage/framework/core/orm/src/`
13
- - ORM implementation: `storage/framework/orm/`
14
- - Model definitions: `storage/framework/defaults/app/Models/` (107 models)
15
- - Application models: `app/Models/`
16
- - Default model templates: `storage/framework/defaults/app/Models/`
17
- - ORM type globals: `storage/framework/types/orm-globals.d.ts`
18
- - Attribute types: `storage/framework/types/attributes.ts` (240+ attributes)
19
- - Model events: `storage/framework/types/events.ts`
11
+ `defineModel` produces an immediately usable query surface over
12
+ `bun-query-builder`. Model-driven migrations change the schema; there are no
13
+ per-model ORM classes to generate. The framework declares 107 models on disk,
14
+ but optional feature gates determine which built-ins load in a running app.
20
15
 
21
- ## Source Files
22
- ```
23
- orm/src/
24
- ├── define-model.ts # defineModel() + buildEventHooks() + buildTraitMethods()
25
- ├── index.ts # Re-exports orm/src + db + subquery + transaction + types
26
- ├── db.ts # Database query builder bridge
27
- ├── subquery.ts # Subquery support
28
- ├── transaction.ts # transaction(), savepoint(), transactional()
29
- ├── model-types.ts # ModelRow<T>, NewModelData<T>, UpdateModelData<T>
30
- ├── types.ts # ORM type definitions
31
- ├── utils.ts # modelTableName, getRelations, getFillableAttributes, etc.
32
- ├── builder.ts # Query builder integration
33
- ├── generated/ # Auto-generated model types and table traits
34
- │ ├── types.ts
35
- │ ├── index.ts
36
- │ └── table-traits.ts
37
- └── traits/
38
- ├── index.ts # Re-exports all trait creators
39
- ├── taggable.ts # createTaggableMethods()
40
- ├── categorizable.ts # createCategorizableMethods()
41
- ├── commentable.ts # createCommentableMethods()
42
- ├── billable.ts # createBillableMethods()
43
- ├── likeable.ts # createLikeableMethods()
44
- └── two-factor.ts # createTwoFactorMethods()
45
- ```
46
-
47
- ## defineModel() API (define-model.ts)
16
+ ## Definitions and typed rows
48
17
 
49
- Wraps bun-query-builder's `createModel()` with Stacks-specific enhancements:
50
- - Event dispatching via `traits.observe` (emits `{model}:created`, `{model}:updated`, `{model}:deleted` via `@stacksjs/events`)
51
- - Trait methods (billable, taggable, categorizable, commentable, likeable, 2FA)
52
- - Raw definition access for generators (`getDefinition()`, `_isStacksModel`)
18
+ Read `stacks-models` for schema, trait, ownership and extension declarations.
19
+ Import your app model explicitly when exact inference matters:
53
20
 
54
- ```typescript
55
- import { defineModel } from '@stacksjs/orm'
56
-
57
- export default defineModel({
58
- name: 'Product',
59
- table: 'products',
60
- primaryKey: 'id', // default: 'id'
61
- autoIncrement: true, // default: true
21
+ ```ts
22
+ import WorkItem from '../app/Models/WorkItem'
23
+ import type { ModelRow, ModelCreateData } from '@stacksjs/orm'
62
24
 
63
- traits: {
64
- useUuid: true, // adds uuid column
65
- useTimestamps: true, // adds created_at, updated_at
66
- useAuth: { usePasskey: true }, // adds auth columns + passkey support
67
- useSocials: ['github'], // social login providers
68
- useSearch: { // search engine indexing
69
- displayable: ['name', 'email'],
70
- searchable: ['name', 'email'],
71
- sortable: ['name', 'created_at'],
72
- filterable: ['status']
73
- },
74
- useSeeder: { count: 10 }, // or just `true` (defaults to 10)
75
- useApi: {
76
- uri: 'products',
77
- routes: ['index', 'store', 'show', 'update', 'destroy']
78
- },
79
- categorizable: true, // adds category relations via categorizable table
80
- taggable: true, // adds tag relations via taggable table
81
- commentables: true, // adds comment relations (NOTE: plural 's' in key)
82
- billable: true, // adds Stripe integration methods
83
- likeable: true, // or { table?: string, foreignKey?: string }
84
- observe: true, // emit model events (true = all, or array: ['create','update','delete'])
85
- },
25
+ type WorkItemRow = ModelRow<typeof WorkItem>
26
+ type NewWorkItem = ModelCreateData<typeof WorkItem>
86
27
 
87
- // Relationships
88
- hasOne: ['Subscriber'],
89
- hasMany: ['Post', 'Order'],
90
- belongsTo: ['User', 'Category'],
91
- belongsToMany: ['Tag'],
92
- hasOneThrough: ['Profile'],
93
- morphOne: 'Image', // or { model, morphName?, type?, id? }
28
+ const item = await WorkItem.find(id)
29
+ const open = await WorkItem.where('done', false).orderBy('id', 'desc').get()
30
+ ```
94
31
 
95
- indexes: [
96
- { name: 'idx_email', columns: ['email'] },
97
- { name: 'idx_composite', columns: ['email', 'name'] }
98
- ],
32
+ `find` can return no row; `findOrFail` throws `ModelNotFoundError`. Do not invent
33
+ `UserRequest` or a runtime `UserModel` global. The ORM barrel's model proxies
34
+ load lazily; server boot waits for model initialization. A feature-disabled
35
+ model is not made usable merely by an ambient declaration.
99
36
 
100
- attributes: {
101
- name: {
102
- order: 1,
103
- fillable: true,
104
- required: true,
105
- unique: false,
106
- validation: {
107
- rule: schema.string().max(100),
108
- message: { max: 'Name is too long' }
109
- },
110
- factory: (faker) => faker.lorem.word()
111
- },
112
- price: {
113
- fillable: true,
114
- required: true,
115
- validation: { rule: schema.number().min(1) },
116
- factory: (faker) => faker.datatype.number({ min: 100, max: 10000 })
117
- },
118
- status: {
119
- fillable: true,
120
- default: 'draft',
121
- validation: { rule: schema.enum(['draft', 'published', 'archived']) }
122
- },
123
- password: {
124
- hidden: true, // excluded from JSON serialization
125
- guarded: true, // not mass-assignable
126
- }
127
- },
37
+ ## Write behavior
128
38
 
129
- // Computed properties (accessors)
130
- get: {
131
- fullName: (attrs) => `${attrs.first_name} ${attrs.last_name}`,
132
- formattedPrice: (attrs) => `$${(attrs.price / 100).toFixed(2)}`
133
- },
39
+ Ordinary create/update paths apply mass-assignment rules, declared validation,
40
+ setters, casts, encryption and applicable lifecycle behavior. Partial updates
41
+ validate only fields supplied. Quiet writes still validate. `ModelValidationError`
42
+ contains a 422 status and per-field errors; use native error mapping at an HTTP
43
+ boundary rather than returning raw database errors.
134
44
 
135
- // Mutators (setters)
136
- set: {
137
- email: (attrs) => attrs.email?.toLowerCase()
138
- },
45
+ Use instance `update`/`delete` or the supported static `update(id, data)` and
46
+ `delete(id)` helpers for an identified row. `firstOrCreate` and `updateOrCreate`
47
+ provide explicit lookup/write behavior. Do not confuse a model's static helper
48
+ with a fluent builder's `update` terminator.
139
49
 
140
- // Model hooks (lifecycle callbacks)
141
- hooks: {
142
- afterCreate: (model) => { /* ... */ },
143
- afterUpdate: (model) => { /* ... */ },
144
- afterDelete: (model) => { /* ... */ },
145
- },
50
+ `forceCreate`, `forceUpdate` and `forceFill` are trusted mass-assignment escape
51
+ hatches. They do not mean "disable encryption and validation". Scoped
52
+ `withoutValidation` is for deliberate imports/backfills; `withoutEvents` and
53
+ quiet helpers suppress events rather than rules. Read
54
+ [model capabilities](../stacks-models/references/model-capabilities.md) for
55
+ source-backed details.
146
56
 
147
- dashboard: { highlight: true } // highlight in admin dashboard
148
- } as const)
149
- ```
57
+ ## Relationships and model instance methods
150
58
 
151
- ### How defineModel() Works Internally
152
- 1. `buildEventHooks(definition)` -- if `traits.observe` is truthy, creates `afterCreate`/`afterUpdate`/`afterDelete` hooks that lazy-import `@stacksjs/events` and call `dispatch()`
153
- 2. Merges event hooks with any user-defined hooks
154
- 3. Calls `createModel(defWithHooks)` from bun-query-builder (provides typed query methods)
155
- 4. `buildTraitMethods(definition)` -- checks each trait flag and creates method objects
156
- 5. Returns `Object.assign(baseModel, traitMethods, definition)` + `getDefinition()` + `_isStacksModel`
59
+ Declare relationships in the model rather than maintaining foreign-key or
60
+ pivot schema separately. The named belongs-to-many form can own pivot columns,
61
+ defaults, timestamps and uniqueness. An instance can expose the named relation,
62
+ such as `post.tags().sync(ids)`; eager-loaded relations are accessible without
63
+ requiring callers to unwrap the raw builder's storage.
157
64
 
158
- ## Transactions (transaction.ts)
65
+ Traits expose model/instance methods for tags, categories, comments, likes,
66
+ soft deletion, audit/activity feeds, two-factor authentication, provider-neutral
67
+ billing and search. Use the exact method exposed by the chosen trait instead
68
+ of reaching into underscore-prefixed implementation objects. The runtime checks
69
+ `commentable`, not a guessed plural trait name.
159
70
 
160
- ```typescript
161
- import { transaction, savepoint, transactional } from '@stacksjs/orm'
71
+ Soft-deleted model queries are trait-aware; process-wide raw query-builder
72
+ scoping is a separate setting. Restore/force-delete operations and relation
73
+ cascade behavior need their own tests. CMS category records and commerce
74
+ Category records are distinct domains, even when a relation name looks familiar.
162
75
 
163
- // Basic transaction -- auto-commit on success, auto-rollback on error
164
- const result = await transaction(async (tx) => {
165
- await tx.insertInto('users').values({ name: 'John' }).execute()
166
- await tx.insertInto('profiles').values({ user_id: 1 }).execute()
167
- return 'success'
168
- })
76
+ ## Transactions
169
77
 
170
- // With options
171
- await transaction(callback, {
172
- retries: 3,
173
- isolation: 'serializable', // 'read committed' | 'repeatable read' | 'serializable'
174
- readOnly: false,
175
- onRollback: (error) => console.error(error),
176
- afterRollback: () => { /* cleanup */ }
177
- })
78
+ ```ts
79
+ import { transaction } from '@stacksjs/orm'
178
80
 
179
- // Savepoints (nested transactions)
180
81
  await transaction(async (tx) => {
181
- await tx.insertInto('users').values({ name: 'Bob' }).execute()
182
- await savepoint(async (sp) => {
183
- await sp.insertInto('logs').values({ action: 'created' }).execute()
184
- // If this fails, only this savepoint rolls back
185
- })
82
+ const created = await tx.insertInto('work_items')
83
+ .values({ title: 'Verify the change', user_id: ownerId })
84
+ .returningAll()
85
+ .executeTakeFirst()
86
+ if (!created)
87
+ throw new Error('Work item was not created')
88
+ return created
186
89
  })
187
-
188
- // Decorator-style -- wraps function to auto-run in transaction
189
- const createUser = transactional(async (tx, name: string, email: string) => {
190
- const user = await tx.insertInto('users').values({ name }).returningAll().executeTakeFirst()
191
- await tx.insertInto('profiles').values({ user_id: user.id }).execute()
192
- return user
193
- })
194
- await createUser('Alice', 'alice@example.com') // auto-wrapped
195
90
  ```
196
91
 
197
- Both `transaction()` and `savepoint()` delegate to `db.transaction()` and `db.savepoint()` from `@stacksjs/database`.
198
-
199
- ### Transaction executor boundary
200
-
201
- Every query that must commit or roll back together must use the callback handle (`tx` or `sp`), including validation reads, pivot writes, and the final readback. Do not mix `Model.find()`, `Model.create()`, instance `update()` / `delete()`, or instance relation calls into a raw query-builder transaction. The model executor is a separate execution surface and is not rebound to the callback handle. On SQLite it may use a separate connection, so it cannot observe an uncommitted row written through `tx`.
202
-
203
- `runInTransactionScope()` buffers supported side effects until commit, but it does not rebind model queries. For a transaction-backed custom action, use the model definition as the schema and relationship source of truth, then execute the complete persistence workflow through `tx`. Read the created or updated row through `tx` before returning so a readback failure also rolls back the mutation.
204
-
205
- ## Trait Methods (traits/)
206
-
207
- ### Taggable (when `traits.taggable: true`)
208
- Uses `taggable` table with polymorphic `taggable_type` + `taggable_id` columns.
209
- - `Model._taggable.tags(id: number): Promise<any[]>`
210
- - `Model._taggable.tagCount(id: number): Promise<number>` -- uses `count(*)`
211
- - `Model._taggable.addTag(id, { name, description? }): Promise<any>` -- auto-generates slug
212
- - `Model._taggable.activeTags(id): Promise<any[]>` -- filters `is_active = true`
213
- - `Model._taggable.inactiveTags(id): Promise<any[]>` -- filters `is_active = false`
214
- - `Model._taggable.removeTag(id, tagId): Promise<void>`
215
-
216
- ### Categorizable (when `traits.categorizable: true`)
217
- Uses `categorizable` + `categorizable_models` pivot table.
218
- - `Model._categorizable.categories(id): Promise<any[]>` -- joins through pivot
219
- - `Model._categorizable.categoryCount(id): Promise<number>`
220
- - `Model._categorizable.addCategory(id, { name, description? }): Promise<any>` -- creates category if not exists, then links
221
- - `Model._categorizable.activeCategories(id): Promise<any[]>`
222
- - `Model._categorizable.inactiveCategories(id): Promise<any[]>`
223
- - `Model._categorizable.removeCategory(id, categoryId): Promise<void>` -- removes pivot link
224
-
225
- ### Commentable (when `traits.commentables: true`)
226
- Uses `comments` table with `commentables_id` + `commentables_type` columns.
227
- - `Model._commentable.comments(id): Promise<any[]>`
228
- - `Model._commentable.commentCount(id): Promise<number>`
229
- - `Model._commentable.addComment(id, { title, body }): Promise<any>` -- status defaults to `'pending'`
230
- - `Model._commentable.approvedComments(id): Promise<any[]>` -- status = `'approved'`
231
- - `Model._commentable.pendingComments(id): Promise<any[]>` -- status = `'pending'`
232
- - `Model._commentable.rejectedComments(id): Promise<any[]>` -- status = `'rejected'`
233
-
234
- ### Likeable (when `traits.likeable: true` or `{ table?, foreignKey? }`)
235
- Table defaults to `{tableName}_likes`, FK defaults to `{singular}_id`.
236
- - `Model._likeable.likes(id): Promise<any[]>`
237
- - `Model._likeable.likeCount(id): Promise<number>`
238
- - `Model._likeable.like(id, userId): Promise<any>`
239
- - `Model._likeable.unlike(id, userId): Promise<void>`
240
- - `Model._likeable.isLiked(id, userId): Promise<boolean>`
241
-
242
- ### Billable (when `traits.billable: true`) -- the configured payment driver
243
- All methods lazy-import `@stacksjs/payments`. Full reference: `stacks-payments`.
244
- - Provider-neutral (`config.payment.driver`): `paymentCustomer(model)`, `charge(model, money, paymentMethodId, options)`, `createPayment(model, money, options)`, `checkout(model, { mode, lines, successUrl, cancelUrl })`, `paymentMethods(model)`, `removePaymentMethod(model, providerId)`, `newSubscription(model, type, price)` -> `SubscriptionSummary`, `cancelSubscription(model, providerId, { atPeriodEnd })` (ownership-checked), `activeSubscription(model)` -> `{ subscription, providerSubscription }`
245
- - Stripe only (throw `PaymentUnsupportedError` under another driver): `createStripeUser`, `updateStripeUser`, `deleteStripeUser`, `createOrGetStripeUser`, `retrieveStripeUser`, `syncStripeCustomerDetails`, `setDefaultPaymentMethod`, `addPaymentMethod`, `updateSubscription`, `createSetupIntent`, `subscriptionHistory`, Connect methods
246
- - Local: `defaultPaymentMethod(model)`, `storeTransaction(model, productId, options)`, `transactionHistory(model)`
247
-
248
- ### Two-Factor Auth (when `traits.useAuth.useTwoFactor: true`)
249
- - `Model._twoFactor.generateTwoFactorForModel(model)` -- generates secret, calls `model.update()`
250
- - `Model._twoFactor.verifyTwoFactorCode(model, code): Promise<boolean>`
251
-
252
- ## Auto-Generated System Fields
253
- - `id` -- primary key (auto-increment)
254
- - `created_at`, `updated_at` -- when `useTimestamps: true`
255
- - `uuid` -- when `useUuid: true`
256
- - `deleted_at` -- when soft deletes enabled
257
- - `stripe_id` -- when `billable: true`
258
- - `two_factor_secret`, `public_key` -- when `useAuth: { usePasskey: true }`
259
-
260
- ## Naming Conventions
261
- - Model: PascalCase (`ProductVariant`)
262
- - Table: snake_case plural (`product_variants`)
263
- - Column: snake_case (`first_name`)
264
- - Foreign key: `{singular_model}_id` (`user_id`)
265
- - Pivot table: alphabetical sort of both table names (`category_product`)
266
-
267
- ## ORM Utility Types (model-types.ts)
268
- ```typescript
269
- type Def<T> = T extends { getDefinition: () => infer D } ? D : never
270
- type BelongsToForeignKeys<TDef> // extracts { modelname_id: number } from belongsTo array
271
- type ModelRow<T> = ModelAttributes<Def<T>> & BelongsToForeignKeys<Def<T>>
272
- type NewModelData<T> = Partial<InferModelAttributes<Def<T>> & BelongsToForeignKeys<Def<T>>>
273
- type UpdateModelData<T> = Partial<InferModelAttributes<Def<T>> & BelongsToForeignKeys<Def<T>>>
274
- ```
275
-
276
- ## ORM Utility Functions (utils.ts)
277
- - `modelTableName(model: Model | string): Promise<string>` -- uses `model.table` or converts `model.name` to snake_case plural
278
- - `getModelName(model, modelPath): string` -- from definition or filename
279
- - `getTableName(model, modelPath): TableNames` -- from definition or snake_case plural of name
280
- - `getPivotTableName(modelA, modelB): string` -- alphabetical sort + join with `_`
281
- - `getRelations(model, name): Promise<RelationConfig[]>` -- processes hasOne, hasMany, belongsTo, hasOneThrough, belongsToMany, morphOne
282
- - `getHiddenAttributes(attrs): string[]` -- filters for `hidden: true`
283
- - `getGuardedAttributes(model): string[]` -- filters for `guarded: true`, returns snake_case
284
- - `getFillableAttributes(model, relations): string[]` -- filters for `fillable: true`, adds FK columns, stripe_id, uuid, etc.
285
- - `extractFields(model, file): Promise<ModelElement[]>` -- parses model file for field metadata
286
- - `findCoreModel(name): string` -- searches `storage/framework/defaults/app/Models/` recursively
287
- - `findUserModel(name): string` -- searches `app/Models/`
288
- - `fetchOtherModelRelations(modelName?): Promise<RelationConfig[]>` -- scans all models for relations pointing to this model
289
- - `formatDate(date): string` -- ISO format `YYYY-MM-DD HH:MM:SS`
290
-
291
- ## Relationship Processing (utils.ts)
292
- Each relationship type is processed into a `RelationConfig` object:
293
- - **hasOne / hasMany**: FK = `{parent_snake}_id`, model key = `{related_snake}_id`
294
- - **belongsTo**: FK is empty string (set on the owning model's side), supports custom `foreignKey`
295
- - **belongsToMany**: the legacy array form auto-creates a conventional pivot and supports `pivotTable`, `firstForeignKey`, and `secondForeignKey`; the named object form supports `table`, `foreignKey`, `relatedKey`, and `pivot` metadata (`columns`, `timestamps`, `uniques`)
296
- - **hasOneThrough**: includes `throughModel` and `throughForeignKey`
297
- - **morphOne**: uses `{modelName}able` pattern, generates `_type` and `_id` columns
298
-
299
- Named many-to-many relations are callable on model instances. Use their native
300
- relation builder for pivot writes:
301
-
302
- ```ts
303
- const post = await Post.find(id)
304
- await post.categories().sync(categoryIds)
305
- await post.tags().attach(tagId)
306
- await post.tags().detach()
307
- ```
308
-
309
- Declaring custom pivot columns in the model is required when those columns have
310
- defaults that `attach()` and `sync()` must write. `pivot.timestamps: true`
311
- causes both timestamps to be generated and maintained.
312
-
313
- ## Model Events (when `traits.observe: true`)
314
- `observe: true` emits all three events. `observe: ['create', 'update']` emits only those.
315
- - `'{modelname}:created'` -- via `afterCreate` hook, lazy-imports `@stacksjs/events`
316
- - `'{modelname}:updated'` -- via `afterUpdate` hook
317
- - `'{modelname}:deleted'` -- via `afterDelete` hook
318
-
319
- If `@stacksjs/events` is not available (browser, tests), errors are caught and silently ignored.
320
-
321
- ## Stub Types in index.ts
322
- The ORM exports stub types for commonly used models to keep typecheck green before code generation:
323
- - `UserModel`, `NewUser`, `User` (class stub with static `where`, `find`, `create`, `all`)
324
- - `Job`, `FailedJob` (query stubs)
325
- - `PaymentMethod` (CRUD stubs)
326
- - `CategorizableTable`, `CategorizableModelsTable`, `CommentablesTable`, `TaggableTable`
327
-
328
- ## All 50+ Framework Models
329
- Content: Author, Page, Post, Comment, Tag, Category
330
- Users: User, Customer, Driver, Subscriber, SubscriberEmail
331
- Commerce: Product, ProductVariant, ProductUnit, Cart, CartItem, Order, OrderItem, Coupon, GiftCard, Manufacturer, Review, LicenseKey, DigitalDelivery, WaitlistProduct, WaitlistRestaurant
332
- Payments: Payment, PaymentMethod, PaymentProduct, PaymentTransaction, Subscription, Transaction, Receipt
333
- Shipping: ShippingMethod, ShippingRate, ShippingZone, DeliveryRoute
334
- Loyalty: LoyaltyPoint, LoyaltyReward, TaxRate
335
- System: Job, FailedJob, Error, Log, Notification, Activity, Request, Websocket, PrintDevice
336
- Marketing: Campaign, EmailList, SocialPost
337
-
338
- ## CLI Commands
339
- - `buddy make:migration` -- create migration for model changes
340
- - `buddy generate:migrations` -- generate migrations from model diffs
341
- - `buddy migrate` -- run pending migrations
342
-
343
- ## Gotchas
344
- - Models work directly via the dynamic ORM — no code generation step needed
345
- - `defineModel()` calls `createModel()` from bun-query-builder at runtime, providing all typed query methods immediately
346
- - Two ORM locations: `storage/framework/core/orm/` (package) and `storage/framework/orm/` (implementation)
347
- - Factories use `@stacksjs/faker` -- each attribute can have a `factory` function
348
- - The `hidden` attribute flag excludes fields from JSON serialization (e.g., passwords)
349
- - The `guarded` flag prevents mass assignment
350
- - The `fillable` flag explicitly allows mass assignment
351
- - Pivot tables for belongsToMany are auto-created using alphabetical naming of both table names
352
- - Model events are only emitted when `observe: true` (or array) trait is set
353
- - The trait key for commentable is `commentables` (with 's'), not `commentable`
354
- - Trait methods are accessed via underscore-prefixed properties: `_taggable`, `_categorizable`, `_commentable`, `_billable`, `_likeable`, `_twoFactor`
355
- - The `useAuth.useTwoFactor` check (not `usePasskey`) determines if two-factor methods are added
356
- - `defineModel()` calls `createModel()` from bun-query-builder which returns the typed query builder interface at runtime
357
- - Model file loading uses `findUserModel()` (app/Models/) with fallback to `findCoreModel()` (storage/framework/defaults/app/Models/)
92
+ The callback handle owns the transaction's connection. All statements that
93
+ must commit or roll back together, including validation reads and readback,
94
+ use `tx`. `Model.create`, model queries, instance updates and relation calls
95
+ inside this callback are not automatically rebound to it. SQLite, PostgreSQL,
96
+ MySQL and Turso have relevant executor/locking differences; do not assume a
97
+ model call can observe an uncommitted raw write.
98
+
99
+ `savepoint` supplies a nested rollback point and `transactional` wraps a
100
+ function. Options include retries, isolation, read-only mode, `onRollback` and
101
+ `afterRollback`. Read `transaction.ts` and the active driver's capabilities;
102
+ not every dialect implements every option identically.
103
+
104
+ Native transaction scope can defer supported queue/lifecycle side effects
105
+ until commit. It does not rebind queries. A post-commit effect failure is
106
+ separate from rolling back data that has already committed.
107
+
108
+ ## Native pagination and search
109
+
110
+ ORM terminals return the canonical full, simple or cursor paginator rather
111
+ than an invented `{ paging }` envelope. HTTP context can derive page/limit and
112
+ URLs; jobs and CLI callers should supply their values explicitly. See
113
+ `stacks-pagination` and `orm/tests/paginator-request.test.ts`.
114
+
115
+ Model `useSearch` provides a search builder and document projection. Search
116
+ hits pagination differs from database pagination. Related dot paths need the
117
+ appropriate relation data and hidden attributes remain excluded. Do not pass
118
+ an ORM paginator to a search driver and expect identical wire shapes.
119
+
120
+ ## Runtime and schema boundaries
121
+
122
+ - Import `db` and request-time SQL helpers from `@stacksjs/database/runtime` in
123
+ handlers where tooling is not needed; the root package includes migrations.
124
+ - Import `defineModel` and schema helpers explicitly. Model globals exist after
125
+ server boot, while arbitrary ambient helper declarations are not runtime proof.
126
+ - `app/Models` replaces defaults by identity. `extendModel` is the additive path.
127
+ - Generated CRUD ownership/policy enforcement is a route contract, not a
128
+ promise that every raw query elsewhere is automatically tenant-scoped.
129
+ - Casts/encryption/model serialization operate on model paths; raw database
130
+ results bypass the model projection.
131
+ - No chain should interpolate unchecked identifiers or operators from a request.
132
+ Use allowlists and the query-builder validation helpers.
133
+
134
+ ## Source and retained evidence
135
+
136
+ Runtime: `core/orm/src/{define-model,extend-model,model-types,transaction,
137
+ model-registry,ownership,auto-crud}.ts`, `traits/`, and `utils/`.
138
+ Evidence includes `model-validation`, `mass-assignment`, `force-create-guarded`,
139
+ `casting`, `belongs-to-many`, `observed-writes`, `model-policy-wiring`,
140
+ `paginator-request`, and the inference type tests. Read their actual contracts
141
+ when a workflow depends on a dialect, trait, or return shape.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: stacks-pagination
3
+ description: Use when returning database pages, simple or cursor feeds, building pagination links, or adapting upstream paginator results. Covers @stacksjs/pagination, ORM pagination and the native UI helper contract.
4
+ license: MIT
5
+ compatibility: Bun >= 1.3.0, TypeScript
6
+ allowed-tools: Read Edit Write Bash Grep Glob
7
+ ---
8
+
9
+ # Canonical pagination
10
+
11
+ Use the shape the native ORM/router actually produces, not a handwritten
12
+ { paging, next_cursor } envelope. Import paginator types and guards from
13
+ @stacksjs/pagination or their ORM re-exports.
14
+
15
+ ## Shapes
16
+
17
+ Paginator<T> has data, current_page, per_page, total, last_page, from, to and
18
+ has_more_pages. Full pagination needs a count query. An out-of-range requested
19
+ page remains the requested current_page with empty data; it is not clamped.
20
+
21
+ SimplePaginator<T> omits total/last_page and uses a cheap has_more_pages result.
22
+ CursorPaginator<T> has opaque next_cursor/prev_cursor and no random page jump.
23
+ Keep cursor tokens unchanged at the client and validate them through the
24
+ native parser. Do not treat a cursor as a trusted SQL fragment.
25
+
26
+ toPaginator, toSimplePaginator and toCursorPaginator adapt source results.
27
+ isPaginator/isSimplePaginator/isCursorPaginator identify the canonical shapes;
28
+ they do not authenticate a source or validate every row.
29
+
30
+ ## HTTP and UI
31
+
32
+ ORM request-aware pagination can derive page/limit and attach URLs from the
33
+ current request. CLI/queue callers provide explicit values. The router
34
+ serializes the canonical object. UI helpers buildPageSequence, paginatorVariant
35
+ and urlForPage live at @stacksjs/ui; the native Pagination component consumes
36
+ the view contract. Search-engine hits pagination remains a separate shape.
37
+
38
+ Evidence: core/orm/tests/{paginator,paginator-request,cursor-roundtrip}.test.ts,
39
+ core/router/tests/paginator-serialize.test.ts, and UI pagination helpers/tests.
40
+ Source: core/pagination/src/index.ts and orm paginator request adapters.