@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
|
@@ -73,10 +73,10 @@ Database.fromEnv() // From env vars (DB_CONNECTION, DB_DATABASE
|
|
|
73
73
|
|
|
74
74
|
## Global `db` Instance (utils.ts)
|
|
75
75
|
|
|
76
|
-
The
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
The db export is a lazy runtime facade. It initializes the query builder on use
|
|
77
|
+
and resolves application configuration through ensureDatabaseConfigLoaded.
|
|
78
|
+
Use @stacksjs/database/runtime for the narrow query/transaction entry; the
|
|
79
|
+
package root additionally exports migrations, seeders and driver tooling.
|
|
80
80
|
|
|
81
81
|
```typescript
|
|
82
82
|
import { db } from '@stacksjs/database'
|
|
@@ -161,73 +161,74 @@ interface PostgresConfig { name: string, host?: string, port?: number, username?
|
|
|
161
161
|
interface DynamoDbConfig { key: string, secret: string, region?: string, prefix?: string, endpoint?: string, tableName?: string, singleTable?: { enabled?, pkAttribute?, skAttribute?, entityTypeAttribute?, keyDelimiter?, gsiCount? } }
|
|
162
162
|
```
|
|
163
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
|
-
- Models sorted by dependency: User (0), Team (1), Project (2), everything else (10)
|
|
210
|
-
- Missing tables are skipped gracefully
|
|
211
|
-
- `buddy seed` and `buddy migrate:fresh --seed` also run application seeders after model factories
|
|
212
|
-
- Application seeder modules must default-export a class extending `Seeder` and implement `run()`
|
|
213
|
-
- Application seeders are for idempotent bootstrap work that does not belong in model factories, such as an initial workspace or role assignment
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
// database/seeders/OwnerSeeder.ts
|
|
164
|
+
## Model-driven migrations
|
|
165
|
+
|
|
166
|
+
Change the model, generate migrations, review the resulting SQL, then migrate.
|
|
167
|
+
The native runner loads application config, selects the dialect corpus, handles
|
|
168
|
+
feature-gated migration resources, and acquires the migration lock. It returns
|
|
169
|
+
a Result; inspect failures rather than treating a resolved call as success.
|
|
170
|
+
RunDatabaseMigration, generateMigrations and resetDatabase are exported tooling,
|
|
171
|
+
but their CLI actions supply the application's operation policy and environment.
|
|
172
|
+
|
|
173
|
+
Read stacks-migrations before using full regeneration, snapshot recovery,
|
|
174
|
+
preprocessing or destructive fresh/reset commands. SQLite preprocessing and
|
|
175
|
+
provider-specific DDL rules are implemented in core/database/src/migrations.ts;
|
|
176
|
+
installed package sources are copied before their SQL is rewritten.
|
|
177
|
+
The migration ledger and snapshot are different state, not interchangeable
|
|
178
|
+
proof that a table exists.
|
|
179
|
+
|
|
180
|
+
## Model factories and application seeders
|
|
181
|
+
|
|
182
|
+
Models opt into the factory pass with traits.useSeeder/seedable. Attribute
|
|
183
|
+
factories receive faker and the attributes generated so far; column names are
|
|
184
|
+
converted to snake_case, and password fields are hashed by the seeder's bcrypt
|
|
185
|
+
path. The source defines factory fallback behavior: a failed factory can use
|
|
186
|
+
its attribute default, so inspect the summary and warnings as well as row count.
|
|
187
|
+
|
|
188
|
+
seed(options?) returns a SeedSummary; seedModel$(name, options?) targets one
|
|
189
|
+
model; freshSeed truncates before generation; listSeedableModels inspects the
|
|
190
|
+
available definitions; makeModelRecords produces factory data without insertion.
|
|
191
|
+
These are public exports from @stacksjs/database.
|
|
192
|
+
|
|
193
|
+
When app/Models has user models, the default seed pass uses those definitions.
|
|
194
|
+
includeDefaults explicitly merges framework defaults; an app with no user models
|
|
195
|
+
uses defaults as fallback. User identity overrides a default even when the app
|
|
196
|
+
model opts out of seeding. The current model-seeder app scan is flat, unlike
|
|
197
|
+
recursive model resolution elsewhere; verify nested models at this seam.
|
|
198
|
+
|
|
199
|
+
Options also include only/except, defaultCount, fresh, append, allowProtected,
|
|
200
|
+
attachAccounts and includeDefaults. Default non-empty tables are skipped;
|
|
201
|
+
append is explicit. Protected auth/OAuth data and attachment to existing accounts
|
|
202
|
+
have their own guards because fixture generation can alter live credentials or
|
|
203
|
+
associate invented records with real people. Read buddy seed --help and inspect
|
|
204
|
+
the target connection before requesting a destructive or bypassing mode.
|
|
205
|
+
|
|
206
|
+
Application seeders default-export a class extending the native Seeder:
|
|
207
|
+
|
|
208
|
+
~~~ts
|
|
217
209
|
import { Seeder } from '@stacksjs/database'
|
|
218
210
|
|
|
219
|
-
export default class
|
|
211
|
+
export default class WorkspaceSeeder extends Seeder {
|
|
212
|
+
static override order = 10
|
|
213
|
+
static override tags = ['deploy']
|
|
214
|
+
|
|
220
215
|
async run(): Promise<void> {
|
|
221
|
-
//
|
|
216
|
+
// Find the application's existing workspace before creating missing state.
|
|
222
217
|
}
|
|
223
218
|
}
|
|
224
|
-
|
|
219
|
+
~~~
|
|
225
220
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
221
|
+
runApplicationSeeders applies order (lower first), then relative path for ties.
|
|
222
|
+
Tag/only/except selection lets deploy bootstrap remain separate from a large demo
|
|
223
|
+
corpus. Buddy seed and migrate:fresh --seed run the model and application passes;
|
|
224
|
+
model dependencies determine parent-first generation rather than a hard-coded
|
|
225
|
+
User/Team/Project order. fresh empties in reverse dependency order.
|
|
226
|
+
|
|
227
|
+
Source: storage/framework/core/database/src/seeder.ts and
|
|
228
|
+
core/buddy/src/commands/seed.ts. Retained seeder tests cover override opt-out,
|
|
229
|
+
dependency order, protected models and non-empty/append behavior. See
|
|
230
|
+
stacks-models for fixtures/factory declarations and stacks-testing for factories
|
|
231
|
+
that produce test records.
|
|
231
232
|
|
|
232
233
|
## Validator Type Guards (validators.ts)
|
|
233
234
|
`isStringValidator`, `isNumberValidator`, `enumValidator`, `isBooleanValidator`, `isDateValidator`, `isUnixValidator`, `isFloatValidator`, `isDatetimeValidator`, `isTimestampValidator`, `isTimestampTzValidator`, `isDecimalValidator`, `isSmallintValidator`, `isIntegerValidator`, `isBigintValidator`, `isBinaryValidator`, `isBlobValidator`, `isJsonValidator`
|
|
@@ -280,7 +281,7 @@ SQLite's SQL on a Turso or `sqld` server. Configure `TURSO_DATABASE_URL`
|
|
|
280
281
|
## config/database.ts Shape
|
|
281
282
|
```typescript
|
|
282
283
|
{
|
|
283
|
-
default: env.DB_CONNECTION || '
|
|
284
|
+
default: env.DB_CONNECTION || 'sqlite',
|
|
284
285
|
connections: { sqlite, turso, mysql, singlestore, vitess, postgres, dynamodb },
|
|
285
286
|
migrations: 'migrations',
|
|
286
287
|
migrationLocks: 'migration_locks',
|
|
@@ -326,8 +327,8 @@ SQLite's SQL on a Turso or `sqld` server. Configure `TURSO_DATABASE_URL`
|
|
|
326
327
|
```
|
|
327
328
|
|
|
328
329
|
## Gotchas
|
|
329
|
-
-
|
|
330
|
-
- The
|
|
330
|
+
- Default connection is SQLite in the shipped config; inspect application config and DB_CONNECTION before choosing a driver
|
|
331
|
+
- The db facade initializes lazily; invalid connection configuration may surface at first query use
|
|
331
332
|
- Query builder config lives in `config/query-builder.ts`, and reads `DB_CONNECTION` / `DB_*` from the env - it is not a second copy of `config/database.ts`
|
|
332
333
|
- The `.qb/` directory at project root stores query builder state for migration diffing
|
|
333
334
|
- `resetDatabase()` drops ALL tables including framework tables (OAuth, passkeys, jobs, etc.) -- only use in development
|
|
@@ -343,3 +344,32 @@ SQLite's SQL on a Turso or `sqld` server. Configure `TURSO_DATABASE_URL`
|
|
|
343
344
|
and generated `useApi` routes apply the trait-aware scope themselves.
|
|
344
345
|
- Transaction defaults: 2 retries, `read committed` isolation, with exponential backoff + jitter
|
|
345
346
|
- The ORM lives in TWO locations: `storage/framework/core/orm/` (package) and `storage/framework/orm/` (implementation)
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
## Driver conformance and topology
|
|
350
|
+
|
|
351
|
+
Read `storage/framework/core/config/src/capabilities.ts` before selecting a
|
|
352
|
+
driver. SQLite, MySQL and PostgreSQL have retained supported contracts. MySQL
|
|
353
|
+
and PostgreSQL need migrations generated for their dialect: the shipped SQLite
|
|
354
|
+
SQL corpus is not a portable migration bundle. SingleStore, Vitess and Turso
|
|
355
|
+
are experimental with explicit service/topology limits. DynamoDB helpers are a
|
|
356
|
+
separate entity API and cannot be selected as the SQL/ORM default.
|
|
357
|
+
|
|
358
|
+
Turso's libsql alias shares SQLite rendering, but uses remote Hrana transport.
|
|
359
|
+
Transactions must write through the tx handle; no embedded replicas or native
|
|
360
|
+
file backup are provided. Scheduler locks remain per host. Read the registry's
|
|
361
|
+
provider versions and retained evidence rather than equating an available adapter
|
|
362
|
+
with an unrestricted supported service.
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
## SQL fragments and temporal values
|
|
366
|
+
|
|
367
|
+
Parameterized sql fragments are compiled through the query builder; do not
|
|
368
|
+
extract .sql/.parameters and feed question marks directly to PostgreSQL unsafe.
|
|
369
|
+
whereRaw does not accept bound-value fragments on that path. Use typed where
|
|
370
|
+
or dialect-aware raw helpers. sql.as validates an alias; raw text remains a
|
|
371
|
+
trusted-code operation. sqlDateTime/parseSqlDateTime provide the canonical
|
|
372
|
+
application timestamp representation. Mixing SQLite datetime text with
|
|
373
|
+
application ISO text in raw comparisons can give wrong expiry boundaries.
|
|
374
|
+
Source: core/database/src/types.ts and sql-helpers.ts; see stacks-query-builder
|
|
375
|
+
for typed tables, raw binding, transaction handles and replica routing.
|
|
@@ -25,9 +25,9 @@ export { format as dateFormat } from './format' // convenience alias
|
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
Three source files:
|
|
28
|
-
- `now.ts`
|
|
29
|
-
- `format.ts`
|
|
30
|
-
- `parse.ts`
|
|
28
|
+
- `now.ts` - `DateTime` class and `now()` helper
|
|
29
|
+
- `format.ts` - standalone `format()` function with token-based formatting and timezone support
|
|
30
|
+
- `parse.ts` - standalone `parse()` function with token-based parsing
|
|
31
31
|
|
|
32
32
|
## DateTime Class (`now.ts`)
|
|
33
33
|
|
|
@@ -122,6 +122,9 @@ Implementation details:
|
|
|
122
122
|
- `addSeconds/Minutes/Hours` use millisecond arithmetic on timestamp
|
|
123
123
|
- `addDays` uses `Date.setDate()` (handles month boundaries correctly)
|
|
124
124
|
- `addMonths` uses `Date.setMonth()` (handles year boundaries)
|
|
125
|
+
- Month/year arithmetic inherits native overflow behavior. For a business
|
|
126
|
+
calendar month that must clamp January 31 to February's last day, use the
|
|
127
|
+
exported `addCalendarMonths(date, count, { utc? })` helper instead.
|
|
125
128
|
- `addYears` uses `Date.setFullYear()`
|
|
126
129
|
- All `sub*` methods delegate to `add*(-n)`
|
|
127
130
|
|
|
@@ -229,7 +232,9 @@ parse('2024-06-15 10:30 +0530', 'YYYY-MM-DD HH:mm Z') // Date with timezone offs
|
|
|
229
232
|
**Without format string**:
|
|
230
233
|
- Date-only ISO strings (YYYY-MM-DD) are parsed as LOCAL time, not UTC -- this is a deliberate fix for the native Date behavior where `new Date('2024-06-15')` treats it as UTC causing day shifts
|
|
231
234
|
- All other strings use native `new Date()` parsing
|
|
232
|
-
-
|
|
235
|
+
- Rejects unparseable native dates. Calendar fields can normalize through native
|
|
236
|
+
Date, so use validation for strict rejection of impossible dates such as
|
|
237
|
+
February 31 rather than treating this parser as a validation boundary.
|
|
233
238
|
|
|
234
239
|
**With format string**:
|
|
235
240
|
- Builds a regex from the format tokens and extracts named groups
|
|
@@ -240,7 +245,18 @@ parse('2024-06-15 10:30 +0530', 'YYYY-MM-DD HH:mm Z') // Date with timezone offs
|
|
|
240
245
|
- Z token: parses +HHMM offset, constructs UTC time and adjusts
|
|
241
246
|
- Throws if the format doesn't match the input string
|
|
242
247
|
|
|
243
|
-
##
|
|
248
|
+
## Named-zone instants and calendar months
|
|
249
|
+
|
|
250
|
+
The root additionally exports `zoneOffsetMinutes(instant, timeZone)`,
|
|
251
|
+
`zonedTimeToUtc(wallClock, timeZone)`, `isoInZone(instant, timeZone)` and
|
|
252
|
+
`addCalendarMonths(date, count, { utc? })`. A wall-clock string has no supplied
|
|
253
|
+
offset; the named IANA zone converts it into an instant. `isoInZone` retains
|
|
254
|
+
that zone's offset in serialized output rather than merely displaying a date.
|
|
255
|
+
Review `zone.ts` and its DST behavior when ambiguous/gap local times matter.
|
|
256
|
+
`addCalendarMonths` clones and clamps the day; ordinary `DateTime.addMonths`
|
|
257
|
+
preserves native Date overflow instead. Do not interchange those contracts.
|
|
258
|
+
|
|
259
|
+
## Current-time helper example
|
|
244
260
|
|
|
245
261
|
```typescript
|
|
246
262
|
import { now } from '@stacksjs/datetime'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stacks-deploy
|
|
3
|
-
description: Use when deploying a Stacks application - picking a deploy target (AWS, Hetzner, or a host you own over SSH), the deployment workflow (build → deploy), pre/post deploy hooks, server vs serverless mode selection, first-time deployment setup, rollback, deployment troubleshooting, or the buddy deploy command. For cloud infrastructure details (EC2, Lambda, CloudFormation, Route53, IAM, rpx, systemd), see stacks-cloud.
|
|
3
|
+
description: Use when deploying a Stacks application - picking a deploy target (AWS, Hetzner, or a host you own over SSH), the deployment workflow (build → deploy), pre/post deploy hooks, server vs serverless mode selection, first-time deployment setup, rollback, deployment troubleshooting, or the buddy deploy command. For cloud infrastructure details (EC2, Lambda, CloudFormation, Route53, IAM, rpx, systemd), see stacks-cloud. Covers buddy deploy, config/cloud.ts, provider previews, release and rollback.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Bun >= 1.3.0, TypeScript, AWS / Hetzner / any 64-bit Debian or Ubuntu host over SSH
|
|
6
6
|
allowed-tools: Read Edit Write Bash Grep Glob
|
|
@@ -214,3 +214,19 @@ buddy cloud:cleanup # clean retained resources
|
|
|
214
214
|
- A failover replica bucket (`infrastructure.storage.<name>.failover`) lives outside the stack, so
|
|
215
215
|
`buddy cloud:remove` leaves it, and its data, behind on purpose
|
|
216
216
|
- For infrastructure details, see the `stacks-cloud` skill
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
## Evidence and infrastructure contract
|
|
220
|
+
|
|
221
|
+
`core/config/src/capabilities.ts` marks the Hetzner and adopted SSH targets
|
|
222
|
+
experimental: their retained SSH-target tests do not prove live rollback/provider
|
|
223
|
+
conformance. AWS and Fly have runtime paths outside that registry's retained
|
|
224
|
+
deploy matrix; do not infer either supported or unsupported from their absence.
|
|
225
|
+
Read the actual deploy branch, preview and provider tests before claiming parity.
|
|
226
|
+
|
|
227
|
+
`config/cloud.ts` distinguishes the named tsCloud object (provider,
|
|
228
|
+
infrastructure, environments, sites) from the default Stacks wrapper. Follow the
|
|
229
|
+
installed file's shape rather than moving tsCloud settings into an unrelated
|
|
230
|
+
flat object. A cloud SQS queue definition does not implement QUEUE_DRIVER=sqs
|
|
231
|
+
in the Stacks queue package. Previews, destructive removal, secret writes and
|
|
232
|
+
provider mutations need the user's existing task authorization.
|
|
@@ -53,7 +53,7 @@ Typography is the primary structural and decorative infrastructure. Imagery is s
|
|
|
53
53
|
## 4. Color System
|
|
54
54
|
The color architecture is uncompromising. Gradients, soft drop shadows, and modern translucency are strictly prohibited. Colors simulate physical media or primitive emissive displays.
|
|
55
55
|
|
|
56
|
-
**CRITICAL: Choose ONE substrate palette per project and use it consistently. Never mix light and dark substrates within the same interface.** Expose these as Crosswind theme tokens in `config/
|
|
56
|
+
**CRITICAL: Choose ONE substrate palette per project and use it consistently. Never mix light and dark substrates within the same interface.** Expose these as Crosswind theme tokens in `config/css.ts`.
|
|
57
57
|
|
|
58
58
|
### If Swiss Industrial Print (Light)
|
|
59
59
|
- **Background:** `#F4F4F0` or `#EAE8E3` (matte, unbleached documentation paper).
|
|
@@ -43,7 +43,7 @@ Color is a scarce resource, used only for semantic meaning or subtle accents.
|
|
|
43
43
|
- Pale Green: `#EDF3EC` (Text: `#346538`)
|
|
44
44
|
- Pale Yellow: `#FBF3DB` (Text: `#956400`)
|
|
45
45
|
|
|
46
|
-
Expose these as Crosswind theme tokens or CSS custom properties in `config/
|
|
46
|
+
Expose these as Crosswind theme tokens or CSS custom properties in `config/css.ts` so dark mode (`dark:` + `useColorMode()` / `useDark()`) stays consistent.
|
|
47
47
|
|
|
48
48
|
## 5. Component Specifications
|
|
49
49
|
- Bento Box Feature Grids:
|
|
@@ -94,11 +94,25 @@ Motion should feel invisible: present but never distracting. Quiet sophisticatio
|
|
|
94
94
|
<script client>
|
|
95
95
|
const block = useRef('block')
|
|
96
96
|
const shown = state(false)
|
|
97
|
-
|
|
97
|
+
const reduce = usePreferredReducedMotion()
|
|
98
|
+
let stopObserving: (() => void) | undefined
|
|
99
|
+
onMount(() => {
|
|
100
|
+
if (reduce()) {
|
|
101
|
+
shown.set(true)
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
const observer = useIntersectionObserver(
|
|
105
|
+
() => block.current,
|
|
106
|
+
entry => { if (entry.isIntersecting) shown.set(true) },
|
|
107
|
+
{ threshold: 0.2, once: true },
|
|
108
|
+
)
|
|
109
|
+
stopObserving = () => observer.stop()
|
|
110
|
+
})
|
|
111
|
+
onDestroy(() => stopObserving?.())
|
|
98
112
|
</script>
|
|
99
113
|
|
|
100
114
|
<section ref="block"
|
|
101
|
-
:class="shown() ? 'translate-y-0 opacity-100' : 'translate-y-3 opacity-0'"
|
|
115
|
+
:class="shown() || reduce() ? 'translate-y-0 opacity-100' : 'translate-y-3 opacity-0'"
|
|
102
116
|
class="duration-[600ms] ease-[cubic-bezier(0.16,1,0.3,1)] transition-all">
|
|
103
117
|
<slot />
|
|
104
118
|
</section>
|
|
@@ -113,13 +113,25 @@ Stacks ships no animation library. Do NOT import `motion/react`, `gsap`, or `fra
|
|
|
113
113
|
<script client>
|
|
114
114
|
const card = useRef('reveal')
|
|
115
115
|
const shown = state(false)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
const reduce = usePreferredReducedMotion()
|
|
117
|
+
let stopObserving: (() => void) | undefined
|
|
118
|
+
onMount(() => {
|
|
119
|
+
if (reduce()) {
|
|
120
|
+
shown.set(true)
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
const observer = useIntersectionObserver(
|
|
124
|
+
() => card.current,
|
|
125
|
+
entry => { if (entry.isIntersecting) shown.set(true) },
|
|
126
|
+
{ threshold: 0.2, once: true },
|
|
127
|
+
)
|
|
128
|
+
stopObserving = () => observer.stop()
|
|
129
|
+
})
|
|
130
|
+
onDestroy(() => stopObserving?.())
|
|
119
131
|
</script>
|
|
120
132
|
|
|
121
133
|
<div ref="reveal"
|
|
122
|
-
:class="shown() ? 'translate-y-0 blur-0 opacity-100' : 'translate-y-16 blur-md opacity-0'"
|
|
134
|
+
:class="shown() || reduce() ? 'translate-y-0 blur-0 opacity-100' : 'translate-y-16 blur-md opacity-0'"
|
|
123
135
|
class="duration-[800ms] ease-[cubic-bezier(0.32,0.72,0,1)] transition-all">
|
|
124
136
|
<slot />
|
|
125
137
|
</div>
|
|
@@ -94,7 +94,7 @@ The React skill's "reach for Fluent / Carbon / Material / shadcn" advice does **
|
|
|
94
94
|
|
|
95
95
|
| Layer | What to use | Notes |
|
|
96
96
|
|---|---|---|
|
|
97
|
-
| Components | **Stacks UI** (`@stacksjs/ui`) |
|
|
97
|
+
| Components | **Stacks UI** (`@stacksjs/ui/components`) | Typed component exports backed by `@stacksjs/components`; STX tags resolve through the configured component plugin. Native applications use the mobile/desktop bridges and components appropriate to their host. See [stacks-ui](../stacks-ui). |
|
|
98
98
|
| Styling | **Crosswind** utilities | Tailwind-compatible syntax, `dark:` variant, arbitrary values. See [stacks-crosswind](../stacks-crosswind). |
|
|
99
99
|
| Icons | **Iconify** `i-{collection}-{name}` | hugeicons default. See Section 3.C. |
|
|
100
100
|
| Templating | **stx** SFC | `<script>` / `<template>` / `<style>`. See [stacks-stx](../stacks-stx). |
|
|
@@ -137,7 +137,7 @@ Unless the design read pulls in an aesthetic-specific companion, these are the d
|
|
|
137
137
|
### 3.B State & Reactivity
|
|
138
138
|
* Local reactive state uses signals: `state(initial)` (read `count()`, write `count.set(v)` / `count.update(n => n + 1)`), `derived(() => ...)` for computed, `effect(() => ...)` for side effects. Element refs use `useRef('name')`.
|
|
139
139
|
* Translation from React if you are porting: `useState` -> `state`, `useMemo` -> `derived`, `useEffect` -> `effect`, `useRef` -> `useRef`.
|
|
140
|
-
* **NEVER drive continuous values (mouse position, scroll progress, pointer physics, magnetic hover) through a signal you re-read every frame.** Writing signal state on every pointer or scroll frame re-runs reactive effects and collapses on mobile. Instead drive a **CSS custom property** from
|
|
140
|
+
* **NEVER drive continuous values (mouse position, scroll progress, pointer physics, magnetic hover) through a signal you re-read every frame.** Writing signal state on every pointer or scroll frame re-runs reactive effects and collapses on mobile. Instead drive a **CSS custom property** from in its subscription callback (Section 5.D) or let CSS scroll-driven animations do the work with no script at all.
|
|
141
141
|
|
|
142
142
|
### 3.C Icons
|
|
143
143
|
* **Use Iconify utility classes.** stx ships 200K+ Iconify icons as classes: `<i class="i-hugeicons-{name}"></i>`, or any collection `i-{collection}-{name}` (`i-ph-arrow-right`, `i-tabler-check`). Size and color with Crosswind: `class="h-6 w-6 text-gray-500 i-hugeicons-book-open"`.
|
|
@@ -335,11 +335,11 @@ These are tools, not defaults. Use them when the design read calls for them. **N
|
|
|
335
335
|
|
|
336
336
|
**Stacks ships NO motion library.** There is no `motion/react`, no `framer-motion`, no `gsap`. All motion is built from three sources only:
|
|
337
337
|
1. **Crosswind transitions + CSS keyframes** in a `<style>` block (hover, micro-interactions, load-ins). Animate ONLY `transform` and `opacity`.
|
|
338
|
-
2. **stx composables** for observing state (`useIntersectionObserver`, `useElementVisibility`, `useMouse`, `useMediaQuery`, `useResizeObserver`, `
|
|
338
|
+
2. **stx composables** for observing state (`useIntersectionObserver`, `useElementVisibility`, `useMouse`, `useMediaQuery`, `useResizeObserver`, `useWindowSize`, `useDeviceOrientation`) - toggle a Crosswind class or set a CSS custom property.
|
|
339
339
|
3. **CSS scroll-driven animations** (`animation-timeline: view()` / `scroll()`) for pinned, stacked, and horizontal-pan effects - no script needed.
|
|
340
340
|
|
|
341
341
|
* **Glassmorphism:** Appropriate for premium consumer, Apple-adjacent, luxury, or media-overlay vibes. Inappropriate for dashboards, public-sector, "boring B2B." When used, go beyond `backdrop-blur`: add a 1px inner border (`border-white/10`) and a subtle inner shadow for physical edge refraction. Provide a solid-fill fallback under `prefers-reduced-transparency` (Appendix C).
|
|
342
|
-
* **Magnetic Micro-physics:** Use when `MOTION_INTENSITY > 5` AND the brief reads premium / playful / agency. Implement by driving a **CSS custom property** from `useMouse()`
|
|
342
|
+
* **Magnetic Micro-physics:** Use when `MOTION_INTENSITY > 5` AND the brief reads premium / playful / agency. Implement by driving a **CSS custom property** from `useMouse()` in its subscription callback (Section 5.D). Never through per-frame signal state. See Section 3.B.
|
|
343
343
|
* **Perpetual Micro-Interactions** (Pulse, Typewriter, Float, Shimmer, Carousel): Use when `MOTION_INTENSITY > 5` AND the section actively benefits from motion (status indicators, live feeds). **Not every card needs an infinite loop.** If a section is informational, leave it still. Prefer spring-like `cubic-bezier` easing over linear.
|
|
344
344
|
* **"Motion claimed, motion shown."** If `MOTION_INTENSITY > 4`, the page must actually move: entry transitions on hero, scroll-reveal on key sections, hover feedback on CTAs, at minimum. A static page that claims `MOTION_INTENSITY: 7` is broken. Conversely, if you cannot ship working motion in scope, drop the dial to 3 and ship a clean static page. Never half-build motion that breaks (jumpy enters, missing observer cleanups).
|
|
345
345
|
* **MOTION MUST BE MOTIVATED (mandatory).** Before adding any animation, ask: "what does this communicate?" Valid answers: hierarchy, storytelling (sequenced reveal matching a narrative), feedback (acknowledging an action), state transition. Invalid answer: "it looked cool." Each scroll-driven section, each marquee, each pinned section needs a reason. If you cannot articulate it in one sentence, drop the animation.
|
|
@@ -444,14 +444,23 @@ For simple "items appear as they enter viewport" (no pinning), use `useIntersect
|
|
|
444
444
|
const listRef = useRef('reveal-list')
|
|
445
445
|
const reduce = useMediaQuery('(prefers-reduced-motion: reduce)')
|
|
446
446
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
447
|
+
let stopObserving: (() => void) | undefined
|
|
448
|
+
onMount(() => {
|
|
449
|
+
if (reduce()) {
|
|
450
|
+
listRef.current?.classList.add('is-revealed')
|
|
451
|
+
return
|
|
452
|
+
}
|
|
453
|
+
const observer = useIntersectionObserver(
|
|
454
|
+
() => listRef.current,
|
|
455
|
+
entry => {
|
|
456
|
+
if (entry.isIntersecting)
|
|
457
|
+
listRef.current?.classList.add('is-revealed')
|
|
458
|
+
},
|
|
459
|
+
{ threshold: 0.3, once: true },
|
|
460
|
+
)
|
|
461
|
+
stopObserving = () => observer.stop()
|
|
454
462
|
})
|
|
463
|
+
onDestroy(() => stopObserving?.())
|
|
455
464
|
</script>
|
|
456
465
|
|
|
457
466
|
<template>
|
|
@@ -485,28 +494,36 @@ For simple "items appear as they enter viewport" (no pinning), use `useIntersect
|
|
|
485
494
|
|
|
486
495
|
Use this for: feature lists, testimonial grids, logo walls, anything that just needs "enter on scroll." The observer flips ONE class; the stagger is pure CSS via `--i`. Under reduced motion items are visible immediately.
|
|
487
496
|
|
|
488
|
-
### 5.D Pointer / Magnetic - Canonical Skeleton (useMouse -> CSS custom property
|
|
497
|
+
### 5.D Pointer / Magnetic - Canonical Skeleton (useMouse subscription -> CSS custom property)
|
|
489
498
|
|
|
490
|
-
|
|
499
|
+
The STX demand-delivered `useMouse()` returns get/subscribe/stop, not callable
|
|
500
|
+
x/y signals. Subscribe to pointer state and write a CSS custom property. CSS
|
|
501
|
+
applies the transform; the template reactive tree does not rerun on each move.
|
|
491
502
|
|
|
492
503
|
```html
|
|
493
504
|
<!-- resources/components/magnetic.stx -->
|
|
494
505
|
<script client>
|
|
495
506
|
const btnRef = useRef('magnet')
|
|
496
|
-
const { x, y } = useMouse()
|
|
497
507
|
const reduce = useMediaQuery('(prefers-reduced-motion: reduce)')
|
|
508
|
+
let stopTracking: (() => void) | undefined
|
|
498
509
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
if (!el || reduce())
|
|
510
|
+
onMount(() => {
|
|
511
|
+
if (reduce())
|
|
502
512
|
return
|
|
503
|
-
const
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
513
|
+
const mouse = useMouse()
|
|
514
|
+
const unsubscribe = mouse.subscribe(({ x, y }) => {
|
|
515
|
+
const el = btnRef.current
|
|
516
|
+
if (!el || reduce())
|
|
517
|
+
return
|
|
518
|
+
const rect = el.getBoundingClientRect()
|
|
519
|
+
const dx = (x - (rect.left + rect.width / 2)) * 0.2
|
|
520
|
+
const dy = (y - (rect.top + rect.height / 2)) * 0.2
|
|
521
|
+
el.style.setProperty('--mx', `${dx}px`)
|
|
522
|
+
el.style.setProperty('--my', `${dy}px`)
|
|
523
|
+
})
|
|
524
|
+
stopTracking = () => { unsubscribe(); mouse.stop() }
|
|
509
525
|
})
|
|
526
|
+
onDestroy(() => stopTracking?.())
|
|
510
527
|
</script>
|
|
511
528
|
|
|
512
529
|
<template>
|
|
@@ -527,14 +544,17 @@ Track the pointer with `useMouse()` and write the offset to a **CSS custom prope
|
|
|
527
544
|
</style>
|
|
528
545
|
```
|
|
529
546
|
|
|
530
|
-
Critical points:
|
|
547
|
+
Critical points: subscribe to the delivered mouse contract, update CSS custom
|
|
548
|
+
properties, and clean up the tracker. Imported `@stacksjs/composables` mouse
|
|
549
|
+
helpers have a different Ref contract; read stacks-composables/BROWSER.md before
|
|
550
|
+
substituting one. No per-frame template signal writes or global listeners.
|
|
531
551
|
|
|
532
552
|
### 5.E Forbidden Animation Patterns
|
|
533
553
|
|
|
534
554
|
* **`window.addEventListener('scroll', ...)`** is banned. It runs on every scroll frame, jank-prone, no batching. Use `useIntersectionObserver` / `useElementVisibility`, or CSS scroll-driven animations (`animation-timeline: view()` / `scroll()`).
|
|
535
|
-
* **Any bare `window.*` or `document.*` access in an stx `<script>`** is banned (CLAUDE.md rule). Use composables (`useEventListener`, `
|
|
536
|
-
* **Custom scroll-progress calculations written into signal state.** Re-runs reactive effects on every frame. Drive a CSS custom property
|
|
537
|
-
* **`requestAnimationFrame` loops that write signal state.** Same reason. Prefer CSS-driven animation or a single CSS custom property write per frame from within
|
|
555
|
+
* **Any bare `window.*` or `document.*` access in an stx `<script>`** is banned (CLAUDE.md rule). Use composables (`useEventListener`, `useWindowSize`, `useResizeObserver`, `useMouse`) instead. Also banned: `var`.
|
|
556
|
+
* **Custom scroll-progress calculations written into signal state.** Re-runs reactive effects on every frame. Drive a CSS custom property in its subscription callback (Section 5.D) or use a CSS `scroll()` timeline instead.
|
|
557
|
+
* **`requestAnimationFrame` loops that write signal state.** Same reason. Prefer CSS-driven animation or a single CSS custom property write per frame from within its subscription callback.
|
|
538
558
|
* **Staggered orchestration:** use the CSS cascade (`transition-delay: calc(var(--i) * 60ms)` / `animation-delay`) for reveal sequence, as in Section 5.C. Do not spin up a JS timer per item.
|
|
539
559
|
|
|
540
560
|
---
|
|
@@ -669,7 +689,7 @@ These patterns came out of real LLM-generated landing-page tests. Treat them as
|
|
|
669
689
|
* **NO decorative colored status dots on every list/nav/badge.** A colored dot before "ONE Q4 SLOT OPEN" or before every nav link is banned by default. Acceptable only when the dot conveys actual semantic state (server status, availability flag) and is used sparingly.
|
|
670
690
|
|
|
671
691
|
**Em-dashes & typography flourishes**
|
|
672
|
-
* **NO em-dash (
|
|
692
|
+
* **NO em-dash (`-`) as a design element OR anywhere else.** See Section 9.G below for the complete, non-negotiable ban. The em-dash character is forbidden in headlines, eyebrows, pills, body copy, quotes, attribution, captions, button text, and alt text. Use the regular hyphen (`-`).
|
|
673
693
|
* **NO `<br>`-broken-and-italicized headlines** as a default "design move." Headlines should read naturally first, get clever only when the brief demands it.
|
|
674
694
|
* **NO vertical rotated text** ("INDEX OF WORK" rotated 90 degrees). Agency-portfolio cliche. Use it only when the brief is explicitly agency / Awwwards / experimental AND it serves a real composition purpose.
|
|
675
695
|
* **NO crosshair / hairline grid lines as decoration.** Vertical and horizontal lines drawn just to make the page "feel designed" are banned. Use them only when they organize real content.
|
|
@@ -707,19 +727,19 @@ These patterns came out of real LLM-generated landing-page tests. Treat them as
|
|
|
707
727
|
|
|
708
728
|
### 9.G EM-DASH BAN (the single most-violated Tell)
|
|
709
729
|
|
|
710
|
-
**Em-dash (
|
|
730
|
+
**Em-dash (`-`) is COMPLETELY banned.** It is the LLM's signature stylistic crutch and the #1 visual Tell in production tests. There is no "limited use" allowance, no "natural language frequency" allowance, no "in body copy is fine" allowance. None.
|
|
711
731
|
|
|
712
732
|
* **Banned in headlines.** Use a period or a comma.
|
|
713
733
|
* **Banned in eyebrows / labels / pills / button text / image captions / nav items.** Replace with line breaks, columns, or hairlines.
|
|
714
734
|
* **Banned in body copy.** Restructure the sentence: two sentences with a period, OR a comma, OR parentheses, OR a colon.
|
|
715
735
|
* **Banned in quote attribution.** Use a normal hyphen with spaces (`-`) or a line break + smaller-weight name.
|
|
716
|
-
* **Banned in en-dash form too (
|
|
736
|
+
* **Banned in en-dash form too (`-`) when used as a separator.** Date ranges (`2018-2026`) use a hyphen. Number ranges (`40-80k`) use a hyphen.
|
|
717
737
|
|
|
718
738
|
The ONLY permitted dash characters on the page are:
|
|
719
739
|
* Regular hyphen `-` (for compound words, ranges, line dividers in markup)
|
|
720
740
|
* Minus sign in math (`-5C`)
|
|
721
741
|
|
|
722
|
-
If your output contains a single
|
|
742
|
+
If your output contains a single `-` or `-` anywhere visible to the user, the output fails the Pre-Flight Check and must be rewritten.
|
|
723
743
|
|
|
724
744
|
This rule is non-negotiable. The agent has historically ignored em-dash limits when phrased as "use sparingly." The phrasing here is binary: zero em-dashes.
|
|
725
745
|
|
|
@@ -773,7 +793,7 @@ This is a vocabulary. Know these pattern names to communicate about them and rea
|
|
|
773
793
|
* **Crosswind transitions + CSS keyframes** - default for hover, micro-interactions, load-ins.
|
|
774
794
|
* **`useIntersectionObserver` / `useElementVisibility`** - enter-on-scroll, toggle a class (Section 5.C).
|
|
775
795
|
* **CSS scroll-driven animations** (`animation-timeline: view()` / `scroll()`) - pinned, stacked, horizontal-pan (Sections 5.A, 5.B).
|
|
776
|
-
* **`useMouse()` -> CSS custom property in
|
|
796
|
+
* **`useMouse()` -> CSS custom property in its subscription callback** - pointer / magnetic / tilt (Section 5.D).
|
|
777
797
|
* **NEVER import `motion/react`, `framer-motion`, or `gsap`.** Stacks ships none of them, and per-frame signal state fights the reactive system.
|
|
778
798
|
|
|
779
799
|
---
|
|
@@ -863,7 +883,7 @@ Run this matrix before outputting code. This is the last filter.
|
|
|
863
883
|
- [ ] **Dial values** explicit and reasoned from the brief, not silently using baseline?
|
|
864
884
|
- [ ] **Foundation** is the Stacks stack (Stacks UI + Crosswind + Iconify), no `npm install` of an external design system or icon package?
|
|
865
885
|
- [ ] **Redesign mode** detected and audit performed (if applicable, Section 11)?
|
|
866
|
-
- [ ] **ZERO em-dashes (
|
|
886
|
+
- [ ] **ZERO em-dashes (`-`) anywhere on the page.** Headlines, eyebrows, pills, body, quotes, attribution, captions, buttons, alt text. Zero. (Section 9.G - non-negotiable.)
|
|
867
887
|
- [ ] **No `var`, no bare `document.*` / `window.*`** in any stx `<script>` block?
|
|
868
888
|
- [ ] **Page Theme Lock**: ONE theme (light, dark, or auto) for the whole page, no section flips mid-page (Section 4.11)?
|
|
869
889
|
- [ ] **Color Consistency Lock**: one accent color used identically across all sections (Section 4.2)?
|
|
@@ -911,7 +931,7 @@ Run this matrix before outputting code. This is the last filter.
|
|
|
911
931
|
- [ ] **Motion claimed = motion shown**: if `MOTION_INTENSITY > 4`, page actually animates?
|
|
912
932
|
- [ ] **Sticky-stack / horizontal-pan** implemented per Section 5.A / 5.B (`position: sticky; top: 0` pin + CSS `view()` / `scroll()` timeline, reduced-motion gated)?
|
|
913
933
|
- [ ] **No `window.addEventListener('scroll')`**, no per-frame signal-state scroll math - using `useIntersectionObserver` / CSS scroll-driven animations only (Section 5.E)?
|
|
914
|
-
- [ ] **Pointer / magnetic** effects drive a CSS custom property from `useMouse()`
|
|
934
|
+
- [ ] **Pointer / magnetic** effects drive a CSS custom property from `useMouse()` in its subscription callback, never per-frame signal state (Section 5.D)?
|
|
915
935
|
- [ ] **Reduced motion** gated for everything `MOTION_INTENSITY > 3` (CSS media block AND/OR `useMediaQuery('(prefers-reduced-motion: reduce)')`)?
|
|
916
936
|
- [ ] **Dark mode** tokens defined and tested in both modes (Crosswind `dark:` or CSS vars + `useColorMode()`)?
|
|
917
937
|
- [ ] **Mobile collapse** explicit (`w-full`, `px-4`, `max-w-7xl mx-auto`) for high-variance layouts?
|
|
@@ -935,7 +955,7 @@ If a single checkbox cannot be honestly ticked, the page is not done. Fix it bef
|
|
|
935
955
|
|
|
936
956
|
There is no external-design-system install matrix for a Stacks app. The foundation is already in the project:
|
|
937
957
|
|
|
938
|
-
* **Components:** `@stacksjs/ui`
|
|
958
|
+
* **Components:** `@stacksjs/ui/components` and plugin-resolved STX tags. Check the installed exports and native host capabilities. See [stacks-ui](../stacks-ui).
|
|
939
959
|
* **Styling:** Crosswind utilities + `dark:` variant. See [stacks-crosswind](../stacks-crosswind).
|
|
940
960
|
* **Icons:** Iconify `i-{collection}-{name}` classes (hugeicons default). No install needed.
|
|
941
961
|
* **Templating / reactivity / motion composables:** stx (see [stacks-stx](../stacks-stx)) and [stacks-composables](../stacks-composables).
|
|
@@ -156,7 +156,7 @@ Motion must be motivated (flagship Section: hierarchy, storytelling, feedback, o
|
|
|
156
156
|
|
|
157
157
|
**Card stacking:** cards overlap and stack from the bottom as the user scrolls - a real sticky-stack, not a sequential reveal list (Section 5.A).
|
|
158
158
|
|
|
159
|
-
The full canonical skeletons live in the flagship: **sticky-stack (Section 5.A), horizontal-pan (Section 5.B), scroll-reveal stagger with `useIntersectionObserver` (Section 5.C), pointer/magnetic via `useMouse()` -> CSS custom property
|
|
159
|
+
The full canonical skeletons live in the flagship: **sticky-stack (Section 5.A), horizontal-pan (Section 5.B), scroll-reveal stagger with `useIntersectionObserver` (Section 5.C), pointer/magnetic via `useMouse()` -> CSS custom property in its subscription callback (Section 5.D), and Forbidden Animation Patterns (Section 5.E)**. Use them as written. This variant only adds the extra deterministic paradigms below.
|
|
160
160
|
|
|
161
161
|
### 5.A Scale-and-fade on scroll - canonical skeleton (pure CSS `view()` timeline)
|
|
162
162
|
|
|
@@ -221,16 +221,16 @@ Split the paragraph into word `<span>`s (via a `@foreach` over pre-split words i
|
|
|
221
221
|
|
|
222
222
|
Critical points: the words are split server-side, the reveal is a pure CSS `view()` timeline staggered by `--i`, and reduced motion shows all words immediately. No library, no scroll listener.
|
|
223
223
|
|
|
224
|
-
For pointer / magnetic physics, drive a CSS custom property from `useMouse()`
|
|
224
|
+
For pointer / magnetic physics, drive a CSS custom property from `useMouse()` in its subscription callback exactly as the flagship Section 5.D skeleton shows. Never write signal state per pointer or scroll frame.
|
|
225
225
|
|
|
226
226
|
### 5.C Forbidden (hard bans, same as flagship 5.E)
|
|
227
227
|
|
|
228
228
|
* `window.addEventListener('scroll', ...)` - banned. Use CSS scroll-driven animations or `useIntersectionObserver` / `useElementVisibility`.
|
|
229
|
-
* Bare `window.*` / `document.*` / `var` in any stx `<script>` - banned. Use composables (`useEventListener`, `
|
|
230
|
-
* `requestAnimationFrame` loops that write signal state on every frame - banned. Drive one CSS custom property per frame from
|
|
229
|
+
* Bare `window.*` / `document.*` / `var` in any stx `<script>` - banned. Use composables (`useEventListener`, `useWindowSize`, `useResizeObserver`, `useMouse`, `useScroll`, `useParallax`, `usePreferredReducedMotion`).
|
|
230
|
+
* `requestAnimationFrame` loops that write signal state on every frame - banned. Drive one CSS custom property per frame from in its subscription callback, or let a CSS timeline do it.
|
|
231
231
|
* Custom scroll-progress math written into signal state - banned. Use a `scroll()` timeline, or `useScroll()` reading into a CSS var.
|
|
232
232
|
|
|
233
|
-
Allowed composables are the flagship's list PLUS `useScroll` (scroll
|
|
233
|
+
Allowed composables are the flagship's list PLUS `useScroll` (scroll state), `useParallax` (device-orientation parallax), and `usePreferredReducedMotion` (reduced-motion signal, the composable form of `useMediaQuery('(prefers-reduced-motion: reduce)')`). Do NOT invent any others; if you need something else, use plain CSS / a standard web API through a composable and defer to [stacks-composables](../stacks-composables).
|
|
234
234
|
|
|
235
235
|
---
|
|
236
236
|
|