@stacksjs/defaults 0.75.108 → 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.
- package/ai/AGENTS.md +36 -1
- package/ai/README.md +39 -1
- package/ai/skills/stacks-actions/SKILL.md +64 -6
- package/ai/skills/stacks-ai/SKILL.md +36 -10
- package/ai/skills/stacks-alias/SKILL.md +40 -85
- package/ai/skills/stacks-analytics/SKILL.md +23 -3
- package/ai/skills/stacks-arrays/SKILL.md +35 -9
- package/ai/skills/stacks-audio/SKILL.md +34 -0
- package/ai/skills/stacks-auth/ACCOUNT-WORKFLOWS.md +113 -0
- package/ai/skills/stacks-auth/SKILL.md +90 -57
- package/ai/skills/stacks-auto-imports/SKILL.md +80 -138
- package/ai/skills/stacks-browser/SKILL.md +82 -138
- package/ai/skills/stacks-browser-extension/SKILL.md +40 -0
- package/ai/skills/stacks-buddy/SKILL.md +2 -0
- package/ai/skills/stacks-build/SKILL.md +42 -23
- package/ai/skills/stacks-cache/SKILL.md +75 -115
- package/ai/skills/stacks-calendar/SKILL.md +61 -97
- package/ai/skills/stacks-charts/SKILL.md +34 -0
- package/ai/skills/stacks-chat/SKILL.md +18 -2
- package/ai/skills/stacks-chief-of-staff/LICENSE +21 -0
- package/ai/skills/stacks-chief-of-staff/NOTICE.md +10 -0
- package/ai/skills/stacks-chief-of-staff/PLAYBOOK.md +42 -0
- package/ai/skills/stacks-chief-of-staff/SKILL.md +28 -0
- package/ai/skills/stacks-cli/SKILL.md +23 -7
- package/ai/skills/stacks-cloud/SKILL.md +37 -20
- package/ai/skills/stacks-cms/PAGES.md +70 -0
- package/ai/skills/stacks-cms/SKILL.md +30 -18
- package/ai/skills/stacks-codebase-design/LICENSE +21 -0
- package/ai/skills/stacks-codebase-design/NOTICE.md +10 -0
- package/ai/skills/stacks-codebase-design/SKILL.md +10 -0
- package/ai/skills/stacks-collections/SKILL.md +25 -8
- package/ai/skills/stacks-commerce/SKILL.md +25 -1
- package/ai/skills/stacks-composables/BROWSER.md +97 -0
- package/ai/skills/stacks-composables/SKILL.md +87 -181
- package/ai/skills/stacks-config/SKILL.md +108 -162
- package/ai/skills/stacks-cron/SKILL.md +27 -13
- package/ai/skills/stacks-crosswind/SKILL.md +62 -167
- package/ai/skills/stacks-dashboard/SKILL.md +8 -0
- package/ai/skills/stacks-database/SKILL.md +98 -68
- package/ai/skills/stacks-datetime/SKILL.md +21 -5
- package/ai/skills/stacks-deploy/SKILL.md +17 -1
- package/ai/skills/stacks-design-brutalist/SKILL.md +1 -1
- package/ai/skills/stacks-design-minimalist/SKILL.md +17 -3
- package/ai/skills/stacks-design-soft/SKILL.md +16 -4
- package/ai/skills/stacks-design-taste/SKILL.md +55 -35
- package/ai/skills/stacks-design-taste-codex/SKILL.md +5 -5
- package/ai/skills/stacks-desktop/SKILL.md +22 -16
- package/ai/skills/stacks-development/SKILL.md +19 -8
- package/ai/skills/stacks-dns/SKILL.md +72 -139
- package/ai/skills/stacks-domain-modeling/ADR-FORMAT.md +47 -0
- package/ai/skills/stacks-domain-modeling/GLOSSARY-FORMAT.md +60 -0
- package/ai/skills/stacks-domain-modeling/LICENSE +21 -0
- package/ai/skills/stacks-domain-modeling/NOTICE.md +10 -0
- package/ai/skills/stacks-domain-modeling/SKILL.md +11 -0
- package/ai/skills/stacks-email/DELIVERY-CONTROLS.md +84 -0
- package/ai/skills/stacks-email/SKILL.md +18 -2
- package/ai/skills/stacks-enums/SKILL.md +28 -81
- package/ai/skills/stacks-env/SKILL.md +23 -15
- package/ai/skills/stacks-error-handling/SKILL.md +68 -121
- package/ai/skills/stacks-events/SKILL.md +83 -264
- package/ai/skills/stacks-faker/SKILL.md +28 -13
- package/ai/skills/stacks-feature-flags/SKILL.md +41 -0
- package/ai/skills/stacks-features/SKILL.md +46 -0
- package/ai/skills/stacks-flow/ENGINEERING.md +84 -0
- package/ai/skills/stacks-flow/LICENSE +21 -0
- package/ai/skills/stacks-flow/NOTICE.md +10 -0
- package/ai/skills/stacks-flow/SKILL.md +32 -0
- package/ai/skills/stacks-flow/upstream-skills.json +726 -0
- package/ai/skills/stacks-forms/SKILL.md +44 -0
- package/ai/skills/stacks-git/LICENSE +21 -0
- package/ai/skills/stacks-git/NOTICE.md +10 -0
- package/ai/skills/stacks-git/SKILL.md +11 -0
- package/ai/skills/stacks-grill-with-docs/LICENSE +21 -0
- package/ai/skills/stacks-grill-with-docs/NOTICE.md +10 -0
- package/ai/skills/stacks-grill-with-docs/PLAYBOOK.md +4 -0
- package/ai/skills/stacks-grill-with-docs/SKILL.md +24 -0
- package/ai/skills/stacks-grilling/LICENSE +21 -0
- package/ai/skills/stacks-grilling/NOTICE.md +17 -0
- package/ai/skills/stacks-grilling/SKILL.md +7 -0
- package/ai/skills/stacks-guard/LICENSE +21 -0
- package/ai/skills/stacks-guard/NOTICE.md +10 -0
- package/ai/skills/stacks-guard/SKILL.md +6 -0
- package/ai/skills/stacks-handoff/LICENSE +21 -0
- package/ai/skills/stacks-handoff/NOTICE.md +17 -0
- package/ai/skills/stacks-handoff/SKILL.md +8 -0
- package/ai/skills/stacks-http/SKILL.md +64 -297
- package/ai/skills/stacks-humanizer/LICENSE +21 -0
- package/ai/skills/stacks-humanizer/NOTICE.md +19 -0
- package/ai/skills/stacks-humanizer/SKILL.md +85 -0
- package/ai/skills/stacks-humanizer/references/patterns.md +350 -0
- package/ai/skills/stacks-i18n/SKILL.md +33 -8
- package/ai/skills/stacks-image/SKILL.md +37 -0
- package/ai/skills/stacks-image-to-code/SKILL.md +11 -6
- package/ai/skills/stacks-implement/LICENSE +21 -0
- package/ai/skills/stacks-implement/NOTICE.md +10 -0
- package/ai/skills/stacks-implement/PLAYBOOK.md +14 -0
- package/ai/skills/stacks-implement/SKILL.md +24 -0
- package/ai/skills/stacks-implement-spec/LICENSE +21 -0
- package/ai/skills/stacks-implement-spec/NOTICE.md +10 -0
- package/ai/skills/stacks-implement-spec/PLAYBOOK.md +37 -0
- package/ai/skills/stacks-implement-spec/SKILL.md +24 -0
- package/ai/skills/stacks-improve-codebase-architecture/HTML-REPORT.md +126 -0
- package/ai/skills/stacks-improve-codebase-architecture/LICENSE +21 -0
- package/ai/skills/stacks-improve-codebase-architecture/NOTICE.md +10 -0
- package/ai/skills/stacks-improve-codebase-architecture/PLAYBOOK.md +68 -0
- package/ai/skills/stacks-improve-codebase-architecture/SKILL.md +24 -0
- package/ai/skills/stacks-investigate/LICENSE +21 -0
- package/ai/skills/stacks-investigate/NOTICE.md +10 -0
- package/ai/skills/stacks-investigate/SKILL.md +6 -0
- package/ai/skills/stacks-jobs/SKILL.md +29 -8
- package/ai/skills/stacks-listeners/SKILL.md +13 -5
- package/ai/skills/stacks-logging/SKILL.md +71 -68
- package/ai/skills/stacks-loop/LICENSE +21 -0
- package/ai/skills/stacks-loop/NOTICE.md +10 -0
- package/ai/skills/stacks-loop/PLAYBOOK.md +28 -0
- package/ai/skills/stacks-loop/SKILL.md +28 -0
- package/ai/skills/stacks-mail/SKILL.md +46 -7
- package/ai/skills/stacks-marketing/CATALOG.md +60 -0
- package/ai/skills/stacks-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing/NOTICE.md +5 -0
- package/ai/skills/stacks-marketing/SKILL.md +27 -0
- package/ai/skills/stacks-marketing/WORKFLOW.md +83 -0
- package/ai/skills/stacks-marketing-ab-testing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ab-testing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ab-testing/PLAYBOOK.md +352 -0
- package/ai/skills/stacks-marketing-ab-testing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ab-testing/evals/evals.json +116 -0
- package/ai/skills/stacks-marketing-ab-testing/references/sample-size-guide.md +263 -0
- package/ai/skills/stacks-marketing-ab-testing/references/test-templates.md +277 -0
- package/ai/skills/stacks-marketing-ad-creative/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ad-creative/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ad-creative/PLAYBOOK.md +434 -0
- package/ai/skills/stacks-marketing-ad-creative/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ad-creative/assets/creative-review-template.html +432 -0
- package/ai/skills/stacks-marketing-ad-creative/evals/evals.json +280 -0
- package/ai/skills/stacks-marketing-ad-creative/references/awareness-headlines.md +54 -0
- package/ai/skills/stacks-marketing-ad-creative/references/creative-review-page.md +109 -0
- package/ai/skills/stacks-marketing-ad-creative/references/creative-roadmap.md +118 -0
- package/ai/skills/stacks-marketing-ad-creative/references/generative-tools.md +613 -0
- package/ai/skills/stacks-marketing-ad-creative/references/hook-system.md +115 -0
- package/ai/skills/stacks-marketing-ad-creative/references/imessage-video-ads.md +197 -0
- package/ai/skills/stacks-marketing-ad-creative/references/meta-creative-formats.md +114 -0
- package/ai/skills/stacks-marketing-ad-creative/references/motion-video-ads.md +126 -0
- package/ai/skills/stacks-marketing-ad-creative/references/platform-specs.md +213 -0
- package/ai/skills/stacks-marketing-ad-creative/references/short-form-video-specs.md +213 -0
- package/ai/skills/stacks-marketing-ad-creative/references/static-ad-templates.md +308 -0
- package/ai/skills/stacks-marketing-ads/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ads/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ads/PLAYBOOK.md +464 -0
- package/ai/skills/stacks-marketing-ads/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ads/evals/evals.json +192 -0
- package/ai/skills/stacks-marketing-ads/references/abm-playbook.md +101 -0
- package/ai/skills/stacks-marketing-ads/references/ad-copy-templates.md +207 -0
- package/ai/skills/stacks-marketing-ads/references/audience-targeting.md +243 -0
- package/ai/skills/stacks-marketing-ads/references/audit-guardrails.md +83 -0
- package/ai/skills/stacks-marketing-ads/references/b2b-paid-playbook.md +115 -0
- package/ai/skills/stacks-marketing-ads/references/conversion-tracking.md +361 -0
- package/ai/skills/stacks-marketing-ads/references/creative-research-automation.md +103 -0
- package/ai/skills/stacks-marketing-ads/references/google-ads-audit-checklist.md +84 -0
- package/ai/skills/stacks-marketing-ads/references/google-search-playbook.md +120 -0
- package/ai/skills/stacks-marketing-ads/references/linkedin-b2b-playbook.md +107 -0
- package/ai/skills/stacks-marketing-ads/references/meta-andromeda-playbook.md +44 -0
- package/ai/skills/stacks-marketing-ads/references/meta-decision-system.md +176 -0
- package/ai/skills/stacks-marketing-ads/references/payback-period.md +73 -0
- package/ai/skills/stacks-marketing-ads/references/platform-setup-checklists.md +277 -0
- package/ai/skills/stacks-marketing-ads/references/reading-google-ads-data.md +121 -0
- package/ai/skills/stacks-marketing-ads/references/rsa-output-spec.md +88 -0
- package/ai/skills/stacks-marketing-ai-seo/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ai-seo/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ai-seo/PLAYBOOK.md +494 -0
- package/ai/skills/stacks-marketing-ai-seo/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ai-seo/evals/evals.json +163 -0
- package/ai/skills/stacks-marketing-ai-seo/references/agent-readiness.md +66 -0
- package/ai/skills/stacks-marketing-ai-seo/references/citations-vs-recommendations.md +89 -0
- package/ai/skills/stacks-marketing-ai-seo/references/content-patterns.md +287 -0
- package/ai/skills/stacks-marketing-ai-seo/references/content-types.md +82 -0
- package/ai/skills/stacks-marketing-ai-seo/references/format-volatility.md +95 -0
- package/ai/skills/stacks-marketing-ai-seo/references/linkedin-ai-citations.md +131 -0
- package/ai/skills/stacks-marketing-ai-seo/references/okf.md +104 -0
- package/ai/skills/stacks-marketing-ai-seo/references/platform-ranking-factors.md +167 -0
- package/ai/skills/stacks-marketing-ai-seo/references/positioning-and-consensus.md +102 -0
- package/ai/skills/stacks-marketing-ai-seo/references/youtube-ai-citations.md +66 -0
- package/ai/skills/stacks-marketing-analytics/LICENSE +21 -0
- package/ai/skills/stacks-marketing-analytics/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-analytics/PLAYBOOK.md +307 -0
- package/ai/skills/stacks-marketing-analytics/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-analytics/evals/evals.json +117 -0
- package/ai/skills/stacks-marketing-analytics/references/event-library.md +260 -0
- package/ai/skills/stacks-marketing-analytics/references/ga4-implementation.md +304 -0
- package/ai/skills/stacks-marketing-analytics/references/gtm-implementation.md +396 -0
- package/ai/skills/stacks-marketing-aso/LICENSE +21 -0
- package/ai/skills/stacks-marketing-aso/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-aso/PLAYBOOK.md +310 -0
- package/ai/skills/stacks-marketing-aso/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-aso/evals/evals.json +104 -0
- package/ai/skills/stacks-marketing-aso/references/apple-specs.md +107 -0
- package/ai/skills/stacks-marketing-aso/references/benchmarks.md +131 -0
- package/ai/skills/stacks-marketing-aso/references/google-play-specs.md +135 -0
- package/ai/skills/stacks-marketing-aso/references/report-template.md +213 -0
- package/ai/skills/stacks-marketing-aso/references/scoring-criteria.md +213 -0
- package/ai/skills/stacks-marketing-attribution/LICENSE +21 -0
- package/ai/skills/stacks-marketing-attribution/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-attribution/PLAYBOOK.md +223 -0
- package/ai/skills/stacks-marketing-attribution/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-attribution/evals/evals.json +128 -0
- package/ai/skills/stacks-marketing-attribution/references/attribution-models.md +74 -0
- package/ai/skills/stacks-marketing-attribution/references/by-business-type.md +54 -0
- package/ai/skills/stacks-marketing-attribution/references/first-party-tracking.md +253 -0
- package/ai/skills/stacks-marketing-attribution/references/measurement-paradigms.md +85 -0
- package/ai/skills/stacks-marketing-churn-prevention/LICENSE +21 -0
- package/ai/skills/stacks-marketing-churn-prevention/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-churn-prevention/PLAYBOOK.md +420 -0
- package/ai/skills/stacks-marketing-churn-prevention/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-churn-prevention/evals/evals.json +107 -0
- package/ai/skills/stacks-marketing-churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/ai/skills/stacks-marketing-churn-prevention/references/dunning-playbook.md +413 -0
- package/ai/skills/stacks-marketing-co-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-co-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-co-marketing/PLAYBOOK.md +306 -0
- package/ai/skills/stacks-marketing-co-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-co-marketing/evals/evals.json +98 -0
- package/ai/skills/stacks-marketing-co-marketing/references/partnership-types.md +100 -0
- package/ai/skills/stacks-marketing-cold-email/LICENSE +21 -0
- package/ai/skills/stacks-marketing-cold-email/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-cold-email/PLAYBOOK.md +210 -0
- package/ai/skills/stacks-marketing-cold-email/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-cold-email/evals/evals.json +137 -0
- package/ai/skills/stacks-marketing-cold-email/references/benchmarks.md +87 -0
- package/ai/skills/stacks-marketing-cold-email/references/deliverability.md +111 -0
- package/ai/skills/stacks-marketing-cold-email/references/follow-up-sequences.md +81 -0
- package/ai/skills/stacks-marketing-cold-email/references/frameworks.md +90 -0
- package/ai/skills/stacks-marketing-cold-email/references/linkedin-outreach.md +91 -0
- package/ai/skills/stacks-marketing-cold-email/references/multichannel-cadence.md +79 -0
- package/ai/skills/stacks-marketing-cold-email/references/outbound-plays.md +88 -0
- package/ai/skills/stacks-marketing-cold-email/references/personalization.md +90 -0
- package/ai/skills/stacks-marketing-cold-email/references/reply-handling.md +65 -0
- package/ai/skills/stacks-marketing-cold-email/references/subject-lines.md +53 -0
- package/ai/skills/stacks-marketing-community-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-community-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-community-marketing/PLAYBOOK.md +171 -0
- package/ai/skills/stacks-marketing-community-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-community-marketing/evals/evals.json +103 -0
- package/ai/skills/stacks-marketing-community-marketing/references/community-models.md +63 -0
- package/ai/skills/stacks-marketing-competitor-profiling/LICENSE +21 -0
- package/ai/skills/stacks-marketing-competitor-profiling/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-competitor-profiling/PLAYBOOK.md +436 -0
- package/ai/skills/stacks-marketing-competitor-profiling/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-competitor-profiling/evals/evals.json +97 -0
- package/ai/skills/stacks-marketing-competitor-profiling/references/templates.md +167 -0
- package/ai/skills/stacks-marketing-competitor-profiling/references/tool-reference.md +314 -0
- package/ai/skills/stacks-marketing-competitors/LICENSE +21 -0
- package/ai/skills/stacks-marketing-competitors/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-competitors/PLAYBOOK.md +283 -0
- package/ai/skills/stacks-marketing-competitors/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-competitors/evals/evals.json +119 -0
- package/ai/skills/stacks-marketing-competitors/references/content-architecture.md +277 -0
- package/ai/skills/stacks-marketing-competitors/references/templates.md +226 -0
- package/ai/skills/stacks-marketing-content-strategy/LICENSE +21 -0
- package/ai/skills/stacks-marketing-content-strategy/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-content-strategy/PLAYBOOK.md +437 -0
- package/ai/skills/stacks-marketing-content-strategy/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-content-strategy/evals/evals.json +116 -0
- package/ai/skills/stacks-marketing-content-strategy/references/content-distribution.md +83 -0
- package/ai/skills/stacks-marketing-content-strategy/references/headless-cms.md +194 -0
- package/ai/skills/stacks-marketing-copy-editing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-copy-editing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-copy-editing/PLAYBOOK.md +485 -0
- package/ai/skills/stacks-marketing-copy-editing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-copy-editing/evals/evals.json +117 -0
- package/ai/skills/stacks-marketing-copy-editing/references/checklist.md +77 -0
- package/ai/skills/stacks-marketing-copy-editing/references/content-refresh.md +71 -0
- package/ai/skills/stacks-marketing-copy-editing/references/plain-english-alternatives.md +394 -0
- package/ai/skills/stacks-marketing-copywriting/LICENSE +21 -0
- package/ai/skills/stacks-marketing-copywriting/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-copywriting/PLAYBOOK.md +282 -0
- package/ai/skills/stacks-marketing-copywriting/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-copywriting/evals/evals.json +140 -0
- package/ai/skills/stacks-marketing-copywriting/references/ai-tells.md +261 -0
- package/ai/skills/stacks-marketing-copywriting/references/copy-frameworks.md +432 -0
- package/ai/skills/stacks-marketing-copywriting/references/natural-transitions.md +256 -0
- package/ai/skills/stacks-marketing-council/LICENSE +21 -0
- package/ai/skills/stacks-marketing-council/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-council/PLAYBOOK.md +157 -0
- package/ai/skills/stacks-marketing-council/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-council/evals/evals.json +70 -0
- package/ai/skills/stacks-marketing-council/references/advisor-template.md +51 -0
- package/ai/skills/stacks-marketing-council/references/advisors/alex-hormozi.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/ann-handley.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/april-dunford.md +41 -0
- package/ai/skills/stacks-marketing-council/references/advisors/byron-sharp.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/claude-hopkins.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/david-ogilvy.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/eugene-schwartz.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/gary-halbert.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/gary-vaynerchuk.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/rory-sutherland.md +42 -0
- package/ai/skills/stacks-marketing-council/references/advisors/russell-brunson.md +43 -0
- package/ai/skills/stacks-marketing-council/references/advisors/seth-godin.md +43 -0
- package/ai/skills/stacks-marketing-cro/LICENSE +21 -0
- package/ai/skills/stacks-marketing-cro/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-cro/PLAYBOOK.md +194 -0
- package/ai/skills/stacks-marketing-cro/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-cro/evals/evals.json +111 -0
- package/ai/skills/stacks-marketing-cro/references/experiments.md +248 -0
- package/ai/skills/stacks-marketing-cro/references/form.md +422 -0
- package/ai/skills/stacks-marketing-customer-research/LICENSE +21 -0
- package/ai/skills/stacks-marketing-customer-research/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-customer-research/PLAYBOOK.md +304 -0
- package/ai/skills/stacks-marketing-customer-research/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-customer-research/evals/evals.json +176 -0
- package/ai/skills/stacks-marketing-customer-research/references/interviews-and-surveys.md +155 -0
- package/ai/skills/stacks-marketing-customer-research/references/source-guides.md +401 -0
- package/ai/skills/stacks-marketing-directory-submissions/LICENSE +21 -0
- package/ai/skills/stacks-marketing-directory-submissions/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-directory-submissions/PLAYBOOK.md +397 -0
- package/ai/skills/stacks-marketing-directory-submissions/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-directory-submissions/evals/evals.json +121 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/directory-list.md +545 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/positioning-variations.md +232 -0
- package/ai/skills/stacks-marketing-directory-submissions/references/submission-tracker-template.csv +272 -0
- package/ai/skills/stacks-marketing-emails/LICENSE +21 -0
- package/ai/skills/stacks-marketing-emails/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-emails/PLAYBOOK.md +336 -0
- package/ai/skills/stacks-marketing-emails/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-emails/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-emails/references/copy-guidelines.md +113 -0
- package/ai/skills/stacks-marketing-emails/references/email-types.md +515 -0
- package/ai/skills/stacks-marketing-emails/references/sequence-templates.md +168 -0
- package/ai/skills/stacks-marketing-events/LICENSE +21 -0
- package/ai/skills/stacks-marketing-events/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-events/PLAYBOOK.md +127 -0
- package/ai/skills/stacks-marketing-events/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-events/evals/evals.json +92 -0
- package/ai/skills/stacks-marketing-events/references/event-portfolio-strategy.md +80 -0
- package/ai/skills/stacks-marketing-events/references/speaking.md +49 -0
- package/ai/skills/stacks-marketing-events/references/sponsorship-roi.md +57 -0
- package/ai/skills/stacks-marketing-events/references/webinar-funnel.md +88 -0
- package/ai/skills/stacks-marketing-free-tools/LICENSE +21 -0
- package/ai/skills/stacks-marketing-free-tools/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-free-tools/PLAYBOOK.md +186 -0
- package/ai/skills/stacks-marketing-free-tools/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-free-tools/evals/evals.json +103 -0
- package/ai/skills/stacks-marketing-free-tools/references/tool-benchmarks.md +35 -0
- package/ai/skills/stacks-marketing-free-tools/references/tool-types.md +217 -0
- package/ai/skills/stacks-marketing-ideas/LICENSE +21 -0
- package/ai/skills/stacks-marketing-ideas/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-ideas/PLAYBOOK.md +167 -0
- package/ai/skills/stacks-marketing-ideas/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-ideas/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-ideas/references/guerrilla-marketing.md +56 -0
- package/ai/skills/stacks-marketing-ideas/references/ideas-by-category.md +366 -0
- package/ai/skills/stacks-marketing-image/LICENSE +21 -0
- package/ai/skills/stacks-marketing-image/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-image/PLAYBOOK.md +336 -0
- package/ai/skills/stacks-marketing-image/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-image/evals/evals.json +89 -0
- package/ai/skills/stacks-marketing-image/references/ai-image-prompting.md +229 -0
- package/ai/skills/stacks-marketing-influencer-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-influencer-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-influencer-marketing/PLAYBOOK.md +198 -0
- package/ai/skills/stacks-marketing-influencer-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-influencer-marketing/evals/evals.json +89 -0
- package/ai/skills/stacks-marketing-influencer-marketing/references/ugc-creator-program.md +91 -0
- package/ai/skills/stacks-marketing-launch/LICENSE +21 -0
- package/ai/skills/stacks-marketing-launch/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-launch/PLAYBOOK.md +381 -0
- package/ai/skills/stacks-marketing-launch/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-launch/evals/evals.json +135 -0
- package/ai/skills/stacks-marketing-launch/references/shipped-changes.md +84 -0
- package/ai/skills/stacks-marketing-launch/references/site-launch-qa.md +57 -0
- package/ai/skills/stacks-marketing-lead-magnets/LICENSE +21 -0
- package/ai/skills/stacks-marketing-lead-magnets/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-lead-magnets/PLAYBOOK.md +308 -0
- package/ai/skills/stacks-marketing-lead-magnets/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-lead-magnets/evals/evals.json +105 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/benchmarks.md +129 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill-corpus-design.md +89 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill-release.md +71 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/content-to-skill.md +109 -0
- package/ai/skills/stacks-marketing-lead-magnets/references/format-guide.md +196 -0
- package/ai/skills/stacks-marketing-loops/LICENSE +21 -0
- package/ai/skills/stacks-marketing-loops/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-loops/PLAYBOOK.md +111 -0
- package/ai/skills/stacks-marketing-loops/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-loops/evals/evals.json +133 -0
- package/ai/skills/stacks-marketing-loops/references/loop-catalog.md +796 -0
- package/ai/skills/stacks-marketing-loops/references/loop-guardrails.md +73 -0
- package/ai/skills/stacks-marketing-loops/references/loop-orchestration.md +71 -0
- package/ai/skills/stacks-marketing-loops/references/loop-state.md +67 -0
- package/ai/skills/stacks-marketing-loops/references/loop-template.md +79 -0
- package/ai/skills/stacks-marketing-loops/references/outbound-operator.md +86 -0
- package/ai/skills/stacks-marketing-loops/references/seo-operator.md +110 -0
- package/ai/skills/stacks-marketing-offers/LICENSE +21 -0
- package/ai/skills/stacks-marketing-offers/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-offers/PLAYBOOK.md +151 -0
- package/ai/skills/stacks-marketing-offers/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-offers/evals/evals.json +21 -0
- package/ai/skills/stacks-marketing-offers/references/bonus-stacking.md +150 -0
- package/ai/skills/stacks-marketing-offers/references/examples.md +215 -0
- package/ai/skills/stacks-marketing-offers/references/guarantee-design.md +172 -0
- package/ai/skills/stacks-marketing-offers/references/offer-anatomy.md +203 -0
- package/ai/skills/stacks-marketing-offers/references/offer-formats.md +240 -0
- package/ai/skills/stacks-marketing-offers/references/saas-offers.md +116 -0
- package/ai/skills/stacks-marketing-offers/references/scarcity-urgency.md +175 -0
- package/ai/skills/stacks-marketing-offers/references/value-equation.md +134 -0
- package/ai/skills/stacks-marketing-onboarding/LICENSE +21 -0
- package/ai/skills/stacks-marketing-onboarding/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-onboarding/PLAYBOOK.md +257 -0
- package/ai/skills/stacks-marketing-onboarding/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-onboarding/evals/evals.json +108 -0
- package/ai/skills/stacks-marketing-onboarding/references/activation-models.md +57 -0
- package/ai/skills/stacks-marketing-onboarding/references/experiments.md +258 -0
- package/ai/skills/stacks-marketing-onboarding/references/minimum-path-to-value.md +49 -0
- package/ai/skills/stacks-marketing-paywalls/LICENSE +21 -0
- package/ai/skills/stacks-marketing-paywalls/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-paywalls/PLAYBOOK.md +223 -0
- package/ai/skills/stacks-marketing-paywalls/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-paywalls/evals/evals.json +93 -0
- package/ai/skills/stacks-marketing-paywalls/references/experiments.md +164 -0
- package/ai/skills/stacks-marketing-plan/LICENSE +21 -0
- package/ai/skills/stacks-marketing-plan/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-plan/PLAYBOOK.md +300 -0
- package/ai/skills/stacks-marketing-plan/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-plan/evals/evals.json +140 -0
- package/ai/skills/stacks-marketing-plan/references/aarrr-framework.md +180 -0
- package/ai/skills/stacks-marketing-plan/references/budget-planning.md +177 -0
- package/ai/skills/stacks-marketing-plan/references/client-types.md +373 -0
- package/ai/skills/stacks-marketing-plan/references/current-state-rubric.md +255 -0
- package/ai/skills/stacks-marketing-plan/references/example-quietude.md +972 -0
- package/ai/skills/stacks-marketing-plan/references/funding-stage-unlocks.md +230 -0
- package/ai/skills/stacks-marketing-plan/references/growth-patterns.md +190 -0
- package/ai/skills/stacks-marketing-plan/references/idea-cross-reference.md +265 -0
- package/ai/skills/stacks-marketing-plan/references/market-sizing.md +166 -0
- package/ai/skills/stacks-marketing-plan/references/measurement-framework.md +213 -0
- package/ai/skills/stacks-marketing-plan/references/methodology.md +365 -0
- package/ai/skills/stacks-marketing-plan/references/ops-stack-mapping.md +197 -0
- package/ai/skills/stacks-marketing-plan/references/plan-template.md +494 -0
- package/ai/skills/stacks-marketing-plan/references/team-and-agency-model.md +278 -0
- package/ai/skills/stacks-marketing-popups/LICENSE +21 -0
- package/ai/skills/stacks-marketing-popups/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-popups/PLAYBOOK.md +450 -0
- package/ai/skills/stacks-marketing-popups/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-popups/evals/evals.json +94 -0
- package/ai/skills/stacks-marketing-pricing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-pricing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-pricing/PLAYBOOK.md +291 -0
- package/ai/skills/stacks-marketing-pricing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-pricing/evals/evals.json +131 -0
- package/ai/skills/stacks-marketing-pricing/references/pricing-models.md +66 -0
- package/ai/skills/stacks-marketing-pricing/references/pricing-page-teardown.md +87 -0
- package/ai/skills/stacks-marketing-pricing/references/research-methods.md +156 -0
- package/ai/skills/stacks-marketing-pricing/references/tier-structure.md +232 -0
- package/ai/skills/stacks-marketing-product-marketing/LICENSE +21 -0
- package/ai/skills/stacks-marketing-product-marketing/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-product-marketing/PLAYBOOK.md +255 -0
- package/ai/skills/stacks-marketing-product-marketing/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-product-marketing/evals/evals.json +98 -0
- package/ai/skills/stacks-marketing-programmatic-seo/LICENSE +21 -0
- package/ai/skills/stacks-marketing-programmatic-seo/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-programmatic-seo/PLAYBOOK.md +238 -0
- package/ai/skills/stacks-marketing-programmatic-seo/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-programmatic-seo/evals/evals.json +107 -0
- package/ai/skills/stacks-marketing-programmatic-seo/references/implementation-platforms.md +41 -0
- package/ai/skills/stacks-marketing-programmatic-seo/references/playbooks.md +308 -0
- package/ai/skills/stacks-marketing-prospecting/LICENSE +21 -0
- package/ai/skills/stacks-marketing-prospecting/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-prospecting/PLAYBOOK.md +273 -0
- package/ai/skills/stacks-marketing-prospecting/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-prospecting/evals/evals.json +163 -0
- package/ai/skills/stacks-marketing-prospecting/references/account-research.md +59 -0
- package/ai/skills/stacks-marketing-prospecting/references/b2b-prospecting.md +106 -0
- package/ai/skills/stacks-marketing-prospecting/references/compliance.md +161 -0
- package/ai/skills/stacks-marketing-prospecting/references/data-sources.md +300 -0
- package/ai/skills/stacks-marketing-prospecting/references/demand-signals.md +131 -0
- package/ai/skills/stacks-marketing-prospecting/references/enrichment-playbook.md +61 -0
- package/ai/skills/stacks-marketing-prospecting/references/local-prospecting.md +165 -0
- package/ai/skills/stacks-marketing-prospecting/references/saas-prospecting.md +123 -0
- package/ai/skills/stacks-marketing-prospecting/references/signal-plays.md +99 -0
- package/ai/skills/stacks-marketing-prospecting/references/sourcing-and-enrichment.md +89 -0
- package/ai/skills/stacks-marketing-psychology/LICENSE +21 -0
- package/ai/skills/stacks-marketing-psychology/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-psychology/PLAYBOOK.md +451 -0
- package/ai/skills/stacks-marketing-psychology/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-psychology/evals/evals.json +88 -0
- package/ai/skills/stacks-marketing-public-relations/LICENSE +21 -0
- package/ai/skills/stacks-marketing-public-relations/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-public-relations/PLAYBOOK.md +150 -0
- package/ai/skills/stacks-marketing-public-relations/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-public-relations/evals/evals.json +36 -0
- package/ai/skills/stacks-marketing-public-relations/references/crisis-communications.md +113 -0
- package/ai/skills/stacks-marketing-public-relations/references/journalist-pitching.md +368 -0
- package/ai/skills/stacks-marketing-public-relations/references/media-outlets.md +207 -0
- package/ai/skills/stacks-marketing-public-relations/references/newsjacking.md +220 -0
- package/ai/skills/stacks-marketing-public-relations/references/podcast-guest-prep.md +60 -0
- package/ai/skills/stacks-marketing-public-relations/references/press-platforms.md +188 -0
- package/ai/skills/stacks-marketing-public-relations/references/statement-templates.md +145 -0
- package/ai/skills/stacks-marketing-public-relations/references/story-angles.md +87 -0
- package/ai/skills/stacks-marketing-referrals/LICENSE +21 -0
- package/ai/skills/stacks-marketing-referrals/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-referrals/PLAYBOOK.md +279 -0
- package/ai/skills/stacks-marketing-referrals/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-referrals/evals/evals.json +202 -0
- package/ai/skills/stacks-marketing-referrals/references/affiliate-operations.md +64 -0
- package/ai/skills/stacks-marketing-referrals/references/affiliate-programs.md +167 -0
- package/ai/skills/stacks-marketing-referrals/references/program-examples.md +151 -0
- package/ai/skills/stacks-marketing-referrals/references/review-platform-rules.md +36 -0
- package/ai/skills/stacks-marketing-referrals/references/review-program-operations.md +62 -0
- package/ai/skills/stacks-marketing-referrals/references/review-programs.md +96 -0
- package/ai/skills/stacks-marketing-referrals/references/viral-mechanisms.md +102 -0
- package/ai/skills/stacks-marketing-revops/LICENSE +21 -0
- package/ai/skills/stacks-marketing-revops/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-revops/PLAYBOOK.md +345 -0
- package/ai/skills/stacks-marketing-revops/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-revops/evals/evals.json +104 -0
- package/ai/skills/stacks-marketing-revops/references/automation-playbooks.md +290 -0
- package/ai/skills/stacks-marketing-revops/references/inbound-routing.md +43 -0
- package/ai/skills/stacks-marketing-revops/references/lifecycle-definitions.md +309 -0
- package/ai/skills/stacks-marketing-revops/references/routing-rules.md +203 -0
- package/ai/skills/stacks-marketing-revops/references/scoring-models.md +247 -0
- package/ai/skills/stacks-marketing-sales-enablement/LICENSE +21 -0
- package/ai/skills/stacks-marketing-sales-enablement/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-sales-enablement/PLAYBOOK.md +423 -0
- package/ai/skills/stacks-marketing-sales-enablement/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-sales-enablement/evals/evals.json +153 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/cold-call-scripts.md +68 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/deck-frameworks.md +263 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/demo-scripts.md +355 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/objection-library.md +270 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/one-pager-templates.md +208 -0
- package/ai/skills/stacks-marketing-sales-enablement/references/win-loss-analysis.md +72 -0
- package/ai/skills/stacks-marketing-schema/LICENSE +21 -0
- package/ai/skills/stacks-marketing-schema/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-schema/PLAYBOOK.md +187 -0
- package/ai/skills/stacks-marketing-schema/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-schema/evals/evals.json +127 -0
- package/ai/skills/stacks-marketing-schema/references/schema-examples.md +392 -0
- package/ai/skills/stacks-marketing-seo-audit/LICENSE +21 -0
- package/ai/skills/stacks-marketing-seo-audit/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-seo-audit/PLAYBOOK.md +492 -0
- package/ai/skills/stacks-marketing-seo-audit/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-seo-audit/evals/evals.json +204 -0
- package/ai/skills/stacks-marketing-seo-audit/references/ai-writing-detection.md +200 -0
- package/ai/skills/stacks-marketing-seo-audit/references/international-seo.md +228 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo-pages-and-measurement.md +39 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo-profile-and-citations.md +41 -0
- package/ai/skills/stacks-marketing-seo-audit/references/local-seo.md +86 -0
- package/ai/skills/stacks-marketing-seo-audit/references/rankings-push.md +62 -0
- package/ai/skills/stacks-marketing-seo-audit/references/title-tags.md +89 -0
- package/ai/skills/stacks-marketing-signup/LICENSE +21 -0
- package/ai/skills/stacks-marketing-signup/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-signup/PLAYBOOK.md +359 -0
- package/ai/skills/stacks-marketing-signup/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-signup/evals/evals.json +88 -0
- package/ai/skills/stacks-marketing-site-architecture/LICENSE +21 -0
- package/ai/skills/stacks-marketing-site-architecture/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-site-architecture/PLAYBOOK.md +355 -0
- package/ai/skills/stacks-marketing-site-architecture/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-site-architecture/evals/evals.json +113 -0
- package/ai/skills/stacks-marketing-site-architecture/references/mermaid-templates.md +216 -0
- package/ai/skills/stacks-marketing-site-architecture/references/navigation-patterns.md +305 -0
- package/ai/skills/stacks-marketing-site-architecture/references/platforms-and-migration.md +86 -0
- package/ai/skills/stacks-marketing-site-architecture/references/site-type-templates.md +293 -0
- package/ai/skills/stacks-marketing-sms/LICENSE +21 -0
- package/ai/skills/stacks-marketing-sms/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-sms/PLAYBOOK.md +348 -0
- package/ai/skills/stacks-marketing-sms/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-sms/evals/evals.json +118 -0
- package/ai/skills/stacks-marketing-sms/references/compliance.md +202 -0
- package/ai/skills/stacks-marketing-sms/references/platforms.md +318 -0
- package/ai/skills/stacks-marketing-sms/references/sequence-templates.md +282 -0
- package/ai/skills/stacks-marketing-sms/references/whatsapp.md +260 -0
- package/ai/skills/stacks-marketing-social/LICENSE +21 -0
- package/ai/skills/stacks-marketing-social/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-social/PLAYBOOK.md +452 -0
- package/ai/skills/stacks-marketing-social/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-social/evals/evals.json +150 -0
- package/ai/skills/stacks-marketing-social/references/carousel-frameworks.md +141 -0
- package/ai/skills/stacks-marketing-social/references/listening-sources-template.md +123 -0
- package/ai/skills/stacks-marketing-social/references/listening.md +288 -0
- package/ai/skills/stacks-marketing-social/references/platform-limits.md +110 -0
- package/ai/skills/stacks-marketing-social/references/platforms.md +176 -0
- package/ai/skills/stacks-marketing-social/references/post-templates.md +179 -0
- package/ai/skills/stacks-marketing-social/references/reverse-engineering.md +195 -0
- package/ai/skills/stacks-marketing-social/references/short-form-video.md +237 -0
- package/ai/skills/stacks-marketing-social/references/x-algorithm.md +69 -0
- package/ai/skills/stacks-marketing-video/LICENSE +21 -0
- package/ai/skills/stacks-marketing-video/NOTICE.md +13 -0
- package/ai/skills/stacks-marketing-video/PLAYBOOK.md +330 -0
- package/ai/skills/stacks-marketing-video/SKILL.md +30 -0
- package/ai/skills/stacks-marketing-video/evals/evals.json +118 -0
- package/ai/skills/stacks-marketing-video/references/ai-video-prompting.md +175 -0
- package/ai/skills/stacks-marketing-video/references/edit-anatomy.md +86 -0
- package/ai/skills/stacks-marketing-video/references/product-demo-recording.md +176 -0
- package/ai/skills/stacks-middleware/SKILL.md +37 -21
- package/ai/skills/stacks-migrations/SKILL.md +29 -5
- package/ai/skills/stacks-mobile/SKILL.md +25 -4
- package/ai/skills/stacks-models/SKILL.md +35 -15
- package/ai/skills/stacks-models/references/model-capabilities.md +104 -0
- package/ai/skills/stacks-native/CAPABILITIES.md +536 -0
- package/ai/skills/stacks-native/CATALOG.md +930 -0
- package/ai/skills/stacks-native/RECIPES.md +108 -0
- package/ai/skills/stacks-native/SKILL.md +79 -0
- package/ai/skills/stacks-newsletter/SKILL.md +39 -0
- package/ai/skills/stacks-notifications/SKILL.md +118 -203
- package/ai/skills/stacks-objects/SKILL.md +18 -4
- package/ai/skills/stacks-orm/SKILL.md +112 -328
- package/ai/skills/stacks-pagination/SKILL.md +40 -0
- package/ai/skills/stacks-path/SKILL.md +38 -18
- package/ai/skills/stacks-payments/SKILL.md +9 -1
- package/ai/skills/stacks-pr/CREDITS.md +3 -0
- package/ai/skills/stacks-pr/LICENSE +21 -0
- package/ai/skills/stacks-pr/NOTICE.md +10 -0
- package/ai/skills/stacks-pr/PLAYBOOK.md +127 -0
- package/ai/skills/stacks-pr/SKILL.md +23 -0
- package/ai/skills/stacks-prototype/LICENSE +21 -0
- package/ai/skills/stacks-prototype/NOTICE.md +10 -0
- package/ai/skills/stacks-prototype/SKILL.md +6 -0
- package/ai/skills/stacks-push/SKILL.md +20 -0
- package/ai/skills/stacks-query-builder/SKILL.md +21 -5
- package/ai/skills/stacks-queue/DURABLE-WORKFLOWS.md +121 -0
- package/ai/skills/stacks-queue/SKILL.md +37 -6
- package/ai/skills/stacks-realtime/SKILL.md +29 -140
- package/ai/skills/stacks-redesign/SKILL.md +1 -1
- package/ai/skills/stacks-registry/SKILL.md +20 -48
- package/ai/skills/stacks-repl/SKILL.md +31 -7
- package/ai/skills/stacks-research/LICENSE +21 -0
- package/ai/skills/stacks-research/NOTICE.md +10 -0
- package/ai/skills/stacks-research/PLAYBOOK.md +10 -0
- package/ai/skills/stacks-research/SKILL.md +23 -0
- package/ai/skills/stacks-retro/LICENSE +21 -0
- package/ai/skills/stacks-retro/NOTICE.md +10 -0
- package/ai/skills/stacks-retro/SKILL.md +10 -0
- package/ai/skills/stacks-review/LICENSE +21 -0
- package/ai/skills/stacks-review/NOTICE.md +10 -0
- package/ai/skills/stacks-review/SKILL.md +15 -0
- package/ai/skills/stacks-router/SKILL.md +33 -2
- package/ai/skills/stacks-routes/SKILL.md +25 -2
- package/ai/skills/stacks-scaffold-exercises/LICENSE +21 -0
- package/ai/skills/stacks-scaffold-exercises/NOTICE.md +10 -0
- package/ai/skills/stacks-scaffold-exercises/PLAYBOOK.md +106 -0
- package/ai/skills/stacks-scaffold-exercises/SKILL.md +23 -0
- package/ai/skills/stacks-scaffolding/SKILL.md +27 -11
- package/ai/skills/stacks-scheduler/SKILL.md +52 -25
- package/ai/skills/stacks-search-engine/SKILL.md +28 -7
- package/ai/skills/stacks-security/SKILL.md +22 -6
- package/ai/skills/stacks-server/SKILL.md +47 -85
- package/ai/skills/stacks-setup-deep-modules/LICENSE +21 -0
- package/ai/skills/stacks-setup-deep-modules/NOTICE.md +10 -0
- package/ai/skills/stacks-setup-deep-modules/SKILL.md +55 -0
- package/ai/skills/stacks-setup-engineering/LICENSE +21 -0
- package/ai/skills/stacks-setup-engineering/NOTICE.md +10 -0
- package/ai/skills/stacks-setup-engineering/PLAYBOOK.md +115 -0
- package/ai/skills/stacks-setup-engineering/SKILL.md +24 -0
- package/ai/skills/stacks-setup-engineering/domain.md +51 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-github.md +46 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-gitlab.md +46 -0
- package/ai/skills/stacks-setup-engineering/issue-tracker-local.md +30 -0
- package/ai/skills/stacks-setup-engineering/triage-labels.md +15 -0
- package/ai/skills/stacks-sites/SKILL.md +44 -0
- package/ai/skills/stacks-skills/SKILL.md +33 -0
- package/ai/skills/stacks-slug/SKILL.md +15 -12
- package/ai/skills/stacks-sms/SKILL.md +33 -6
- package/ai/skills/stacks-socials/SKILL.md +81 -294
- package/ai/skills/stacks-storage/SKILL.md +34 -15
- package/ai/skills/stacks-storage/UPLOADS-AND-DISKS.md +133 -0
- package/ai/skills/stacks-strings/SKILL.md +41 -35
- package/ai/skills/stacks-stx/SKILL.md +63 -58
- package/ai/skills/stacks-tdd/LICENSE +21 -0
- package/ai/skills/stacks-tdd/NOTICE.md +10 -0
- package/ai/skills/stacks-tdd/SKILL.md +10 -0
- package/ai/skills/stacks-tdd/mocking.md +59 -0
- package/ai/skills/stacks-tdd/tests.md +77 -0
- package/ai/skills/stacks-teach/GLOSSARY-FORMAT.md +35 -0
- package/ai/skills/stacks-teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/ai/skills/stacks-teach/LICENSE +21 -0
- package/ai/skills/stacks-teach/MISSION-FORMAT.md +31 -0
- package/ai/skills/stacks-teach/NOTICE.md +10 -0
- package/ai/skills/stacks-teach/PLAYBOOK.md +136 -0
- package/ai/skills/stacks-teach/RESOURCES-FORMAT.md +32 -0
- package/ai/skills/stacks-teach/SKILL.md +24 -0
- package/ai/skills/stacks-technical-diagrams/SKILL.md +2 -2
- package/ai/skills/stacks-technical-diagrams/bin/diagrams +1 -1
- package/ai/skills/stacks-technical-diagrams/renderers/shared/bun-runtime.mjs +1 -1
- package/ai/skills/stacks-test-fixtures/LICENSE +21 -0
- package/ai/skills/stacks-test-fixtures/NOTICE.md +10 -0
- package/ai/skills/stacks-test-fixtures/SKILL.md +38 -0
- package/ai/skills/stacks-testing/SKILL.md +77 -4
- package/ai/skills/stacks-to-questionnaire/LICENSE +21 -0
- package/ai/skills/stacks-to-questionnaire/NOTICE.md +10 -0
- package/ai/skills/stacks-to-questionnaire/PLAYBOOK.md +51 -0
- package/ai/skills/stacks-to-questionnaire/SKILL.md +24 -0
- package/ai/skills/stacks-to-spec/LICENSE +21 -0
- package/ai/skills/stacks-to-spec/NOTICE.md +10 -0
- package/ai/skills/stacks-to-spec/PLAYBOOK.md +72 -0
- package/ai/skills/stacks-to-spec/SKILL.md +24 -0
- package/ai/skills/stacks-to-tickets/LICENSE +21 -0
- package/ai/skills/stacks-to-tickets/NOTICE.md +10 -0
- package/ai/skills/stacks-to-tickets/PLAYBOOK.md +102 -0
- package/ai/skills/stacks-to-tickets/SKILL.md +24 -0
- package/ai/skills/stacks-triage/AGENT-BRIEF.md +207 -0
- package/ai/skills/stacks-triage/LICENSE +21 -0
- package/ai/skills/stacks-triage/NOTICE.md +10 -0
- package/ai/skills/stacks-triage/OUT-OF-SCOPE.md +105 -0
- package/ai/skills/stacks-triage/PLAYBOOK.md +109 -0
- package/ai/skills/stacks-triage/SKILL.md +24 -0
- package/ai/skills/stacks-tunnel/SKILL.md +29 -19
- package/ai/skills/stacks-types/SKILL.md +77 -168
- package/ai/skills/stacks-ui/SKILL.md +66 -228
- package/ai/skills/stacks-unslop/NOTICE.md +25 -0
- package/ai/skills/stacks-unslop/SKILL.md +95 -0
- package/ai/skills/stacks-unslop/references/core-contract.md +88 -0
- package/ai/skills/stacks-unslop/references/patterns.md +110 -0
- package/ai/skills/stacks-unslop/references/presets.md +37 -0
- package/ai/skills/stacks-unslop/references/voice.md +95 -0
- package/ai/skills/stacks-utils/SKILL.md +45 -25
- package/ai/skills/stacks-validation/SKILL.md +67 -4
- package/ai/skills/stacks-video/SKILL.md +33 -0
- package/ai/skills/stacks-wait-what/LICENSE +21 -0
- package/ai/skills/stacks-wait-what/NOTICE.md +10 -0
- package/ai/skills/stacks-wait-what/PLAYBOOK.md +4 -0
- package/ai/skills/stacks-wait-what/SKILL.md +24 -0
- package/ai/skills/stacks-wayfinder/LICENSE +21 -0
- package/ai/skills/stacks-wayfinder/NOTICE.md +10 -0
- package/ai/skills/stacks-wayfinder/PLAYBOOK.md +125 -0
- package/ai/skills/stacks-wayfinder/SKILL.md +24 -0
- package/ai/skills/stacks-whois/SKILL.md +13 -3
- package/ai/skills/stacks-wizard/LICENSE +21 -0
- package/ai/skills/stacks-wizard/NOTICE.md +10 -0
- package/ai/skills/stacks-wizard/SKILL.md +8 -0
- package/ai/skills/stacks-wizard/scripts/template.sh +42 -26
- package/ai/skills/stacks-writing-beats/LICENSE +21 -0
- package/ai/skills/stacks-writing-beats/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-beats/PLAYBOOK.md +64 -0
- package/ai/skills/stacks-writing-beats/SKILL.md +28 -0
- package/ai/skills/stacks-writing-for-agents/LICENSE +21 -0
- package/ai/skills/stacks-writing-for-agents/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-for-agents/SKILL.md +7 -1
- package/ai/skills/stacks-writing-fragments/LICENSE +21 -0
- package/ai/skills/stacks-writing-fragments/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-fragments/PLAYBOOK.md +76 -0
- package/ai/skills/stacks-writing-fragments/SKILL.md +28 -0
- package/ai/skills/stacks-writing-shape/LICENSE +21 -0
- package/ai/skills/stacks-writing-shape/NOTICE.md +10 -0
- package/ai/skills/stacks-writing-shape/PLAYBOOK.md +76 -0
- package/ai/skills/stacks-writing-shape/SKILL.md +28 -0
- package/ide/vscode/package.json +1 -1
- package/package.json +2 -2
- /package/ai/skills/stacks-technical-diagrams/{bunfig.toml → runtime.toml} +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Native feature recipes
|
|
2
|
+
|
|
3
|
+
Read the named subsystem skills for their complete contracts. Examples use
|
|
4
|
+
explicit imports and supplied facts, not ambient declarations as runtime proof.
|
|
5
|
+
|
|
6
|
+
## A model becomes schema and protected CRUD
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
// app/Models/WorkItem.ts
|
|
10
|
+
import { defineModel } from '@stacksjs/orm'
|
|
11
|
+
import { schema } from '@stacksjs/validation'
|
|
12
|
+
|
|
13
|
+
export default defineModel({
|
|
14
|
+
name: 'WorkItem',
|
|
15
|
+
table: 'work_items',
|
|
16
|
+
belongsTo: ['User'],
|
|
17
|
+
traits: {
|
|
18
|
+
useUuid: true,
|
|
19
|
+
useTimestamps: true,
|
|
20
|
+
useSoftDeletes: true,
|
|
21
|
+
useApi: {
|
|
22
|
+
uri: 'work-items',
|
|
23
|
+
routes: ['index', 'store', 'show', 'update', 'destroy'],
|
|
24
|
+
middleware: ['auth'],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
attributes: {
|
|
28
|
+
title: {
|
|
29
|
+
fillable: true,
|
|
30
|
+
required: true,
|
|
31
|
+
validation: { rule: schema.string().min(1).max(120) },
|
|
32
|
+
},
|
|
33
|
+
done: {
|
|
34
|
+
fillable: true,
|
|
35
|
+
default: false,
|
|
36
|
+
validation: { rule: schema.boolean() },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
})
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The relationship supplies the `user_id` foreign-key column. Generated CRUD
|
|
43
|
+
recognizes user ownership and derives it from the authenticated user. A client
|
|
44
|
+
cannot choose another owner by changing its request body. This is a user-owned
|
|
45
|
+
resource, not a public catalog. Add a policy when per-row abilities need more
|
|
46
|
+
rules than ownership alone.
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
./buddy generate:migrations
|
|
50
|
+
# Review generated SQL and storage/framework/database/model-snapshot.<dialect>.json.
|
|
51
|
+
./buddy generate:migrations
|
|
52
|
+
# Confirm the second generation has no remaining diff.
|
|
53
|
+
./buddy migrate
|
|
54
|
+
./buddy generate
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Generation refreshes registries and type declarations; it does not compile a
|
|
58
|
+
new ORM class for this model. Import the app model explicitly when exact
|
|
59
|
+
inference matters, or use its server global after boot has injected it.
|
|
60
|
+
Test generated create/read/update/delete with real authenticated requests and
|
|
61
|
+
another user's rows. Do not substitute a source-grep check for row isolation.
|
|
62
|
+
|
|
63
|
+
## Extend instead of copying a built-in model
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
// app/Models/Order.ts
|
|
67
|
+
import { extendModel } from '@stacksjs/orm'
|
|
68
|
+
import { schema } from '@stacksjs/validation'
|
|
69
|
+
import Order from '../../storage/framework/defaults/app/Models/commerce/Order'
|
|
70
|
+
|
|
71
|
+
export default extendModel(Order, {
|
|
72
|
+
attributes: {
|
|
73
|
+
collectionNote: {
|
|
74
|
+
fillable: true,
|
|
75
|
+
validation: { rule: schema.string().max(200) },
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
})
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Inherited behavior follows upstream. Attribute entries merge by key; replacing
|
|
82
|
+
one entry replaces that entry's settings, not just one field inside it. Review
|
|
83
|
+
the resulting definition and generate the migration. Imported relations and
|
|
84
|
+
the full model override semantics are documented in `stacks-models`.
|
|
85
|
+
|
|
86
|
+
## Choose a custom action for behavior, not generic CRUD
|
|
87
|
+
|
|
88
|
+
Use an Action for a domain transition, aggregation, provider operation, or a
|
|
89
|
+
different authorization/response contract. Declare `validations` and let
|
|
90
|
+
`handle(request)` infer the body rather than annotating it with a broad request
|
|
91
|
+
type. `model` gives model-aware validation context; explicit action validations
|
|
92
|
+
run automatically before `authorize`, `before`, and `handle`.
|
|
93
|
+
|
|
94
|
+
Directly register the imported action through `createTypedRouter` when a typed
|
|
95
|
+
consumer needs inferred input/output. String action paths remain lazy runtime
|
|
96
|
+
references and do not provide the same response inference.
|
|
97
|
+
|
|
98
|
+
## Atomic work and deferred side effects
|
|
99
|
+
|
|
100
|
+
Use `transaction(async tx => ...)` and write through `tx` for every statement
|
|
101
|
+
that belongs to the transaction. A `Model.create()` inside that callback uses
|
|
102
|
+
the model executor; it is not automatically rebound to the callback handle.
|
|
103
|
+
|
|
104
|
+
Queue dispatch is transaction-aware and can defer until commit. Read
|
|
105
|
+
`stacks-queue` for `.afterCommit()`, `.withoutCommit()`, durable handler
|
|
106
|
+
descriptors, idempotency, and JSON payload restrictions. Ordered event dispatch
|
|
107
|
+
is different from awaiting listeners; use the result-bearing dispatch API
|
|
108
|
+
when the calling operation needs listener outcomes.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-native
|
|
3
|
+
description: Use when planning or implementing a Stacks feature, choosing a native API, or checking which framework capability already solves a task. Covers the complete native package catalog, model-driven workflows, feature gates, driver evidence, and cross-package gotchas.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Native Stacks capabilities
|
|
10
|
+
|
|
11
|
+
Start with the native feature that already owns the behavior. Read the selected
|
|
12
|
+
subsystem skill before implementing its API. [CATALOG.md](CATALOG.md) maps every
|
|
13
|
+
core package to task guidance and its current source entrypoint; browse the
|
|
14
|
+
relevant section rather than loading the whole reference.
|
|
15
|
+
|
|
16
|
+
## Choose a workflow
|
|
17
|
+
|
|
18
|
+
| Need | Native workflow |
|
|
19
|
+
|---|---|
|
|
20
|
+
| Persist a new entity and expose CRUD | `stacks-models`, `stacks-migrations`, `stacks-orm`, `stacks-actions`, `stacks-router` |
|
|
21
|
+
| Extend a built-in model without forking it | `extendModel`, then model-driven migration generation |
|
|
22
|
+
| Typed requests and an inferred API client | `Action.validations`, directly registered actions, `createTypedRouter` and `createTypedClient` |
|
|
23
|
+
| Authenticate or authorize rows | `stacks-auth`, model API ownership, middleware, policies and gates |
|
|
24
|
+
| Render interactive pages and validate forms | `stacks-stx`, `stacks-composables`, `stacks-forms`, `stacks-ui` |
|
|
25
|
+
| Queue work or run it later | `stacks-jobs`, `stacks-queue`, `stacks-scheduler` |
|
|
26
|
+
| Send mail, notifications, SMS or push | `stacks-mail`, `stacks-email`, `stacks-notifications`, `stacks-sms`, `stacks-push` |
|
|
27
|
+
| Publish CMS pages or run commerce | `stacks-cms`, `stacks-commerce`, `stacks-payments` |
|
|
28
|
+
| Build sites, newsletters, charts or media | `stacks-sites`, `stacks-newsletter`, `stacks-charts`, `stacks-image`, `stacks-audio`, `stacks-video` |
|
|
29
|
+
| Paginate, cache, search or store files | `stacks-pagination`, `stacks-cache`, `stacks-search-engine`, `stacks-storage` |
|
|
30
|
+
| Enable an optional bundle or run an experiment | `stacks-features` for framework bundles, `stacks-feature-flags` for user-targeted flags |
|
|
31
|
+
| Build, deploy or operate an app | `stacks-build`, `stacks-deploy`, `stacks-cloud`, `stacks-server`, `stacks-buddy` |
|
|
32
|
+
|
|
33
|
+
## Model-first implementation
|
|
34
|
+
|
|
35
|
+
Declare schema, validators, fillable fields, relationships, traits, and ownership
|
|
36
|
+
in `app/Models/`. `defineModel()` produces the query surface immediately;
|
|
37
|
+
`useApi` registers CRUD at runtime. It does not require generated ORM classes
|
|
38
|
+
or generated action files. Add a custom Action only when the behavior differs
|
|
39
|
+
from the native CRUD contract.
|
|
40
|
+
|
|
41
|
+
Run `./buddy generate:migrations`, review the SQL and dialect snapshot, then
|
|
42
|
+
run it again to confirm no further diff. Apply with `./buddy migrate`.
|
|
43
|
+
Keep models, generated migrations, and the snapshot together in review.
|
|
44
|
+
`migrate:fresh` destroys tables and is a separate development operation.
|
|
45
|
+
|
|
46
|
+
See [RECIPES.md](RECIPES.md) for an end-to-end native tracer bullet and
|
|
47
|
+
the cases that require an action, job, policy, or explicit route.
|
|
48
|
+
|
|
49
|
+
## Important boundaries
|
|
50
|
+
|
|
51
|
+
- `app/` overrides framework defaults. Use `extendModel` for additive model
|
|
52
|
+
changes; an ordinary override replaces the definition.
|
|
53
|
+
- Generated CRUD defaults to authenticated routes. Ownership and policies
|
|
54
|
+
govern rows separately; unscoped writes may be withheld by the default
|
|
55
|
+
row-scoping policy. Do not weaken that policy to make an example work.
|
|
56
|
+
- Transactional queries use the supplied `tx` handle. Model calls do not
|
|
57
|
+
automatically join that transaction's connection.
|
|
58
|
+
- Optional bundles control model/migration/view selection. Route mounting has
|
|
59
|
+
its own registry and default-bundle selection; a package being installed
|
|
60
|
+
does not mean every route is public or mounted.
|
|
61
|
+
- Browser declarations, stx eager bindings, demand-inline bindings, and
|
|
62
|
+
explicit imported composables are different surfaces. Read
|
|
63
|
+
`stacks-auto-imports` before using an unfamiliar bare name.
|
|
64
|
+
- Use request-time subpath exports when available. Tooling barrels may load
|
|
65
|
+
migrations, config discovery, or native modules that a handler does not need.
|
|
66
|
+
- A typed configuration or exported adapter is not proof of provider support.
|
|
67
|
+
[CAPABILITIES.md](CAPABILITIES.md) is generated from the driver evidence
|
|
68
|
+
registry, including partial and experimental limits.
|
|
69
|
+
|
|
70
|
+
## Completion and freshness
|
|
71
|
+
|
|
72
|
+
Use the subsystem's actual signatures and retained tests, and verify the
|
|
73
|
+
requested behavior. Run pickier through buddy, relevant tests, and the proper
|
|
74
|
+
typecheck. UI changes also complete the design preflight.
|
|
75
|
+
|
|
76
|
+
Within the framework repository, the native catalog and driver reference are generated by
|
|
77
|
+
`./buddy docs:native-skills`; `./buddy docs:native-skills:check` detects missing
|
|
78
|
+
package guidance and stale references. That check establishes coverage and
|
|
79
|
+
source freshness, not semantic correctness of every prose sentence.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-newsletter
|
|
3
|
+
description: Use when managing native subscriber lists, opt-in/unsubscribe, campaigns, scheduled delivery, variants, idempotency, or delivery usage. Covers @stacksjs/newsletter and the native marketing bundle.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Native newsletters and campaigns
|
|
10
|
+
|
|
11
|
+
The newsletter facade exposes lists, campaigns, subscribe, unsubscribe and
|
|
12
|
+
unsubscribeAll. This is the application delivery API; marketing copy and
|
|
13
|
+
strategy skills do not replace its consent, state and failure contracts.
|
|
14
|
+
|
|
15
|
+
## Lifecycle
|
|
16
|
+
|
|
17
|
+
Use subscribe(email, options) and token-based unsubscribe rather than raw
|
|
18
|
+
subscriber updates. Preserve one-click unsubscribe headers and suppression.
|
|
19
|
+
List/campaign helpers own their schema and state transitions; direct column
|
|
20
|
+
writes can bypass transition guards or schedule/idempotency behavior.
|
|
21
|
+
|
|
22
|
+
Campaign delivery snapshots, dispatch keys and state conflict errors protect
|
|
23
|
+
retries and concurrent queue requests. Scheduled work uses the package's actual
|
|
24
|
+
transition and readiness checks. DeliveryVariant allocation and
|
|
25
|
+
deliveryIdempotencyKey make repeated delivery explicit; usage limits and failure
|
|
26
|
+
classification distinguish deferred, failed and suppressed outcomes.
|
|
27
|
+
|
|
28
|
+
The transport uses configured email delivery and queue infrastructure. A queued
|
|
29
|
+
campaign is not proof that a provider delivered every message. Persist results,
|
|
30
|
+
handle webhooks according to the provider contract and respect opt-out state.
|
|
31
|
+
Enable/install the marketing bundle and migrate its models before persistence.
|
|
32
|
+
|
|
33
|
+
Prepare a draft or analysis within the request. Sending or scheduling a campaign
|
|
34
|
+
requires authorization for its recipients and scope. Reuse existing authorization
|
|
35
|
+
without asking again for each already-approved step.
|
|
36
|
+
|
|
37
|
+
Source: core/newsletter/src/{newsletter,lists,subscriptions,campaigns,delivery,
|
|
38
|
+
headers,sync,usage}.ts. Tests cover subscriptions, transition races, idempotency,
|
|
39
|
+
delivery usage and failure behavior.
|
|
@@ -8,207 +8,122 @@ allowed-tools: Read Edit Write Bash Grep Glob
|
|
|
8
8
|
|
|
9
9
|
# Stacks Notifications
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
useSMS,
|
|
28
|
-
useDatabase,
|
|
29
|
-
useNotification,
|
|
30
|
-
notification,
|
|
31
|
-
DatabaseNotificationDriver,
|
|
32
|
-
} from '@stacksjs/notifications'
|
|
33
|
-
|
|
34
|
-
// Types
|
|
35
|
-
import type { CreateNotificationOptions, DatabaseNotification } from '@stacksjs/notifications'
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Channel Factories
|
|
39
|
-
|
|
40
|
-
Each factory returns the underlying driver module for that channel.
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
// Email -- defaults to 'mailtrap', returns @stacksjs/email driver
|
|
44
|
-
const emailDriver = useEmail('ses')
|
|
45
|
-
const emailDriver = useEmail('sendgrid')
|
|
46
|
-
const emailDriver = useEmail('mailgun')
|
|
47
|
-
const emailDriver = useEmail('mailtrap')
|
|
48
|
-
const emailDriver = useEmail('smtp')
|
|
49
|
-
|
|
50
|
-
// SMS -- defaults to 'twilio', returns @stacksjs/sms driver
|
|
51
|
-
const smsDriver = useSMS('twilio')
|
|
52
|
-
const smsDriver = useSMS('vonage')
|
|
53
|
-
|
|
54
|
-
// Chat -- defaults to 'slack', returns @stacksjs/chat driver
|
|
55
|
-
const chatDriver = useChat('slack')
|
|
56
|
-
const chatDriver = useChat('discord')
|
|
57
|
-
const chatDriver = useChat('teams')
|
|
58
|
-
|
|
59
|
-
// Database -- returns DatabaseNotificationDriver object
|
|
60
|
-
const dbDriver = useDatabase()
|
|
61
|
-
|
|
62
|
-
// Auto-detect by type -- dispatches to the correct factory
|
|
63
|
-
const driver = useNotification('email', 'ses')
|
|
64
|
-
const driver = useNotification('sms', 'twilio')
|
|
65
|
-
const driver = useNotification('chat', 'slack')
|
|
66
|
-
const driver = useNotification('database')
|
|
67
|
-
|
|
68
|
-
// Default (uses config.default, falls back to 'email' + 'mailtrap')
|
|
69
|
-
const driver = notification()
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
`useNotification()` reads `config/notification.ts` for the default type. If no default is set, it throws `'No default notification type set in config/notification.ts'`.
|
|
73
|
-
|
|
74
|
-
The channel drivers are re-exports from their respective packages:
|
|
75
|
-
- `email` driver: `@stacksjs/email`
|
|
76
|
-
- `sms` driver: `@stacksjs/sms`
|
|
77
|
-
- `chat` driver: `@stacksjs/chat`
|
|
78
|
-
- `push` driver: `@stacksjs/push`
|
|
79
|
-
|
|
80
|
-
## Database Notification Driver
|
|
81
|
-
|
|
82
|
-
The `DatabaseNotificationDriver` provides CRUD operations for notifications stored in the `notifications` database table using Kysely query builder.
|
|
83
|
-
|
|
84
|
-
### Send a Notification
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
const db = useDatabase()
|
|
88
|
-
|
|
89
|
-
const notification = await db.send({
|
|
90
|
-
userId: 1,
|
|
91
|
-
type: 'order.shipped',
|
|
92
|
-
data: { orderId: 42, trackingNumber: 'ABC123' },
|
|
93
|
-
})
|
|
94
|
-
// Returns the created DatabaseNotification with auto-generated id, timestamps
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
`send()` inserts a row into the `notifications` table with:
|
|
98
|
-
- `user_id` from `options.userId`
|
|
99
|
-
- `type` from `options.type`
|
|
100
|
-
- `data` -- JSON.stringify'd from `options.data`
|
|
101
|
-
- `read_at` set to `null`
|
|
102
|
-
- `created_at` and `updated_at` set to current ISO timestamp
|
|
103
|
-
|
|
104
|
-
### Query Notifications
|
|
105
|
-
|
|
106
|
-
```typescript
|
|
107
|
-
// All notifications for a user, ordered by created_at desc
|
|
108
|
-
const all = await db.getUserNotifications(userId)
|
|
109
|
-
|
|
110
|
-
// Only unread (where read_at is null), ordered by created_at desc
|
|
111
|
-
const unread = await db.getUnreadNotifications(userId)
|
|
112
|
-
|
|
113
|
-
// Count of unread notifications
|
|
114
|
-
const count = await db.unreadCount(userId)
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### Mark as Read
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
// Mark a single notification as read (sets read_at to current timestamp)
|
|
121
|
-
await db.markAsRead(notificationId)
|
|
122
|
-
|
|
123
|
-
// Mark all unread notifications for a user as read
|
|
124
|
-
await db.markAllAsRead(userId)
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
`markAllAsRead()` only updates rows where `read_at` is null.
|
|
128
|
-
|
|
129
|
-
### Delete Notifications
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
// Delete a single notification by ID
|
|
133
|
-
await db.deleteNotification(notificationId)
|
|
134
|
-
|
|
135
|
-
// Delete all notifications for a user
|
|
136
|
-
await db.deleteAllNotifications(userId)
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### DatabaseNotification Interface
|
|
140
|
-
|
|
141
|
-
```typescript
|
|
142
|
-
interface DatabaseNotification {
|
|
143
|
-
id: number
|
|
144
|
-
user_id: number
|
|
145
|
-
type: string // e.g., 'order.shipped', 'payment.received'
|
|
146
|
-
data: string // JSON stringified -- parse with JSON.parse() when reading
|
|
147
|
-
read_at: string | null // ISO timestamp or null if unread
|
|
148
|
-
created_at: string // ISO timestamp
|
|
149
|
-
updated_at: string | null // ISO timestamp
|
|
150
|
-
}
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
### CreateNotificationOptions Interface
|
|
154
|
-
|
|
155
|
-
```typescript
|
|
156
|
-
interface CreateNotificationOptions {
|
|
157
|
-
userId: number
|
|
158
|
-
type: string
|
|
159
|
-
data: Record<string, any>
|
|
11
|
+
Use `notify` for application fan-out and the channel packages for their
|
|
12
|
+
provider-specific APIs. The database inbox and delivery log are different data.
|
|
13
|
+
|
|
14
|
+
## Application notification
|
|
15
|
+
|
|
16
|
+
~~~ts
|
|
17
|
+
import { notify } from '@stacksjs/notifications'
|
|
18
|
+
|
|
19
|
+
const results = await notify(
|
|
20
|
+
{ userId: 7, email: 'customer@example.com' },
|
|
21
|
+
{ subject: 'Order shipped', body: 'Your order is on its way.', data: { orderId: 42 } },
|
|
22
|
+
['email', 'database'],
|
|
23
|
+
)
|
|
24
|
+
for (const result of results) {
|
|
25
|
+
if (!result.success)
|
|
26
|
+
console.error(result.channel, result.error)
|
|
160
27
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
-
|
|
28
|
+
~~~
|
|
29
|
+
|
|
30
|
+
`notify(recipient, payload, channels = ['email'], options = {})` returns
|
|
31
|
+
`Promise<NotifyResult[]>`. Channels run with `Promise.allSettled` so one
|
|
32
|
+
failure does not block another. Each result has `channel`, `success` and an
|
|
33
|
+
optional `error`. A resolved call does not imply every channel succeeded.
|
|
34
|
+
|
|
35
|
+
| Channel | Required recipient data | Native package |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| email | email | `@stacksjs/email` |
|
|
38
|
+
| sms | phone | `@stacksjs/sms` |
|
|
39
|
+
| chat | configured channel transport | `@stacksjs/chat` |
|
|
40
|
+
| database | userId | database notification inbox |
|
|
41
|
+
| push | pushTokens, a string or string array | `@stacksjs/push`, default Expo |
|
|
42
|
+
| broadcast | broadcastChannel or userId | `@stacksjs/realtime` |
|
|
43
|
+
|
|
44
|
+
Payload: `{ body, subject?, data?, action? }`. Email treats body as text and
|
|
45
|
+
renders it through the framework layout. Use the exported `NotificationAction`
|
|
46
|
+
type for an action link. The broadcast fallback is `private-user.{userId}` or
|
|
47
|
+
public `notifications` when no user/channel is supplied. Its delivery is
|
|
48
|
+
best-effort; a missing realtime server is not a durable notification queue.
|
|
49
|
+
Read `stacks-chat` before choosing notify's chat channel: its generic body
|
|
50
|
+
payload does not supply a provider's channel recipient or configure credentials.
|
|
51
|
+
|
|
52
|
+
Current notify result mapping marks a fulfilled channel call successful. Email
|
|
53
|
+
explicitly checks EmailResult, but SMS/chat/push structured failures and a
|
|
54
|
+
broadcast result with delivered false are not all normalized into failed
|
|
55
|
+
NotifyResult entries. For provider-confirmed status, use the direct channel API
|
|
56
|
+
and inspect its structured result. The generic chat body also differs from
|
|
57
|
+
ChatMessage's to/content contract; use direct chat send with a valid message.
|
|
58
|
+
Delivery logs inherit this result mapping and are not final receipt evidence.
|
|
59
|
+
|
|
60
|
+
## Preferences and delivery tracking
|
|
61
|
+
|
|
62
|
+
When userId exists, `notify` filters disabled channels using
|
|
63
|
+
`notification_preferences`. An absent preference allows the channel.
|
|
64
|
+
`options.category` selects category-specific preferences. Global opt-outs still
|
|
65
|
+
disable a channel even when a category opts in; omitting a category reads only
|
|
66
|
+
global preferences.
|
|
67
|
+
`options.ignorePreferences: true` explicitly bypasses the filter for a
|
|
68
|
+
required transactional send. A lookup failure logs and sends the unfiltered
|
|
69
|
+
list, so this is not a fail-closed consent boundary.
|
|
70
|
+
|
|
71
|
+
Use `getNotificationPreferences`, `setNotificationPreference` and
|
|
72
|
+
`bulkSetPreferences` with their exported types. Writes use a transaction and
|
|
73
|
+
lock the user row; a bulk save is atomic across its whole preference matrix.
|
|
74
|
+
SMS also consults persistent
|
|
75
|
+
phone opt-outs unless ignorePreferences is true. Ordinary direct SMS sends have
|
|
76
|
+
their own contract; see `stacks-sms`.
|
|
77
|
+
|
|
78
|
+
Every effective channel outcome is recorded through
|
|
79
|
+
`recordNotificationDelivery(makeDeliveryRecord(...))`. The source distinguishes
|
|
80
|
+
missing optional schema compatibility from real persistence failures. Apply
|
|
81
|
+
model-driven migrations before relying on persistence. Inspect channel results
|
|
82
|
+
and transport results rather than assuming a delivery log is provider proof.
|
|
83
|
+
|
|
84
|
+
## Channel factories
|
|
85
|
+
|
|
86
|
+
- `useEmail(driver?)` returns a sendable transport. Without a driver it uses
|
|
87
|
+
the Mail singleton and `config/email.ts`. Unknown explicit drivers warn and
|
|
88
|
+
fall back to that singleton.
|
|
89
|
+
- `useSMS(driver?)` and `useChat(driver?)` select their driver modules
|
|
90
|
+
(defaults Twilio and Slack); configure those packages before sending.
|
|
91
|
+
- `useDatabase()` returns DatabaseNotificationDriver.
|
|
92
|
+
- `usePush()` returns the push namespace, and `useBroadcast()` the broadcast driver.
|
|
93
|
+
- `useNotification(type?, driver?)`/`notification()` select email, sms, chat
|
|
94
|
+
or database only. The default type comes from `config/notification.ts`,
|
|
95
|
+
falling back to email. Push/broadcast fan-out is through `notify` or their
|
|
96
|
+
dedicated factories, not this older type selector.
|
|
97
|
+
|
|
98
|
+
## Database inbox
|
|
99
|
+
|
|
100
|
+
~~~ts
|
|
101
|
+
import { useDatabase } from '@stacksjs/notifications'
|
|
102
|
+
|
|
103
|
+
const inbox = useDatabase()
|
|
104
|
+
await inbox.send({ userId: 7, type: 'order.shipped', data: { orderId: 42 } })
|
|
105
|
+
const unread = await inbox.getUnreadNotifications(7)
|
|
106
|
+
const count = await inbox.unreadCount(7)
|
|
107
|
+
await inbox.markAllAsRead(7)
|
|
108
|
+
~~~
|
|
109
|
+
|
|
110
|
+
Also available: `getUserNotifications(userId)`, `markAsRead(id)`,
|
|
111
|
+
`deleteNotification(id)` and `deleteAllNotifications(userId)`. These
|
|
112
|
+
id-only mutation helpers do not enforce ownership themselves; scope access in
|
|
113
|
+
the application's authenticated action before calling them.
|
|
114
|
+
|
|
115
|
+
Rows contain id, user_id, type, data (JSON string), read_at, created_at and
|
|
116
|
+
updated_at. Parse data when reading; null read_at means unread. The native
|
|
117
|
+
Notification model adds the User relation and timestamps; keep it aligned with
|
|
118
|
+
`database/src/notification-tables.ts`. Provider attempts belong in the separate
|
|
119
|
+
delivery log, not extra columns on the inbox.
|
|
120
|
+
|
|
121
|
+
## Sources and evidence
|
|
122
|
+
|
|
123
|
+
`storage/framework/core/notifications/src/index.ts` defines the real
|
|
124
|
+
signatures. `preferences.ts`, `delivery.ts` and `drivers/database.ts`
|
|
125
|
+
own their persistence; the query builder is bun-query-builder.
|
|
126
|
+
`notifications.test.ts`, `delivery-tracking.test.ts`,
|
|
127
|
+
`broadcast.test.ts` and `email-body.test.ts` cover retained behavior.
|
|
128
|
+
For provider status, consult `config/src/capabilities.ts` and each channel
|
|
129
|
+
skill; a constructed send request is not a live delivery assertion.
|
|
@@ -8,7 +8,8 @@ allowed-tools: Read Edit Write Bash Grep Glob
|
|
|
8
8
|
|
|
9
9
|
# Stacks Object Utilities
|
|
10
10
|
|
|
11
|
-
Type-safe object manipulation helpers
|
|
11
|
+
Type-safe object manipulation helpers, with core functions in index.ts and
|
|
12
|
+
additional transforms re-exported from transform.ts.
|
|
12
13
|
|
|
13
14
|
## Key Path
|
|
14
15
|
- Core package: `storage/framework/core/objects/src/index.ts` (single file, all functions)
|
|
@@ -22,10 +23,10 @@ Type-safe object manipulation helpers. All functions are exported from a single
|
|
|
22
23
|
|
|
23
24
|
### objectMap -- Transform Object Key/Value Pairs
|
|
24
25
|
```typescript
|
|
25
|
-
function objectMap<K extends string, V, NK = K, NV = V>(
|
|
26
|
+
function objectMap<K extends string, V, NK extends PropertyKey = K, NV = V>(
|
|
26
27
|
obj: Record<K, V>,
|
|
27
28
|
fn: (key: K, value: V) => [NK, NV] | undefined,
|
|
28
|
-
): Record<
|
|
29
|
+
): Record<NK, NV>
|
|
29
30
|
```
|
|
30
31
|
|
|
31
32
|
The callback receives `(key, value)` and must return either:
|
|
@@ -190,7 +191,20 @@ hasOwnProperty(null, 'a') // false (no throw)
|
|
|
190
191
|
hasOwnProperty(undefined, 'a') // false (no throw)
|
|
191
192
|
```
|
|
192
193
|
|
|
193
|
-
##
|
|
194
|
+
## Additional native transforms
|
|
195
|
+
|
|
196
|
+
The root also exports `omit`, `pickBy`, `omitBy`, `mapValues`, `mapKeys`,
|
|
197
|
+
`invert`, `isEmptyObject`, `getPath` and `setPath` from `transform.ts`.
|
|
198
|
+
Use a path array such as `['items', 0, 'name']`, not an assumed dot-string
|
|
199
|
+
parser. `getPath(source, path, fallback?)` reads a nested value;
|
|
200
|
+
`setPath(source, path, value)` performs a persistent update by copying containers
|
|
201
|
+
along the path and sharing unaffected siblings. Treat paths as application-owned
|
|
202
|
+
inputs; this helper is not a path authorization boundary. Choose `objectPick` for key-based selection and
|
|
203
|
+
`pickBy` for predicate selection. Read transform signatures for callback
|
|
204
|
+
argument order; `objectMap`'s `(key, value)` is not a universal convention.
|
|
205
|
+
Retained evidence: `core/objects/tests/transform.test.ts`.
|
|
206
|
+
|
|
207
|
+
## Mutation and typing gotchas
|
|
194
208
|
- `deepMerge` **mutates the target object** -- it does not create a new object. The return value is the same reference as `target`.
|
|
195
209
|
- `clearUndefined` **mutates the input object** -- it deletes properties in place.
|
|
196
210
|
- `objectPick` creates a NEW object -- original is not affected.
|