@stacksjs/defaults 0.70.206 → 0.70.208
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/TODO.md +21 -0
- package/ai/AGENTS.md +79 -0
- package/ai/README.md +45 -0
- package/ai/claude/launch.json +12 -0
- package/ai/skills/stacks-actions/SKILL.md +128 -0
- package/ai/skills/stacks-ai/SKILL.md +276 -0
- package/ai/skills/stacks-alias/SKILL.md +94 -0
- package/ai/skills/stacks-analytics/SKILL.md +91 -0
- package/ai/skills/stacks-api/SKILL.md +738 -0
- package/ai/skills/stacks-arrays/SKILL.md +277 -0
- package/ai/skills/stacks-auth/SKILL.md +422 -0
- package/ai/skills/stacks-auto-imports/SKILL.md +138 -0
- package/ai/skills/stacks-brandkit/SKILL.md +811 -0
- package/ai/skills/stacks-browse/SKILL.md +127 -0
- package/ai/skills/stacks-browse/scripts/browse.ts +492 -0
- package/ai/skills/stacks-browser/SKILL.md +145 -0
- package/ai/skills/stacks-buddy/SKILL.md +676 -0
- package/ai/skills/stacks-build/SKILL.md +163 -0
- package/ai/skills/stacks-cache/SKILL.md +125 -0
- package/ai/skills/stacks-calendar/SKILL.md +113 -0
- package/ai/skills/stacks-chat/SKILL.md +371 -0
- package/ai/skills/stacks-cli/SKILL.md +112 -0
- package/ai/skills/stacks-cloud/SKILL.md +192 -0
- package/ai/skills/stacks-cms/SKILL.md +217 -0
- package/ai/skills/stacks-collections/SKILL.md +82 -0
- package/ai/skills/stacks-commerce/SKILL.md +114 -0
- package/ai/skills/stacks-composables/SKILL.md +161 -0
- package/ai/skills/stacks-config/SKILL.md +144 -0
- package/ai/skills/stacks-configuration/SKILL.md +154 -0
- package/ai/skills/stacks-cron/SKILL.md +123 -0
- package/ai/skills/stacks-crosswind/SKILL.md +190 -0
- package/ai/skills/stacks-dashboard/SKILL.md +173 -0
- package/ai/skills/stacks-database/SKILL.md +286 -0
- package/ai/skills/stacks-datetime/SKILL.md +269 -0
- package/ai/skills/stacks-dependencies/SKILL.md +111 -0
- package/ai/skills/stacks-deploy/SKILL.md +102 -0
- package/ai/skills/stacks-design-brutalist/SKILL.md +110 -0
- package/ai/skills/stacks-design-minimalist/SKILL.md +115 -0
- package/ai/skills/stacks-design-output/SKILL.md +55 -0
- package/ai/skills/stacks-design-soft/SKILL.md +156 -0
- package/ai/skills/stacks-design-taste/SKILL.md +1012 -0
- package/ai/skills/stacks-design-taste-codex/SKILL.md +294 -0
- package/ai/skills/stacks-desktop/SKILL.md +78 -0
- package/ai/skills/stacks-development/SKILL.md +298 -0
- package/ai/skills/stacks-dns/SKILL.md +149 -0
- package/ai/skills/stacks-docs/SKILL.md +109 -0
- package/ai/skills/stacks-email/SKILL.md +236 -0
- package/ai/skills/stacks-enums/SKILL.md +100 -0
- package/ai/skills/stacks-env/SKILL.md +181 -0
- package/ai/skills/stacks-error-handling/SKILL.md +137 -0
- package/ai/skills/stacks-events/SKILL.md +228 -0
- package/ai/skills/stacks-faker/SKILL.md +158 -0
- package/ai/skills/stacks-git/SKILL.md +158 -0
- package/ai/skills/stacks-guard/SKILL.md +98 -0
- package/ai/skills/stacks-health/SKILL.md +75 -0
- package/ai/skills/stacks-http/SKILL.md +316 -0
- package/ai/skills/stacks-i18n/SKILL.md +198 -0
- package/ai/skills/stacks-image-to-code/SKILL.md +629 -0
- package/ai/skills/stacks-imagegen-mobile/SKILL.md +1474 -0
- package/ai/skills/stacks-imagegen-web/SKILL.md +998 -0
- package/ai/skills/stacks-investigate/SKILL.md +119 -0
- package/ai/skills/stacks-jobs/SKILL.md +136 -0
- package/ai/skills/stacks-lint/SKILL.md +184 -0
- package/ai/skills/stacks-listeners/SKILL.md +99 -0
- package/ai/skills/stacks-logging/SKILL.md +78 -0
- package/ai/skills/stacks-mail/SKILL.md +120 -0
- package/ai/skills/stacks-middleware/SKILL.md +249 -0
- package/ai/skills/stacks-migrations/SKILL.md +105 -0
- package/ai/skills/stacks-models/SKILL.md +267 -0
- package/ai/skills/stacks-new-feature/SKILL.md +206 -0
- package/ai/skills/stacks-notifications/SKILL.md +210 -0
- package/ai/skills/stacks-objects/SKILL.md +205 -0
- package/ai/skills/stacks-office-hours/SKILL.md +134 -0
- package/ai/skills/stacks-orm/SKILL.md +342 -0
- package/ai/skills/stacks-path/SKILL.md +118 -0
- package/ai/skills/stacks-payments/SKILL.md +373 -0
- package/ai/skills/stacks-plan-review/SKILL.md +152 -0
- package/ai/skills/stacks-plugins/SKILL.md +149 -0
- package/ai/skills/stacks-push/SKILL.md +376 -0
- package/ai/skills/stacks-query-builder/SKILL.md +128 -0
- package/ai/skills/stacks-queue/SKILL.md +559 -0
- package/ai/skills/stacks-realtime/SKILL.md +442 -0
- package/ai/skills/stacks-redesign/SKILL.md +182 -0
- package/ai/skills/stacks-registry/SKILL.md +58 -0
- package/ai/skills/stacks-repl/SKILL.md +80 -0
- package/ai/skills/stacks-retro/SKILL.md +122 -0
- package/ai/skills/stacks-review/SKILL.md +135 -0
- package/ai/skills/stacks-router/SKILL.md +231 -0
- package/ai/skills/stacks-routes/SKILL.md +105 -0
- package/ai/skills/stacks-scaffolding/SKILL.md +162 -0
- package/ai/skills/stacks-scheduler/SKILL.md +363 -0
- package/ai/skills/stacks-search-engine/SKILL.md +112 -0
- package/ai/skills/stacks-security/SKILL.md +129 -0
- package/ai/skills/stacks-security-audit/SKILL.md +128 -0
- package/ai/skills/stacks-server/SKILL.md +458 -0
- package/ai/skills/stacks-shell/SKILL.md +62 -0
- package/ai/skills/stacks-slug/SKILL.md +87 -0
- package/ai/skills/stacks-sms/SKILL.md +385 -0
- package/ai/skills/stacks-socials/SKILL.md +303 -0
- package/ai/skills/stacks-storage/SKILL.md +576 -0
- package/ai/skills/stacks-strings/SKILL.md +416 -0
- package/ai/skills/stacks-stx/SKILL.md +176 -0
- package/ai/skills/stacks-technical-diagrams/LICENSE +22 -0
- package/ai/skills/stacks-technical-diagrams/SKILL.md +290 -0
- package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +4 -0
- package/ai/skills/stacks-technical-diagrams/assets/template.html +1252 -0
- package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +289 -0
- package/ai/skills/stacks-technical-diagrams/bunfig.toml +1 -0
- package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +64 -0
- package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +88 -0
- package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +75 -0
- package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +70 -0
- package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +41 -0
- package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +62 -0
- package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +371 -0
- package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +82 -0
- package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +295 -0
- package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +91 -0
- package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +384 -0
- package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +84 -0
- package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +257 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +42 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +13 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +230 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +40 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +88 -0
- package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +40 -0
- package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +103 -0
- package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +481 -0
- package/ai/skills/stacks-technical-diagrams/schemas/README.md +68 -0
- package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +121 -0
- package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +43 -0
- package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +221 -0
- package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +241 -0
- package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +186 -0
- package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +332 -0
- package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +297 -0
- package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +28 -0
- package/ai/skills/stacks-testing/SKILL.md +129 -0
- package/ai/skills/stacks-tunnel/SKILL.md +125 -0
- package/ai/skills/stacks-types/SKILL.md +178 -0
- package/ai/skills/stacks-ui/SKILL.md +246 -0
- package/ai/skills/stacks-utils/SKILL.md +444 -0
- package/ai/skills/stacks-validation/SKILL.md +371 -0
- package/ai/skills/stacks-whois/SKILL.md +315 -0
- package/assets/world-map-data.ts +121 -0
- package/bootstrap.ts +114 -0
- package/docs/api-examples.md +46 -0
- package/docs/index.md +24 -0
- package/docs/markdown-examples.md +87 -0
- package/functions/analytics.ts +97 -0
- package/functions/api.ts +143 -0
- package/functions/auth.ts +208 -0
- package/functions/billing/payments.ts +149 -0
- package/functions/blog.ts +120 -0
- package/functions/cms/categorizables.ts +107 -0
- package/functions/cms/pages.ts +108 -0
- package/functions/cms/posts.ts +100 -0
- package/functions/cms/taggables.ts +102 -0
- package/functions/commerce/coupons.ts +128 -0
- package/functions/commerce/customers.ts +128 -0
- package/functions/commerce/gift-cards.ts +119 -0
- package/functions/commerce/orders.ts +112 -0
- package/functions/commerce/payments.ts +119 -0
- package/functions/commerce/products/categories.ts +123 -0
- package/functions/commerce/products/manufacturers.ts +123 -0
- package/functions/commerce/products/products.ts +123 -0
- package/functions/commerce/products/reviews.ts +123 -0
- package/functions/commerce/products/units.ts +123 -0
- package/functions/commerce/products/variants.ts +123 -0
- package/functions/commerce/shippings/delivery-routes.ts +123 -0
- package/functions/commerce/shippings/digital-deliveries.ts +119 -0
- package/functions/commerce/shippings/drivers.ts +123 -0
- package/functions/commerce/shippings/license-keys.ts +123 -0
- package/functions/commerce/shippings/shipping-methods.ts +123 -0
- package/functions/commerce/shippings/shipping-rates.ts +119 -0
- package/functions/commerce/shippings/shipping-zones.ts +119 -0
- package/functions/commerce/taxes.ts +119 -0
- package/functions/commerce/waitlist/products.ts +123 -0
- package/functions/commerce/waitlist/restaurants.ts +123 -0
- package/functions/craft.ts +107 -0
- package/functions/dashboard.ts +153 -0
- package/functions/inbox.ts +95 -0
- package/functions/jobs.ts +86 -0
- package/functions/monitoring/errors.ts +295 -0
- package/functions/queue.ts +111 -0
- package/functions/realtime/websockets.ts +96 -0
- package/functions/realtime.ts +52 -0
- package/functions/releases.ts +49 -0
- package/functions/search.ts +126 -0
- package/functions/toasts.ts +95 -0
- package/functions/uploads.ts +216 -0
- package/ide/.gitignore +4 -0
- package/ide/cursor/rules/auto-imports.mdc +574 -0
- package/ide/cursor/rules/code-style.mdc +12 -0
- package/ide/cursor/rules/documentation.mdc +9 -0
- package/ide/cursor/rules/error-handling-validation.mdc +11 -0
- package/ide/cursor/rules/key-conventions.mdc +11 -0
- package/ide/cursor/rules/project-structure.mdc +169 -0
- package/ide/cursor/rules/readme.mdc +318 -0
- package/ide/cursor/rules/syntax-formatting.mdc +9 -0
- package/ide/cursor/rules/testing.mdc +10 -0
- package/ide/cursor/rules/typescript.mdc +9 -0
- package/ide/cursor/rules/ui-styling.mdc +0 -0
- package/ide/dictionary.txt +397 -0
- package/ide/jetbrains/.fleet/settings.json +4 -0
- package/ide/jetbrains/.idea/.gitignore +5 -0
- package/ide/jetbrains/.idea/.name +1 -0
- package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
- package/ide/jetbrains/.idea/modules.xml +8 -0
- package/ide/jetbrains/.idea/stacks.iml +22 -0
- package/ide/jetbrains/.idea/vcs.xml +6 -0
- package/ide/jetbrains/.idea/webResources.xml +14 -0
- package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
- package/ide/jetbrains/installed.txt +4 -0
- package/ide/jetbrains/options/github-copilot.xml +5 -0
- package/ide/jetbrains/options/nodejs.xml +7 -0
- package/ide/jetbrains/options/templates.xml +124 -0
- package/ide/jetbrains/templates/JavaScript.xml +6 -0
- package/ide/jetbrains/templates/Stacks.xml +8 -0
- package/ide/vscode/.vscode/README.md +23 -0
- package/ide/vscode/.vscode/extensions.json +5 -0
- package/ide/vscode/.vscode/settings.json +176 -0
- package/ide/vscode/.vscode/stacks.code-snippets +181 -0
- package/ide/vscode/LICENSE.md +21 -0
- package/ide/vscode/README.md +36 -0
- package/ide/vscode/logo.png +0 -0
- package/ide/vscode/package.json +79 -0
- package/ide/zed/.zed/settings.json +139 -0
- package/lang/README.md +28 -0
- package/lang/de.yml +14 -0
- package/lang/en.yml +15 -0
- package/package.json +19 -3
- package/project/bootstrap +161 -0
- package/project/buddy +175 -0
- package/project/storage/framework/tsconfig.app.json +50 -0
- package/project/storage/framework/tsconfig.base.json +58 -0
- package/routes/core.ts +78 -0
- package/routes/dashboard-api.ts +233 -0
- package/routes/dashboard.ts +739 -0
- package/routes/email.ts +129 -0
- package/stores/[name].stx +16 -0
- package/stores/git.ts +71 -0
- package/stores/payment.ts +474 -0
- package/stores/queue.ts +43 -0
- package/stores/user.ts +29 -0
- package/stx-components-plugin.ts +25 -0
- package/styles/design-tokens.css +597 -0
- package/types/dashboard.ts +70 -0
- package/types/defaults.ts +438 -0
- package/vcs/github/CODE_OF_CONDUCT.md +83 -0
- package/vcs/github/CONTRIBUTING.md +187 -0
- package/vcs/github/EXPLANATIONS.md +41 -0
- package/vcs/github/FUNDING.yml +1 -0
- package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +49 -0
- package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
- package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
- package/vcs/github/SECURITY.md +70 -0
- package/vcs/github/renovate.json +5 -0
- package/vcs/github/stale.yml +14 -0
- package/vcs/github/workflows/README.md +16 -0
- package/vcs/github/workflows/ci.yml +114 -0
- package/vcs/github/workflows/export-size.yml +25 -0
- package/vcs/github/workflows/labeler.yml +13 -0
- package/vcs/github/workflows/release.yml +219 -0
- package/views/[...all].stx +8 -0
- package/views/about.md +3 -0
- package/views/auth/login.stx +1 -0
- package/views/auth/signup.stx +85 -0
- package/views/dashboard/.discovered-models.json +542 -0
- package/views/dashboard/AUDIT.md +904 -0
- package/views/dashboard/[...all].stx +89 -0
- package/views/dashboard/access-tokens/index.stx +177 -0
- package/views/dashboard/actions/index.stx +129 -0
- package/views/dashboard/analytics/blog/index.stx +356 -0
- package/views/dashboard/analytics/browsers/index.stx +263 -0
- package/views/dashboard/analytics/commerce/sales/index.stx +329 -0
- package/views/dashboard/analytics/commerce/web/index.stx +379 -0
- package/views/dashboard/analytics/countries/index.stx +289 -0
- package/views/dashboard/analytics/devices/index.stx +305 -0
- package/views/dashboard/analytics/events/index.stx +536 -0
- package/views/dashboard/analytics/index.stx +88 -0
- package/views/dashboard/analytics/marketing/index.stx +315 -0
- package/views/dashboard/analytics/pages/index.stx +271 -0
- package/views/dashboard/analytics/referrers/index.stx +319 -0
- package/views/dashboard/analytics/web/index.stx +356 -0
- package/views/dashboard/buddy/index.stx +198 -0
- package/views/dashboard/ci/index.stx +462 -0
- package/views/dashboard/cloud/index.stx +452 -0
- package/views/dashboard/commands/index.stx +295 -0
- package/views/dashboard/commerce/categories/index.stx +406 -0
- package/views/dashboard/commerce/coupons/index.stx +485 -0
- package/views/dashboard/commerce/customers/index.stx +410 -0
- package/views/dashboard/commerce/dashboard/index.stx +287 -0
- package/views/dashboard/commerce/delivery/delivery-routes.stx +305 -0
- package/views/dashboard/commerce/delivery/digital-delivery.stx +332 -0
- package/views/dashboard/commerce/delivery/drivers.stx +397 -0
- package/views/dashboard/commerce/delivery/index.stx +18 -0
- package/views/dashboard/commerce/delivery/license-keys.stx +380 -0
- package/views/dashboard/commerce/delivery/shipping-methods.stx +346 -0
- package/views/dashboard/commerce/delivery/shipping-rates.stx +338 -0
- package/views/dashboard/commerce/delivery/shipping-zones.stx +302 -0
- package/views/dashboard/commerce/delivery/tabs.ts +25 -0
- package/views/dashboard/commerce/gift-cards/index.stx +561 -0
- package/views/dashboard/commerce/manufacturers/index.stx +308 -0
- package/views/dashboard/commerce/orders/index.stx +247 -0
- package/views/dashboard/commerce/payments/index.stx +535 -0
- package/views/dashboard/commerce/pos/index.stx +653 -0
- package/views/dashboard/commerce/printers/devices/index.stx +273 -0
- package/views/dashboard/commerce/printers/receipts/index.stx +308 -0
- package/views/dashboard/commerce/products/detail.stx +563 -0
- package/views/dashboard/commerce/products/index.stx +370 -0
- package/views/dashboard/commerce/reviews/index.stx +656 -0
- package/views/dashboard/commerce/reviews/index.ts +0 -0
- package/views/dashboard/commerce/taxes/index.stx +377 -0
- package/views/dashboard/commerce/units/index.stx +317 -0
- package/views/dashboard/commerce/variants/index.stx +319 -0
- package/views/dashboard/commerce/waitlist/products.stx +942 -0
- package/views/dashboard/commerce/waitlist/restaurant.stx +1024 -0
- package/views/dashboard/components/index.stx +330 -0
- package/views/dashboard/composables/index.ts +19 -0
- package/views/dashboard/composables/useChart.ts +77 -0
- package/views/dashboard/composables/useNavigation.ts +99 -0
- package/views/dashboard/composables/useRole.ts +58 -0
- package/views/dashboard/composables/useTheme.ts +74 -0
- package/views/dashboard/content/authors/index.stx +171 -0
- package/views/dashboard/content/blog/index.stx +493 -0
- package/views/dashboard/content/categories/index.stx +169 -0
- package/views/dashboard/content/comments/index.stx +189 -0
- package/views/dashboard/content/dashboard.stx +383 -0
- package/views/dashboard/content/files/index.stx +706 -0
- package/views/dashboard/content/pages/index.stx +174 -0
- package/views/dashboard/content/posts/index.stx +269 -0
- package/views/dashboard/content/seo/index.stx +240 -0
- package/views/dashboard/content/tags/index.stx +167 -0
- package/views/dashboard/data/activity/index.stx +261 -0
- package/views/dashboard/data/dashboard/index.stx +116 -0
- package/views/dashboard/data/subscribers.stx +270 -0
- package/views/dashboard/data/teams.stx +275 -0
- package/views/dashboard/data/users.stx +279 -0
- package/views/dashboard/dependencies/index.stx +178 -0
- package/views/dashboard/deployments/[id].stx +234 -0
- package/views/dashboard/deployments/index.stx +9 -0
- package/views/dashboard/dns/index.stx +163 -0
- package/views/dashboard/environment/index.stx +283 -0
- package/views/dashboard/errors/index.stx +274 -0
- package/views/dashboard/forgot-password.stx +57 -0
- package/views/dashboard/functions/index.stx +159 -0
- package/views/dashboard/health/index.stx +248 -0
- package/views/dashboard/inbox/activity.stx +350 -0
- package/views/dashboard/inbox/index.stx +452 -0
- package/views/dashboard/inbox/settings.stx +290 -0
- package/views/dashboard/index.stx +252 -0
- package/views/dashboard/insights/index.stx +529 -0
- package/views/dashboard/jobs/[id].stx +430 -0
- package/views/dashboard/jobs/history.stx +222 -0
- package/views/dashboard/jobs/index.stx +214 -0
- package/views/dashboard/kanban/[id].stx +899 -0
- package/views/dashboard/kanban/index.stx +260 -0
- package/views/dashboard/layouts/default.stx +565 -0
- package/views/dashboard/layouts/guest.stx +10 -0
- package/views/dashboard/login.stx +48 -0
- package/views/dashboard/logs/index.stx +540 -0
- package/views/dashboard/mailboxes/index.stx +149 -0
- package/views/dashboard/management/permissions/index.stx +490 -0
- package/views/dashboard/marketing/campaigns/index.stx +604 -0
- package/views/dashboard/marketing/lists/index.stx +514 -0
- package/views/dashboard/marketing/reviews/index.stx +475 -0
- package/views/dashboard/marketing/social-posts/index.stx +560 -0
- package/views/dashboard/models/[model].stx +195 -0
- package/views/dashboard/models/index.stx +159 -0
- package/views/dashboard/monitoring/errors/index.stx +415 -0
- package/views/dashboard/notifications/dashboard.stx +383 -0
- package/views/dashboard/notifications/email.stx +336 -0
- package/views/dashboard/notifications/history.stx +373 -0
- package/views/dashboard/notifications/sms.stx +332 -0
- package/views/dashboard/packages/index.stx +195 -0
- package/views/dashboard/queries/[id].stx +381 -0
- package/views/dashboard/queries/history.stx +227 -0
- package/views/dashboard/queries/index.stx +335 -0
- package/views/dashboard/queries/slow.stx +318 -0
- package/views/dashboard/queue/index.stx +427 -0
- package/views/dashboard/realtime/index.stx +429 -0
- package/views/dashboard/register.stx +46 -0
- package/views/dashboard/releases/index.stx +389 -0
- package/views/dashboard/requests/index.stx +462 -0
- package/views/dashboard/serverless/index.stx +475 -0
- package/views/dashboard/servers/[id].stx +299 -0
- package/views/dashboard/servers/index.stx +483 -0
- package/views/dashboard/settings/billing.stx +50 -0
- package/views/dashboard/settings/index.stx +256 -0
- package/views/dashboard/settings/mail.stx +252 -0
- package/views/dashboard/stores/auth.ts +123 -0
- package/views/dashboard/stores/ci.ts +342 -0
- package/views/dashboard/stores/index.ts +129 -0
- package/views/dashboard/stores/kanban.ts +723 -0
- package/views/dashboard/stores/rbac.ts +350 -0
- package/views/dashboard/stx.config.ts +34 -0
- package/views/dashboard/teams/[id].stx +170 -0
- package/views/forum/category.stx +92 -0
- package/views/forum/index.stx +209 -0
- package/views/forum/new-topic.stx +113 -0
- package/views/forum/profile.stx +1 -0
- package/views/forum/topic.stx +143 -0
- package/views/hello-world/[name].stx +47 -0
- package/views/index.stx +21 -0
- package/views/system-tray/index.stx +147 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-development
|
|
3
|
+
description: Use when setting up or configuring the Stacks development environment — dev server, hot reload, development utilities, or IDE configuration. Covers the @stacksjs/development package, the dev server, CLI commands, reverse proxy, SSL, and dev workflow.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Stacks Development
|
|
10
|
+
|
|
11
|
+
## Key Paths
|
|
12
|
+
- Development package: `storage/framework/core/development/` (stub — exports `{}`)
|
|
13
|
+
- Dev server entry: `storage/framework/server/src/index.ts`
|
|
14
|
+
- Dev server utils: `storage/framework/server/src/utils.ts`
|
|
15
|
+
- Server build script: `storage/framework/server/build.ts`
|
|
16
|
+
- Dev action handlers: `storage/framework/core/actions/src/dev/`
|
|
17
|
+
- Buddy CLI dev commands: `storage/framework/core/buddy/src/commands/dev.ts`
|
|
18
|
+
- Preloader: `storage/framework/defaults/resources/plugins/preloader.ts`
|
|
19
|
+
- Port config: `config/ports.ts`
|
|
20
|
+
- STX config: `config/ui.ts`
|
|
21
|
+
- IDE defaults: `storage/framework/defaults/ide/`
|
|
22
|
+
- SSL setup: `storage/framework/core/actions/src/setup/ssl.ts`
|
|
23
|
+
- Bun config: `bunfig.toml`
|
|
24
|
+
- Dockerfile: `storage/framework/server/Dockerfile`
|
|
25
|
+
|
|
26
|
+
## Source Files
|
|
27
|
+
```
|
|
28
|
+
actions/src/dev/
|
|
29
|
+
├── index.ts # Re-exports all run*DevServer() wrappers
|
|
30
|
+
├── api.ts # API dev server (bun-router with CORS, port from config.ports.api)
|
|
31
|
+
├── views.ts # Frontend dev server (bun-plugin-stx serve, .stx templates)
|
|
32
|
+
├── dashboard.ts # Dashboard dev server (STX + native Craft window + config API)
|
|
33
|
+
├── dashboard-utils.ts # Model discovery, sidebar config, icon map, waitForServer()
|
|
34
|
+
├── docs.ts # Docs dev server (@stacksjs/bunpress, watch mode)
|
|
35
|
+
├── components.ts # Components dev server (runs `bun run dev` in libs/components/vue)
|
|
36
|
+
├── desktop.ts # Desktop dev server (runs `bun run dev` in framework/views/desktop)
|
|
37
|
+
└── system-tray.ts # System tray dev server (runs `bun run dev` in framework/system-tray)
|
|
38
|
+
|
|
39
|
+
server/
|
|
40
|
+
├── src/
|
|
41
|
+
│ ├── index.ts # Production server entry (Bun.serve, WebSocket, queue worker mode)
|
|
42
|
+
│ └── utils.ts # cleanCopy(), useCustomOrDefaultServerConfig(), buildDockerImage()
|
|
43
|
+
├── build.ts # Server build script (Bun.build for ESM, Docker image)
|
|
44
|
+
├── dev # Shell script for running server via Docker with volume mounts
|
|
45
|
+
├── Dockerfile # Multi-stage build: oven/bun:1.3.10, exposes port 3000
|
|
46
|
+
├── package.json # stacks-server package
|
|
47
|
+
├── tsconfig.docker.json
|
|
48
|
+
└── tsconfig.json
|
|
49
|
+
|
|
50
|
+
buddy/src/commands/
|
|
51
|
+
├── dev.ts # All `buddy dev` subcommands
|
|
52
|
+
├── build.ts # All `buddy build` subcommands
|
|
53
|
+
├── setup.ts # `buddy setup` and `buddy setup:ssl`
|
|
54
|
+
├── doctor.ts # `buddy doctor` health checks
|
|
55
|
+
└── maintenance.ts # `buddy down`, `buddy up`, `buddy status`
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Port Configuration (config/ports.ts)
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
{
|
|
62
|
+
frontend: env.PORT ?? 3000,
|
|
63
|
+
backend: env.PORT_BACKEND ?? 3001,
|
|
64
|
+
admin: env.PORT_ADMIN ?? 3002,
|
|
65
|
+
library: env.PORT_LIBRARY ?? 3003,
|
|
66
|
+
desktop: env.PORT_DESKTOP ?? 3004,
|
|
67
|
+
email: env.PORT_EMAIL ?? 3005,
|
|
68
|
+
docs: env.PORT_DOCS ?? 3006,
|
|
69
|
+
inspect: env.PORT_INSPECT ?? 3007,
|
|
70
|
+
api: env.PORT_API ?? 3008,
|
|
71
|
+
systemTray: env.PORT_SYSTEM_TRAY ?? 3009,
|
|
72
|
+
database: 3010,
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## CLI Commands
|
|
77
|
+
|
|
78
|
+
### Dev Server Commands
|
|
79
|
+
- `buddy dev` -- Start ALL dev servers in parallel (frontend, API, docs, dashboard + reverse proxy if custom domain)
|
|
80
|
+
- `buddy dev [server]` -- Start a specific server: `frontend`, `api`, `components`, `dashboard`, `desktop`, `system-tray`, `docs`
|
|
81
|
+
- `buddy dev -i` / `--interactive` -- Interactive prompt to choose which server to start
|
|
82
|
+
- `buddy dev --verbose` -- Show detailed output including proxy info and dependency logs
|
|
83
|
+
- `buddy dev:frontend` (aliases: `dev:pages`, `dev:views`) -- Frontend only
|
|
84
|
+
- `buddy dev:api` -- API server only
|
|
85
|
+
- `buddy dev:dashboard` (alias: `dev:admin`) -- Dashboard with native Craft window
|
|
86
|
+
- `buddy dev:docs` -- Documentation server only
|
|
87
|
+
- `buddy dev:components` -- Vue component library dev server
|
|
88
|
+
- `buddy dev:desktop` -- Desktop app dev server
|
|
89
|
+
- `buddy dev:system-tray` (alias: `dev:tray`) -- System tray dev server
|
|
90
|
+
|
|
91
|
+
### Build Commands
|
|
92
|
+
- `buddy build` -- Build stacks framework (default when no option specified)
|
|
93
|
+
- `buddy build components` -- Build component libraries
|
|
94
|
+
- `buddy build docs` -- Build documentation site
|
|
95
|
+
- `buddy build server` (alias: `build:docker`) -- Build Docker server image
|
|
96
|
+
- `buddy build:core` -- Build Stacks core packages
|
|
97
|
+
- `buddy build:stacks` -- Build the full Stacks framework
|
|
98
|
+
- `buddy build:cli` -- Build Buddy CLI binary
|
|
99
|
+
|
|
100
|
+
### Setup & Maintenance
|
|
101
|
+
- `buddy setup` (alias: `ensure`) -- Full project setup (pantry, deps, config)
|
|
102
|
+
- `buddy setup:ssl` (alias: `ssl:setup`) -- Generate and trust SSL certs for custom domain
|
|
103
|
+
- `buddy doctor` -- Health checks (Bun version, Node.js, package.json, .env, APP_KEY)
|
|
104
|
+
- `buddy fresh` -- Clean project + reinstall dependencies
|
|
105
|
+
- `buddy clean` -- Remove build artifacts via `cleanProject()`
|
|
106
|
+
- `buddy down` -- Maintenance mode (supports `--message`, `--secret`, `--retry`, `--allow`)
|
|
107
|
+
- `buddy up` -- Exit maintenance mode
|
|
108
|
+
- `buddy status` -- Check maintenance mode status
|
|
109
|
+
|
|
110
|
+
## Dev Server Architecture
|
|
111
|
+
|
|
112
|
+
### Unified Dev Server (`buddy dev` with no arguments)
|
|
113
|
+
When `buddy dev` runs without a specific server flag, `startDevelopmentServer()` in `dev.ts`:
|
|
114
|
+
1. Reads port configuration from env vars (`PORT`, `PORT_API`, `PORT_DOCS`, `PORT_ADMIN`)
|
|
115
|
+
2. Detects custom domain from `APP_URL` (e.g., `stacks.localhost`)
|
|
116
|
+
3. Prints Vite-style banner with URLs for Frontend, API, Docs, Dashboard
|
|
117
|
+
4. Sets `STACKS_PROXY_MANAGED=1` to prevent subprocesses from starting their own proxies
|
|
118
|
+
5. Starts all servers in parallel via `Promise.all()`:
|
|
119
|
+
- `runFrontendDevServer()` -- STX template server on port 3000
|
|
120
|
+
- `runApiDevServer()` -- bun-router API on port 3008
|
|
121
|
+
- `runDocsDevServer()` -- bunpress docs on port 3006
|
|
122
|
+
- `runDashboardDevServer()` -- STX + Craft native window on port 3002
|
|
123
|
+
- `startReverseProxy()` -- rpx HTTPS proxy on port 443 (only if custom domain set)
|
|
124
|
+
6. Registers SIGINT/SIGTERM handlers that `SIGKILL` the entire process group
|
|
125
|
+
|
|
126
|
+
### Action Execution (`runAction` in helpers/utils.ts)
|
|
127
|
+
- Dev actions (paths starting with `dev/`) automatically get `--watch` flag via `bun --watch`
|
|
128
|
+
- The `dev/views` action is special-cased for maximum performance: imports `bun-plugin-stx/serve` directly instead of spawning a subprocess
|
|
129
|
+
- `NODE_PATH` is set to include `pantry/` so compiled pantry packages can resolve `@stacksjs/*` at runtime
|
|
130
|
+
- Dev action subprocess output is suppressed by default (quiet mode), visible with `--verbose`
|
|
131
|
+
|
|
132
|
+
### Frontend Dev Server (views.ts)
|
|
133
|
+
Uses `bun-plugin-stx` serve function with pattern-based view resolution:
|
|
134
|
+
- User views: `resources/views` (checked first)
|
|
135
|
+
- Default views: `storage/framework/defaults/resources/views` (fallback)
|
|
136
|
+
- User layouts: `resources/layouts`
|
|
137
|
+
- Default layouts: `storage/framework/defaults/resources/layouts`
|
|
138
|
+
- Components: `storage/framework/defaults/resources/components/Dashboard`
|
|
139
|
+
|
|
140
|
+
### API Dev Server (api.ts)
|
|
141
|
+
- Uses `@stacksjs/router` with CORS middleware
|
|
142
|
+
- Calls `route.importRoutes()` to load route definitions
|
|
143
|
+
- Serves on `127.0.0.1` at `config.ports.api` (default 3008)
|
|
144
|
+
|
|
145
|
+
### Dashboard Dev Server (dashboard.ts)
|
|
146
|
+
- Starts STX server + config API + native Craft window in parallel
|
|
147
|
+
- Config API runs on `dashboardPort + 1` (default 3003), handles `POST /api/config/update`
|
|
148
|
+
- Config API allows live editing of `config/*.ts` files via regex-based key replacement
|
|
149
|
+
- Discovers ORM models from `app/Models/` and `storage/framework/defaults/app/Models/`
|
|
150
|
+
- Writes `.discovered-models.json` manifest for sidebar population
|
|
151
|
+
- Opens `@craft-native/ts` native window (1400x900, titlebar hidden, native sidebar)
|
|
152
|
+
- Sidebar has 10 sections: Home, Library, Content, App, Data, Commerce, Marketing, Analytics, Management, Utilities
|
|
153
|
+
|
|
154
|
+
### Docs Dev Server (docs.ts)
|
|
155
|
+
- Uses `@stacksjs/bunpress` with `{ watch: true, quiet: true }`
|
|
156
|
+
- Serves from `docs/` directory on port 3006
|
|
157
|
+
|
|
158
|
+
## Reverse Proxy & HTTPS
|
|
159
|
+
|
|
160
|
+
When `APP_URL` is set to a custom domain (not `localhost`):
|
|
161
|
+
- `startReverseProxy()` uses `@stacksjs/rpx` to proxy all subdomains through HTTPS on port 443
|
|
162
|
+
- Proxy mapping: `localhost:3000 -> domain`, `localhost:3008 -> api.domain`, `localhost:3006 -> docs.domain`, `localhost:3002 -> dashboard.domain`
|
|
163
|
+
- SSL certs stored in `~/.stacks/ssl/` with 825-day validity
|
|
164
|
+
- Individual dev servers check `STACKS_PROXY_MANAGED` to avoid starting duplicate proxies
|
|
165
|
+
|
|
166
|
+
### SSL Setup (`setup/ssl.ts`)
|
|
167
|
+
- `setupSSL(options)` -- Complete SSL setup: hosts file + cert generation + trust
|
|
168
|
+
- `generateCertificates(domain)` -- Uses `@stacksjs/tlsx` to create Root CA + host cert
|
|
169
|
+
- `addDomainToHosts(domain)` -- Adds `127.0.0.1 <domain>` to `/etc/hosts` (requires sudo)
|
|
170
|
+
- `trustCertificate(domain)` -- Adds cert to macOS Keychain or Linux ca-certificates
|
|
171
|
+
- Supports non-interactive mode via `SUDO_PASSWORD` env var
|
|
172
|
+
- Cert files: `~/.stacks/ssl/<domain>.crt`, `<domain>.key`, `<domain>.ca.crt`
|
|
173
|
+
|
|
174
|
+
## Hot Reload / Watch Mode
|
|
175
|
+
|
|
176
|
+
- **Dev actions use `bun --watch`**: All actions with paths starting with `dev/` are automatically run with Bun's `--watch` flag, which restarts the process on file changes
|
|
177
|
+
- **Frontend (STX)**: `bun-plugin-stx/serve` has its own built-in watch/HMR for `.stx` templates
|
|
178
|
+
- **API server**: Runs via `bun --watch`, restarts on route or handler changes
|
|
179
|
+
- **Docs**: `@stacksjs/bunpress` runs with `watch: true` for live documentation updates
|
|
180
|
+
- **Components**: Delegates to the component library's own `bun run dev` (typically Vite-based HMR)
|
|
181
|
+
|
|
182
|
+
## Preloader (preloader.ts)
|
|
183
|
+
|
|
184
|
+
Configured in `bunfig.toml` as `preload = ["./storage/framework/defaults/resources/plugins/preloader.ts"]`.
|
|
185
|
+
|
|
186
|
+
### Execution Phases
|
|
187
|
+
1. **Fast command skip**: Commands like `dev`, `build`, `test`, `lint`, `--version`, `--help` skip the preloader entirely for maximum startup speed
|
|
188
|
+
2. **Environment detection**: Deploy/production commands (`deploy`, `cloud:remove`, etc.) set `APP_ENV` and `NODE_ENV` before loading env files
|
|
189
|
+
3. **Env loading**: Calls `autoLoadEnv({ quiet: true })` from `@stacksjs/env` for encrypted `.env` file support
|
|
190
|
+
4. **Auto-imports** (non-fast commands only):
|
|
191
|
+
- Loads 21 `@stacksjs/*` packages into `globalThis` (actions, router, orm, validation, etc.)
|
|
192
|
+
- Loads all functions from `resources/functions/**/*.ts`
|
|
193
|
+
- Loads all ORM model instances into `globalThis` (priority: user > framework > defaults)
|
|
194
|
+
- Loads all Job instances from `app/Jobs/` into `globalThis`
|
|
195
|
+
- Loads all Controller classes into `globalThis`
|
|
196
|
+
- Runs `discoverPackages()` for package auto-discovery
|
|
197
|
+
5. **Protected globals**: 80+ built-in names (process, console, Buffer, fetch, Bun, etc.) are never overwritten
|
|
198
|
+
|
|
199
|
+
### bunfig.toml Configuration
|
|
200
|
+
```toml
|
|
201
|
+
preload = ["./storage/framework/defaults/resources/plugins/preloader.ts"]
|
|
202
|
+
|
|
203
|
+
[test]
|
|
204
|
+
preload = ["./tests/setup.ts"]
|
|
205
|
+
coverage = true
|
|
206
|
+
|
|
207
|
+
[run]
|
|
208
|
+
bun = true # equivalent to `bun --bun` for all `bun run` commands
|
|
209
|
+
|
|
210
|
+
[serve.static]
|
|
211
|
+
plugins = ["bun-plugin-stx"] # STX template engine plugin for Bun.serve
|
|
212
|
+
|
|
213
|
+
[install]
|
|
214
|
+
registry = { url = "https://registry.npmjs.org/", token = "$BUN_AUTH_TOKEN" }
|
|
215
|
+
linker = "hoisted"
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Production Server (server/src/index.ts)
|
|
219
|
+
|
|
220
|
+
- **Queue worker mode**: When `QUEUE_WORKER` env var is set, imports and runs the job from `app/Jobs/<JOB>.ts` with retry support (configurable via `JOB_RETRIES`, `JOB_BACKOFF_FACTOR`, `JOB_INITIAL_DELAY`, `JOB_JITTER`)
|
|
221
|
+
- **HTTP server**: `Bun.serve()` on `PORT` (default 3000), delegates to `serverResponse()` from `@stacksjs/router`
|
|
222
|
+
- **WebSocket**: Built-in WebSocket upgrade support (open/message/close handlers as stubs)
|
|
223
|
+
- **Development mode**: Auto-enabled when `APP_ENV` is not `production` or `prod`
|
|
224
|
+
- **Docker**: Multi-stage build with `oven/bun:1.3.10`, runs as non-root `bun` user, exposes port 3000, includes curl for healthchecks
|
|
225
|
+
|
|
226
|
+
## Server Build Process (server/build.ts)
|
|
227
|
+
|
|
228
|
+
1. Stops any running `stacks-server` Docker container
|
|
229
|
+
2. Cleans previous build artifacts (app/, config/, dist/, docs/, storage/)
|
|
230
|
+
3. Builds server entry (`src/index.ts`) to `dist/` using `Bun.build` (ESM, target: bun)
|
|
231
|
+
4. Builds all `app/**/*.{ts,js}` files to `server/app/` (ESM, no splitting, external: `@swc/wasm`)
|
|
232
|
+
5. Post-processes built files: rewrites `storage/framework/server` imports to `dist/`
|
|
233
|
+
6. Strips `export { ENV_KEY, ENV_SECRET, fromEnv }` from dist (bundler workaround)
|
|
234
|
+
7. Copies custom server config if present (`server/` dir at project root)
|
|
235
|
+
8. Optionally builds Docker image if `cloud.api.deploy` is enabled
|
|
236
|
+
|
|
237
|
+
## IDE Support
|
|
238
|
+
|
|
239
|
+
Default configurations provided at `storage/framework/defaults/ide/`:
|
|
240
|
+
|
|
241
|
+
### Cursor
|
|
242
|
+
- `cursor/rules/`: 11 rule files (auto-imports, code-style, documentation, error-handling, key-conventions, project-structure, syntax-formatting, testing, typescript, ui-styling, readme)
|
|
243
|
+
|
|
244
|
+
### VS Code
|
|
245
|
+
- `vscode/.vscode/extensions.json` -- Recommended extensions
|
|
246
|
+
- `vscode/.vscode/settings.json` -- Editor settings
|
|
247
|
+
- `vscode/.vscode/stacks.code-snippets` -- Code snippets
|
|
248
|
+
- `vscode/package.json` -- VS Code extension manifest
|
|
249
|
+
|
|
250
|
+
### JetBrains
|
|
251
|
+
- `.idea/` config (ESLint, modules, VCS, web resources)
|
|
252
|
+
- `.fleet/settings.json` -- Fleet IDE settings
|
|
253
|
+
- `options/` (GitHub Copilot, Node.js config)
|
|
254
|
+
- `templates/` (JavaScript and Stacks live templates)
|
|
255
|
+
|
|
256
|
+
### Zed
|
|
257
|
+
- `zed/.zed/settings.json` -- Zed editor settings
|
|
258
|
+
|
|
259
|
+
### Dictionary
|
|
260
|
+
- `dictionary.txt` -- Custom spell-check dictionary
|
|
261
|
+
|
|
262
|
+
## Doctor Health Checks
|
|
263
|
+
|
|
264
|
+
`buddy doctor` verifies:
|
|
265
|
+
- Bun runtime version (pass if v1.0+, warn otherwise, fail if missing)
|
|
266
|
+
- Node.js version (pass if v18+, warn otherwise)
|
|
267
|
+
- package.json existence and project name
|
|
268
|
+
- `.env` file presence (warn if missing, not a failure)
|
|
269
|
+
- `APP_KEY` is set (warn if not, suggests `buddy key:generate`)
|
|
270
|
+
|
|
271
|
+
## STX Configuration (config/ui.ts)
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
{
|
|
275
|
+
componentsDir: 'resources/components',
|
|
276
|
+
layoutsDir: 'resources/layouts',
|
|
277
|
+
partialsDir: 'resources/partials',
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Note: Dashboard mode overrides these settings via its own `serve()` options.
|
|
282
|
+
|
|
283
|
+
## Gotchas
|
|
284
|
+
- The `@stacksjs/development` package is currently a stub (`export {}`) -- all actual dev tooling lives in the actions and server packages
|
|
285
|
+
- The preloader skips entirely for `dev`, `build`, `test`, `lint`, and version/help commands -- auto-imports are NOT available in those contexts
|
|
286
|
+
- `buddy dev` (no arguments) starts ALL servers simultaneously -- use `buddy dev api` or `buddy dev frontend` to start only one
|
|
287
|
+
- The `STACKS_PROXY_MANAGED=1` env var prevents individual dev servers from starting their own reverse proxy -- only the unified `buddy dev` command manages the proxy
|
|
288
|
+
- Dev actions are executed with `bun --watch` automatically -- do NOT add `--watch` manually or you get double-restart behavior
|
|
289
|
+
- The `dev/views` action is special-cased in `runAction()` to run in-process (no subprocess) for performance -- other dev actions spawn subprocesses
|
|
290
|
+
- `NODE_PATH` is injected to include `pantry/` directory so compiled pantry packages can resolve `@stacksjs/*` dependencies at runtime
|
|
291
|
+
- The dashboard config API (port 3003) modifies `config/*.ts` files via regex replacement -- it only handles simple key-value patterns, not nested objects or arrays
|
|
292
|
+
- SSL certificates are stored in `~/.stacks/ssl/`, NOT in the project directory -- they persist across projects using the same domain
|
|
293
|
+
- Custom server configuration in `server/` at the project root overrides the default server config via file copy (checked by `useCustomOrDefaultServerConfig()`)
|
|
294
|
+
- The production server doubles as a queue worker when `QUEUE_WORKER` env var is set -- it imports the job by name from `app/Jobs/` and exits after completion
|
|
295
|
+
- Docker build strips `src/` directories, test files, sourcemaps, and `node_modules` from the image to minimize size
|
|
296
|
+
- The `bun-plugin-stx` serve plugin is resolved with a fallback: first tries normal `import('bun-plugin-stx/serve')`, then falls back to `pantry/bun-plugin-stx/dist/serve.js`
|
|
297
|
+
- `buddy fresh` is NOT the same as `buddy clean` -- `fresh` cleans AND reinstalls dependencies, while `clean` only removes artifacts
|
|
298
|
+
- The Craft native window for the dashboard uses `http://localhost:<port>` directly (not HTTPS) even when a custom domain proxy is running
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-dns
|
|
3
|
+
description: Use when managing DNS in a Stacks application — Route53 hosted zones, domain records, nameserver management, or DNS configuration. Covers @stacksjs/dns (AWS Route53 driver), @stacksjs/dnsx, and config/dns.ts.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Stacks DNS
|
|
10
|
+
|
|
11
|
+
## Key Paths
|
|
12
|
+
- Core package: `storage/framework/core/dns/src/`
|
|
13
|
+
- AWS driver: `storage/framework/core/dns/src/drivers/aws.ts`
|
|
14
|
+
- Config: `config/dns.ts`
|
|
15
|
+
- Package: `@stacksjs/dns`
|
|
16
|
+
|
|
17
|
+
## Source Files
|
|
18
|
+
```
|
|
19
|
+
dns/src/
|
|
20
|
+
├── index.ts # Re-exports from drivers and @stacksjs/dnsx
|
|
21
|
+
└── drivers/
|
|
22
|
+
└── aws.ts # AWS Route53 DNS management
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## AWS Route53 API
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import {
|
|
29
|
+
createHostedZone,
|
|
30
|
+
deleteHostedZone,
|
|
31
|
+
deleteHostedZoneRecords,
|
|
32
|
+
getNameservers,
|
|
33
|
+
getHostedZoneNameservers,
|
|
34
|
+
updateNameservers,
|
|
35
|
+
findHostedZone,
|
|
36
|
+
hasUserDomainBeenAddedToCloud,
|
|
37
|
+
writeNameserversToConfig,
|
|
38
|
+
addDomain,
|
|
39
|
+
} from '@stacksjs/dns'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Hosted Zone Management
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// Create or retrieve a hosted zone
|
|
46
|
+
createHostedZone(domainName: string): Promise<Result<HostedZone | CreateHostedZoneResult | string | null, Error>>
|
|
47
|
+
|
|
48
|
+
// Delete a zone and all its records
|
|
49
|
+
deleteHostedZone(domainName: string): Promise<Result<string, Error>>
|
|
50
|
+
|
|
51
|
+
// Delete records only, keep zone
|
|
52
|
+
deleteHostedZoneRecords(domainName: string): Promise<Result<string, Error>>
|
|
53
|
+
|
|
54
|
+
// Find a zone by domain name
|
|
55
|
+
findHostedZone(domain: string): Promise<Result<string | null | undefined, Error>>
|
|
56
|
+
|
|
57
|
+
// Check if domain is in cloud
|
|
58
|
+
hasUserDomainBeenAddedToCloud(domainName?: string): Promise<boolean>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Nameserver Management
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
// Get nameservers from Route53 Domains
|
|
65
|
+
getNameservers(domainName?: string): Promise<string[] | undefined>
|
|
66
|
+
|
|
67
|
+
// Get nameservers from hosted zone delegation set
|
|
68
|
+
getHostedZoneNameservers(domainName: string): Promise<string[]>
|
|
69
|
+
|
|
70
|
+
// Update domain nameservers in Route53
|
|
71
|
+
updateNameservers(hostedZoneNameservers: string[], domainName?: string): Promise<boolean | undefined>
|
|
72
|
+
|
|
73
|
+
// Persist nameservers to config/dns.ts
|
|
74
|
+
writeNameserversToConfig(nameservers: string[]): void
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Domain Actions
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// Run domain add action (delegates to CLI action)
|
|
81
|
+
addDomain(options: DeployOptions): Promise<Result<Subprocess, CommandError>>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Helpers
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
// Internal helpers
|
|
88
|
+
deleteRecordsForZone(zoneId: string): Promise<void>
|
|
89
|
+
normalizeDomain(domain: string): string
|
|
90
|
+
sanitizeNameserver(ns: string): string
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Configuration (config/dns.ts)
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { defineDns } from '@stacksjs/config'
|
|
97
|
+
|
|
98
|
+
export default defineDns({
|
|
99
|
+
a: [{ name: 'example.com', value: '1.2.3.4', ttl: 300 }],
|
|
100
|
+
aaaa: [],
|
|
101
|
+
cname: [],
|
|
102
|
+
mx: [],
|
|
103
|
+
txt: [],
|
|
104
|
+
nameservers: [
|
|
105
|
+
'ns-1731.awsdns-24.co.uk',
|
|
106
|
+
'ns-355.awsdns-44.com',
|
|
107
|
+
'ns-536.awsdns-03.net',
|
|
108
|
+
'ns-1395.awsdns-46.org',
|
|
109
|
+
],
|
|
110
|
+
redirects: [],
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### DnsConfig Interface
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
interface DnsConfig {
|
|
118
|
+
a: Array<{ name: string, value: string, ttl?: number }>
|
|
119
|
+
aaaa: Array<{ name: string, value: string, ttl?: number }>
|
|
120
|
+
cname: Array<{ name: string, value: string, ttl?: number }>
|
|
121
|
+
mx: Array<{ name: string, value: string, ttl?: number, priority?: number }>
|
|
122
|
+
txt: Array<{ name: string, value: string, ttl?: number }>
|
|
123
|
+
nameservers: string[]
|
|
124
|
+
redirects?: Array<{ from: string, to: string }>
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## CLI Commands
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
buddy dns # DNS management
|
|
132
|
+
buddy domains # Domain management
|
|
133
|
+
buddy domains:add # Add a domain to cloud
|
|
134
|
+
buddy domains:remove # Remove a domain
|
|
135
|
+
buddy domains:purchase # Purchase a domain
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Re-exports from @stacksjs/dnsx
|
|
139
|
+
|
|
140
|
+
Additional DNS utilities (lookups, resolution) are re-exported from the `@stacksjs/dnsx` package.
|
|
141
|
+
|
|
142
|
+
## Gotchas
|
|
143
|
+
- **AWS-only** — currently only supports AWS Route53 as the DNS provider
|
|
144
|
+
- **Uses ts-cloud SDK** — Route53 API calls go through the ts-cloud abstraction
|
|
145
|
+
- **Result type** — most functions return `Result<T, Error>` from `ts-error-handling`, not plain values
|
|
146
|
+
- **`writeNameserversToConfig` mutates config/dns.ts** — directly writes to the config file
|
|
147
|
+
- **Domain name normalization** — trailing dots and www prefixes are handled automatically
|
|
148
|
+
- **`createHostedZone` is idempotent** — returns existing zone if it already exists
|
|
149
|
+
- **Nameservers must be synced** — hosted zone nameservers must match domain registrar nameservers for DNS to work
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-docs
|
|
3
|
+
description: Use when building or configuring documentation for a Stacks project — BunPress setup, doc generation, navigation, sidebar structure, or documentation meta/SEO. Covers @stacksjs/docs and config/docs.ts.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Stacks Documentation
|
|
10
|
+
|
|
11
|
+
## Key Paths
|
|
12
|
+
- Core package: `storage/framework/core/docs/src/`
|
|
13
|
+
- Doc content: `docs/`
|
|
14
|
+
- Config: `config/docs.ts`
|
|
15
|
+
- Output: `storage/framework/docs/dist/`
|
|
16
|
+
- Package: `@stacksjs/docs`
|
|
17
|
+
|
|
18
|
+
## Source Files
|
|
19
|
+
```
|
|
20
|
+
docs/src/
|
|
21
|
+
├── index.ts # frameworkDefaults + merged docsConfig
|
|
22
|
+
└── meta.ts # CDN URLs, social links, PWA patterns
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## API
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { frameworkDefaults, docsConfig } from '@stacksjs/docs'
|
|
29
|
+
|
|
30
|
+
// Framework defaults
|
|
31
|
+
const frameworkDefaults: BunPressOptions = {
|
|
32
|
+
docsDir: path.projectPath('docs'),
|
|
33
|
+
outDir: path.frameworkPath('docs/dist'),
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Merged config (framework defaults + user config from config/docs.ts)
|
|
37
|
+
const docsConfig: BunPressOptions = { ...frameworkDefaults, ...userConfig }
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Meta Exports
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import { googleapis, gstatic, font, ogUrl, ogImage, github, releases, contributing, discord, twitter, pwaFontsRegex, pwaFontStylesRegex } from '@stacksjs/docs'
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Social and CDN constants used in documentation templates and PWA configuration.
|
|
47
|
+
|
|
48
|
+
## Configuration (config/docs.ts)
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import type { BunPressOptions } from '@stacksjs/docs'
|
|
52
|
+
|
|
53
|
+
export default {
|
|
54
|
+
// Navigation
|
|
55
|
+
nav: [
|
|
56
|
+
{ text: 'Changelog', link: 'https://github.com/stacksjs/stacks/blob/main/CHANGELOG.md' },
|
|
57
|
+
{ text: 'Blog', link: 'https://updates.stacksjs.org' },
|
|
58
|
+
],
|
|
59
|
+
|
|
60
|
+
// Markdown settings
|
|
61
|
+
markdown: {
|
|
62
|
+
title: 'Stacks.js',
|
|
63
|
+
syntaxHighlighting: { theme: 'material-theme-palenight' },
|
|
64
|
+
toc: { depth: 2 },
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
// Sidebar structure
|
|
68
|
+
sidebar: {
|
|
69
|
+
'/prologue/': [/* ... */],
|
|
70
|
+
'/get-started/': [/* ... */],
|
|
71
|
+
'/basics/': [/* ... */],
|
|
72
|
+
'/digging-deeper/': [/* ... */],
|
|
73
|
+
'/cloud/': [/* ... */],
|
|
74
|
+
'/cli/': [/* ... */],
|
|
75
|
+
'/packages/': [/* ... */],
|
|
76
|
+
'/testing/': [/* ... */],
|
|
77
|
+
'/project/': [/* ... */],
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
// Theme
|
|
81
|
+
theme: {
|
|
82
|
+
logo: '/images/logos/logo-transparent.svg',
|
|
83
|
+
footer: { message: 'Released under the MIT License.', copyright: 'Copyright © 2025' },
|
|
84
|
+
socialLinks: [
|
|
85
|
+
{ icon: 'twitter', link: 'https://twitter.com/stacksjs' },
|
|
86
|
+
{ icon: 'github', link: 'https://github.com/stacksjs/stacks' },
|
|
87
|
+
{ icon: 'discord', link: 'https://stacksjs.com/discord' },
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
// SEO
|
|
92
|
+
sitemap: { hostname: 'https://stacksjs.com/docs' },
|
|
93
|
+
robotsTxt: { enabled: true },
|
|
94
|
+
} satisfies BunPressOptions
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## CLI Commands
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
buddy dev:docs # Start docs dev server
|
|
101
|
+
buddy build:docs # Build documentation site
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Gotchas
|
|
105
|
+
- **BunPress, not VitePress** — the docs engine is BunPress (Stacks' own documentation tool)
|
|
106
|
+
- **Config merging** — `docsConfig` merges framework defaults with user config from `config/docs.ts`
|
|
107
|
+
- **Sidebar is section-based** — organized by URL prefix (prologue, get-started, basics, etc.)
|
|
108
|
+
- **SEO built-in** — sitemap and robots.txt generation enabled by default
|
|
109
|
+
- **Output goes to `storage/framework/docs/dist/`** — not the `docs/` source directory
|