@stacksjs/defaults 0.70.207 → 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,269 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-datetime
|
|
3
|
+
description: Use when working with dates and times in Stacks — the DateTime class with Carbon-like API (add/sub, comparison, formatting, start/end of day/month/year), date parsing, format tokens, or timezone handling. Covers @stacksjs/datetime.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Stacks DateTime
|
|
10
|
+
|
|
11
|
+
Carbon-inspired DateTime class with immutable operations and zero external dependencies.
|
|
12
|
+
|
|
13
|
+
## Key Paths
|
|
14
|
+
- Core package: `storage/framework/core/datetime/src/`
|
|
15
|
+
- Package: `@stacksjs/datetime`
|
|
16
|
+
|
|
17
|
+
## Architecture
|
|
18
|
+
|
|
19
|
+
The `index.ts` exports:
|
|
20
|
+
```typescript
|
|
21
|
+
export { DateTime, now } from './now'
|
|
22
|
+
export { format } from './format'
|
|
23
|
+
export { parse } from './parse'
|
|
24
|
+
export { format as dateFormat } from './format' // convenience alias
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Three source files:
|
|
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
|
+
|
|
32
|
+
## DateTime Class (`now.ts`)
|
|
33
|
+
|
|
34
|
+
### Construction
|
|
35
|
+
```typescript
|
|
36
|
+
import { DateTime, now } from '@stacksjs/datetime'
|
|
37
|
+
|
|
38
|
+
const dt = new DateTime() // current time
|
|
39
|
+
const dt = new DateTime(new Date()) // from native Date (cloned)
|
|
40
|
+
const dt = new DateTime('2024-06-15') // from date string
|
|
41
|
+
const dt = new DateTime('15/06/2024', 'DD/MM/YYYY') // from string with format
|
|
42
|
+
|
|
43
|
+
// Static factory methods
|
|
44
|
+
const dt = DateTime.now() // current time
|
|
45
|
+
const dt = DateTime.create(2024, 6, 15, 10, 30, 0) // year, month (1-12), day, hour, min, sec
|
|
46
|
+
const dt = DateTime.fromDate(new Date()) // from native Date
|
|
47
|
+
const dt = DateTime.parse('2024-06-15') // from string
|
|
48
|
+
const dt = DateTime.parse('15/06/2024', 'DD/MM/YYYY') // from string with format
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Note: `DateTime.create()` uses 1-based months (1=January), converting internally with `month - 1`.
|
|
52
|
+
|
|
53
|
+
### Getters (read-only properties)
|
|
54
|
+
```typescript
|
|
55
|
+
dt.year // number -- full year (e.g. 2024)
|
|
56
|
+
dt.month // number -- 1-12 (1-based, NOT zero-based like native Date)
|
|
57
|
+
dt.day // number -- day of month (1-31)
|
|
58
|
+
dt.hour // number -- 0-23
|
|
59
|
+
dt.minute // number -- 0-59
|
|
60
|
+
dt.second // number -- 0-59
|
|
61
|
+
dt.dayOfWeek // number -- 0 (Sunday) through 6 (Saturday)
|
|
62
|
+
dt.timestamp // number -- milliseconds since Unix epoch
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Formatting
|
|
66
|
+
```typescript
|
|
67
|
+
dt.format('YYYY-MM-DD HH:mm:ss') // '2024-06-15 10:30:00'
|
|
68
|
+
dt.format('MMMM D, YYYY', 'en') // 'June 15, 2024'
|
|
69
|
+
dt.format('HH:mm', { locale: 'de', tz: 'Europe/Berlin' })
|
|
70
|
+
|
|
71
|
+
dt.toDateString() // 'YYYY-MM-DD' format
|
|
72
|
+
dt.toTimeString() // 'HH:mm:ss' format
|
|
73
|
+
dt.toDateTimeString() // 'YYYY-MM-DD HH:mm:ss' format
|
|
74
|
+
dt.toISOString() // ISO 8601 (native Date.toISOString)
|
|
75
|
+
dt.toString() // same as toDateTimeString()
|
|
76
|
+
dt.toJSON() // same as toISOString()
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Format Tokens
|
|
80
|
+
|
|
81
|
+
Used by both `DateTime.format()` and the standalone `format()` function:
|
|
82
|
+
|
|
83
|
+
| Token | Output | Description |
|
|
84
|
+
|-------|--------|-------------|
|
|
85
|
+
| YYYY | 2024 | 4-digit year |
|
|
86
|
+
| YY | 24 | 2-digit year |
|
|
87
|
+
| MMMM | January | Full month name (via Intl.DateTimeFormat) |
|
|
88
|
+
| MMM | Jan | Short month name (via Intl.DateTimeFormat) |
|
|
89
|
+
| MM | 01 | 2-digit month (01-12) |
|
|
90
|
+
| M | 1 | Month (1-12) |
|
|
91
|
+
| DD | 01 | 2-digit day (01-31) |
|
|
92
|
+
| D | 1 | Day (1-31) |
|
|
93
|
+
| dddd | Wednesday | Full weekday name (via Intl.DateTimeFormat) |
|
|
94
|
+
| ddd | Wed | Short weekday name (via Intl.DateTimeFormat) |
|
|
95
|
+
| d | W | Narrow weekday (via Intl.DateTimeFormat) |
|
|
96
|
+
| HH | 00 | 24-hour padded (00-23) |
|
|
97
|
+
| H | 0 | 24-hour (0-23) |
|
|
98
|
+
| hh | 12 | 12-hour padded (01-12) |
|
|
99
|
+
| h | 12 | 12-hour (1-12) |
|
|
100
|
+
| mm | 05 | Minutes padded (00-59) |
|
|
101
|
+
| m | 5 | Minutes (0-59) |
|
|
102
|
+
| ss | 09 | Seconds padded (00-59) |
|
|
103
|
+
| s | 9 | Seconds (0-59) |
|
|
104
|
+
| A | AM/PM | Uppercase AM/PM |
|
|
105
|
+
| a | am/pm | Lowercase am/pm |
|
|
106
|
+
| Z | +0530 | Timezone offset (no colon, e.g. +0800, -0500) |
|
|
107
|
+
|
|
108
|
+
Tokens are matched longest-first to avoid partial matching.
|
|
109
|
+
|
|
110
|
+
### Arithmetic (all return NEW DateTime instances -- immutable)
|
|
111
|
+
```typescript
|
|
112
|
+
dt.addSeconds(30) dt.subSeconds(30)
|
|
113
|
+
dt.addMinutes(15) dt.subMinutes(15)
|
|
114
|
+
dt.addHours(2) dt.subHours(2)
|
|
115
|
+
dt.addDays(7) dt.subDays(7)
|
|
116
|
+
dt.addWeeks(1) dt.subWeeks(1) // delegates to addDays(n * 7)
|
|
117
|
+
dt.addMonths(3) dt.subMonths(3)
|
|
118
|
+
dt.addYears(1) dt.subYears(1)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Implementation details:
|
|
122
|
+
- `addSeconds/Minutes/Hours` use millisecond arithmetic on timestamp
|
|
123
|
+
- `addDays` uses `Date.setDate()` (handles month boundaries correctly)
|
|
124
|
+
- `addMonths` uses `Date.setMonth()` (handles year boundaries)
|
|
125
|
+
- `addYears` uses `Date.setFullYear()`
|
|
126
|
+
- All `sub*` methods delegate to `add*(-n)`
|
|
127
|
+
|
|
128
|
+
### Period Boundaries (return NEW DateTime instances)
|
|
129
|
+
```typescript
|
|
130
|
+
dt.startOfDay() // sets time to 00:00:00.000
|
|
131
|
+
dt.endOfDay() // sets time to 23:59:59.999
|
|
132
|
+
|
|
133
|
+
dt.startOfMonth() // sets to 1st of month, 00:00:00.000
|
|
134
|
+
dt.endOfMonth() // sets to last day of month, 23:59:59.999
|
|
135
|
+
// uses new Date(year, month + 1, 0) trick for last day
|
|
136
|
+
|
|
137
|
+
dt.startOfYear() // January 1, 00:00:00.000
|
|
138
|
+
dt.endOfYear() // December 31, 23:59:59.999
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Setters (return NEW DateTime instances)
|
|
142
|
+
```typescript
|
|
143
|
+
dt.setYear(2025) // new DateTime with year changed
|
|
144
|
+
dt.setMonth(6) // 1-based month (internally does month - 1)
|
|
145
|
+
dt.setDay(15) // uses Date.setDate()
|
|
146
|
+
dt.setHour(10)
|
|
147
|
+
dt.setMinute(30)
|
|
148
|
+
dt.setSecond(0)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Comparison
|
|
152
|
+
```typescript
|
|
153
|
+
dt.isBefore(other) // true if this < other (millisecond comparison)
|
|
154
|
+
dt.isAfter(other) // true if this > other
|
|
155
|
+
dt.isSame(other) // true if exact same millisecond
|
|
156
|
+
dt.isSameDay(other) // true if same year, month, day (ignores time)
|
|
157
|
+
dt.isBetween(start, end) // true if this > start AND this < end (exclusive)
|
|
158
|
+
dt.isPast() // true if before Date.now()
|
|
159
|
+
dt.isFuture() // true if after Date.now()
|
|
160
|
+
dt.isToday() // true if same day as today (uses isSameDay)
|
|
161
|
+
dt.isLeapYear() // true if year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
All comparison methods accept `DateTime | Date` as the `other` parameter.
|
|
165
|
+
|
|
166
|
+
### Difference
|
|
167
|
+
```typescript
|
|
168
|
+
dt.diffInSeconds(other) // number -- Math.floor((this - other) / 1000)
|
|
169
|
+
dt.diffInMinutes(other) // number -- Math.floor(diffInSeconds / 60)
|
|
170
|
+
dt.diffInHours(other) // number -- Math.floor(diffInSeconds / 3600)
|
|
171
|
+
dt.diffInDays(other) // number -- Math.floor(diffInSeconds / 86400)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Returns signed values: positive if `this` is after `other`, negative if before.
|
|
175
|
+
|
|
176
|
+
### Conversion
|
|
177
|
+
```typescript
|
|
178
|
+
dt.toNativeDate() // new Date (cloned)
|
|
179
|
+
dt.valueOf() // number (milliseconds since epoch)
|
|
180
|
+
dt.toJSON() // ISO string (for JSON serialization)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Standalone `format()` Function (`format.ts`)
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
import { format } from '@stacksjs/datetime'
|
|
187
|
+
|
|
188
|
+
format(new Date(), 'YYYY-MM-DD') // '2024-06-15'
|
|
189
|
+
format('2024-06-15', 'MMMM D, YYYY') // 'June 15, 2024'
|
|
190
|
+
format(new Date(), 'dddd, MMMM D, YYYY h:mm A') // 'Saturday, June 15, 2024 10:30 AM'
|
|
191
|
+
|
|
192
|
+
// With locale
|
|
193
|
+
format(new Date(), 'dddd, MMMM D', 'de') // 'Samstag, Juni 15'
|
|
194
|
+
|
|
195
|
+
// With timezone
|
|
196
|
+
format(new Date(), 'YYYY-MM-DD HH:mm Z', { tz: 'America/New_York' })
|
|
197
|
+
format(new Date(), 'HH:mm', { locale: 'en', tz: 'Asia/Tokyo' })
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Signature: `format(inputDate: Date | string, formatStr?: string, localeOrOptions?: string | { locale?: string, tz?: string })`
|
|
201
|
+
|
|
202
|
+
Default format string: `'YYYY-MM-DD'`
|
|
203
|
+
Default locale: `'en'`
|
|
204
|
+
|
|
205
|
+
### Timezone Support
|
|
206
|
+
When a `tz` option is provided, the function uses `Intl.DateTimeFormat` with `timeZone` to extract date parts in the target timezone. The timezone offset (`Z` token) is computed by comparing UTC wall-clock time to the timezone's wall-clock time.
|
|
207
|
+
|
|
208
|
+
Without `tz`, uses local time via native Date getters (faster path, no Intl overhead for numeric parts). Named parts (month names, weekday names) always use Intl for locale support.
|
|
209
|
+
|
|
210
|
+
## Standalone `parse()` Function (`parse.ts`)
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
import { parse } from '@stacksjs/datetime'
|
|
214
|
+
|
|
215
|
+
// Without format string -- native Date parsing with fix
|
|
216
|
+
parse('2024-06-15') // Date -- treated as LOCAL time (not UTC)
|
|
217
|
+
parse('2024-06-15T10:30:00Z') // Date -- ISO string, native parsing
|
|
218
|
+
|
|
219
|
+
// With format string -- token-based extraction
|
|
220
|
+
parse('15/06/2024', 'DD/MM/YYYY') // Date
|
|
221
|
+
parse('June 15, 2024', 'MMMM DD, YYYY') // Date
|
|
222
|
+
parse('2024-06-15 10:30:00', 'YYYY-MM-DD HH:mm:ss') // Date
|
|
223
|
+
parse('03:30 PM', 'hh:mm A') // Date with AM/PM handling
|
|
224
|
+
parse('2024-06-15 10:30 +0530', 'YYYY-MM-DD HH:mm Z') // Date with timezone offset
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Parse Behavior
|
|
228
|
+
|
|
229
|
+
**Without format string**:
|
|
230
|
+
- 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
|
+
- All other strings use native `new Date()` parsing
|
|
232
|
+
- Throws on invalid dates
|
|
233
|
+
|
|
234
|
+
**With format string**:
|
|
235
|
+
- Builds a regex from the format tokens and extracts named groups
|
|
236
|
+
- Supports tokens: YYYY, YY, MMMM, MMM, MM, M, DD, D, HH, H, hh, h, mm, m, ss, s, A, a, Z
|
|
237
|
+
- YY: years 70-99 become 1900s, 00-69 become 2000s
|
|
238
|
+
- AM/PM: adjusts hours for 12-hour format (12 AM = 0, 12 PM = 12)
|
|
239
|
+
- Month names: handles full ("January") and short ("Jan") names, case-insensitive
|
|
240
|
+
- Z token: parses +HHMM offset, constructs UTC time and adjusts
|
|
241
|
+
- Throws if the format doesn't match the input string
|
|
242
|
+
|
|
243
|
+
## `now()` Helper
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
import { now } from '@stacksjs/datetime'
|
|
247
|
+
|
|
248
|
+
now() // DateTime.now()
|
|
249
|
+
now().toDateString() // '2024-06-15'
|
|
250
|
+
now().format('MMMM D, YYYY') // 'June 15, 2024'
|
|
251
|
+
now().addDays(7).toDateString() // one week from now
|
|
252
|
+
now().startOfMonth().toDateString() // first of current month
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Gotchas
|
|
256
|
+
- All DateTime arithmetic operations return NEW instances -- the original is never mutated
|
|
257
|
+
- `DateTime.month` returns 1-12 (1-based), NOT 0-11 like native Date
|
|
258
|
+
- `DateTime.create(year, month)` takes 1-based month -- internally converts with `month - 1`
|
|
259
|
+
- `dayOfWeek` returns 0 (Sunday) through 6 (Saturday) -- matches native Date.getDay()
|
|
260
|
+
- `timestamp` returns MILLISECONDS since epoch, not seconds
|
|
261
|
+
- `diffIn*` methods return signed values -- positive when `this` is after `other`
|
|
262
|
+
- `isBetween(start, end)` is EXCLUSIVE on both ends (strictly between)
|
|
263
|
+
- `parse('2024-06-15')` without format is treated as LOCAL time (intentional deviation from spec)
|
|
264
|
+
- The `Z` timezone offset token format is `+HHMM` (no colon) -- e.g. `+0530`, `-0800`
|
|
265
|
+
- `format()` with `tz` option uses `Intl.DateTimeFormat` which requires valid IANA timezone names
|
|
266
|
+
- The `d` token in formatting returns the NARROW weekday (single letter like "W"), not a day number
|
|
267
|
+
- `endOfMonth()` uses the `new Date(year, month + 1, 0)` trick to find the last day
|
|
268
|
+
- Application timezone should be configured in `config/app.ts`
|
|
269
|
+
- Prefer `@stacksjs/datetime` over raw `Date` for framework consistency
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-dependencies
|
|
3
|
+
description: Use when managing dependencies in a Stacks project — system dependencies via Pantry, Bun workspaces, buddy-bot updates, better-dx tooling, or dependency configuration. Covers config/deps.ts, Pantry, and workspace management.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Stacks Dependencies
|
|
10
|
+
|
|
11
|
+
## Key Paths
|
|
12
|
+
- Root: `package.json`
|
|
13
|
+
- Deps config: `config/deps.ts`
|
|
14
|
+
- Bun lock: `bun.lock`
|
|
15
|
+
- Bun config: `bunfig.toml`
|
|
16
|
+
|
|
17
|
+
## Pantry Configuration (config/deps.ts)
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import type { PantryConfig } from 'ts-pantry'
|
|
21
|
+
|
|
22
|
+
interface PantryConfig {
|
|
23
|
+
dependencies: Record<string, string> // System-level dependencies
|
|
24
|
+
global: boolean
|
|
25
|
+
services: {
|
|
26
|
+
enabled: boolean
|
|
27
|
+
autoStart: boolean
|
|
28
|
+
database: DatabaseConfig
|
|
29
|
+
postDatabaseSetup: string[]
|
|
30
|
+
frameworks: FrameworkConfig
|
|
31
|
+
}
|
|
32
|
+
preSetup: LifecycleHook
|
|
33
|
+
postSetup: LifecycleHook
|
|
34
|
+
preActivation: LifecycleHook
|
|
35
|
+
postActivation: LifecycleHook
|
|
36
|
+
cache: CacheConfig
|
|
37
|
+
network: NetworkConfig
|
|
38
|
+
security: SecurityConfig
|
|
39
|
+
logging: LoggingConfig
|
|
40
|
+
updates: UpdateConfig
|
|
41
|
+
resources: ResourceConfig
|
|
42
|
+
profiles: ProfileConfig
|
|
43
|
+
verbose: boolean
|
|
44
|
+
installPath: string
|
|
45
|
+
autoInstall: boolean
|
|
46
|
+
installDependencies: boolean
|
|
47
|
+
installBuildDeps: boolean
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### System Dependencies
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
dependencies: {
|
|
55
|
+
bun: '1.3.0',
|
|
56
|
+
sqlite: '3.47.2',
|
|
57
|
+
redis: '7.0.0',
|
|
58
|
+
// ... other system-level requirements
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Workspace Dependencies
|
|
63
|
+
|
|
64
|
+
Core packages use `workspace:*` references:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"@stacksjs/auth": "workspace:*",
|
|
69
|
+
"@stacksjs/database": "workspace:*",
|
|
70
|
+
"@stacksjs/router": "workspace:*"
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Key Framework Dependencies
|
|
75
|
+
|
|
76
|
+
| Package | Purpose |
|
|
77
|
+
|---------|---------|
|
|
78
|
+
| `better-dx` | Shared dev tooling (provides `typescript`, `pickier`, `bun-plugin-dtsx`) |
|
|
79
|
+
| `bun-query-builder` | Database query building |
|
|
80
|
+
| `@stacksjs/ts-auth` | Authentication library |
|
|
81
|
+
| `@stacksjs/ts-cloud` | Cloud infrastructure (AWS CDK) |
|
|
82
|
+
| `ts-rate-limiter` | Rate limiting |
|
|
83
|
+
| `ts-collect` | Collection utilities |
|
|
84
|
+
| `ts-mocker` | Fake data generation |
|
|
85
|
+
| `ts-slug` | URL slug generation |
|
|
86
|
+
|
|
87
|
+
## CLI Commands
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
buddy add <package> # Add a dependency
|
|
91
|
+
buddy install # Install dependencies
|
|
92
|
+
buddy outdated # Check for outdated packages
|
|
93
|
+
buddy fresh # Clean + reinstall
|
|
94
|
+
bun run upgrade # Upgrade dependencies
|
|
95
|
+
bun run build:reset # Full reset: rm deps → reinstall → generate → lint → build
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Dependency Update System
|
|
99
|
+
|
|
100
|
+
- **buddy-bot** handles dependency updates — NOT renovatebot
|
|
101
|
+
- Automated PR creation for dependency updates
|
|
102
|
+
- Configured via `config/buddy-bot.ts`
|
|
103
|
+
|
|
104
|
+
## Gotchas
|
|
105
|
+
- **buddy-bot, not renovatebot** — Stacks uses its own dependency update bot
|
|
106
|
+
- **better-dx provides peer deps** — do NOT separately install `typescript`, `pickier`, or `bun-plugin-dtsx` if `better-dx` is present
|
|
107
|
+
- **`bunfig.toml` requires `linker = "hoisted"`** when using `better-dx`
|
|
108
|
+
- **Pantry manages system deps** — OS-level dependencies like SQLite, Redis, Bun itself
|
|
109
|
+
- **Workspace references** — all `@stacksjs/*` packages use `workspace:*` in the monorepo
|
|
110
|
+
- **`bun.lock` not `bun.lockb`** — Stacks uses the text-based lockfile format
|
|
111
|
+
- **Build reset is destructive** — `bun run build:reset` removes all deps and reinstalls from scratch
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-deploy
|
|
3
|
+
description: Use when deploying a Stacks application — the deployment workflow (build → deploy), pre/post deploy hooks, server vs serverless mode selection, first-time deployment setup, deployment troubleshooting, or the buddy deploy command. For cloud infrastructure details (EC2, Lambda, CloudFormation, Route53, IAM), see stacks-cloud.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript, AWS
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Stacks Deployment
|
|
10
|
+
|
|
11
|
+
The deployment workflow for Stacks applications.
|
|
12
|
+
|
|
13
|
+
## Quick Deploy
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
buddy deploy
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Deployment Prerequisites
|
|
20
|
+
|
|
21
|
+
1. **AWS credentials configured**: `buddy configure:aws`
|
|
22
|
+
2. **APP_KEY generated**: `buddy key:generate` (must be colon-separated format)
|
|
23
|
+
3. **APP_URL set** in `.env`
|
|
24
|
+
4. **Team configured** in `config/team.ts`
|
|
25
|
+
|
|
26
|
+
## Deployment Flow
|
|
27
|
+
|
|
28
|
+
1. **Validation** — checks APP_KEY format, AWS region, app URL, team config
|
|
29
|
+
2. **Build** — compiles application for production
|
|
30
|
+
3. **Infrastructure** — generates CloudFormation template via ts-cloud
|
|
31
|
+
4. **Deploy** — creates or updates the CloudFormation stack
|
|
32
|
+
- Capabilities: CAPABILITY_IAM, CAPABILITY_NAMED_IAM
|
|
33
|
+
- OnFailure: ROLLBACK
|
|
34
|
+
- Tags: Environment, Project, ManagedBy
|
|
35
|
+
|
|
36
|
+
## Deploy Hooks (cloud/deploy-script.ts)
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
export default {
|
|
40
|
+
beforeDeploy({ environment, region }) {
|
|
41
|
+
// Build assets, run tests, send notifications
|
|
42
|
+
console.log(`Deploying to ${environment} in ${region}`)
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
afterDeploy({ environment, region, outputs }) {
|
|
46
|
+
// Cache warming, smoke tests, database seeding
|
|
47
|
+
console.log('Public IP:', outputs.PublicIp)
|
|
48
|
+
console.log('DNS:', outputs.DNS)
|
|
49
|
+
console.log('Endpoint:', outputs.Endpoint)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Deployment Modes
|
|
55
|
+
|
|
56
|
+
### Server Mode (default)
|
|
57
|
+
- EC2 instances with ALB
|
|
58
|
+
- Best for: full-stack apps, WebSocket support, persistent connections
|
|
59
|
+
- Config: `config/cloud.ts` → `mode: 'server'`
|
|
60
|
+
|
|
61
|
+
### Serverless Mode
|
|
62
|
+
- Lambda + API Gateway + CloudFront
|
|
63
|
+
- Best for: API-only, cost optimization, auto-scaling
|
|
64
|
+
- Config: `config/cloud.ts` → `mode: 'serverless'`
|
|
65
|
+
|
|
66
|
+
## First Deployment Checklist
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# 1. Configure AWS
|
|
70
|
+
buddy configure:aws
|
|
71
|
+
|
|
72
|
+
# 2. Generate app key
|
|
73
|
+
buddy key:generate
|
|
74
|
+
|
|
75
|
+
# 3. Set environment variables
|
|
76
|
+
buddy env:set APP_URL https://myapp.com
|
|
77
|
+
buddy env:set APP_ENV production
|
|
78
|
+
|
|
79
|
+
# 4. Review cloud config
|
|
80
|
+
# Edit config/cloud.ts
|
|
81
|
+
|
|
82
|
+
# 5. Deploy
|
|
83
|
+
buddy deploy
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## CLI Commands
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
buddy deploy # deploy to cloud
|
|
90
|
+
buddy cloud --diff # preview infrastructure changes before deploying
|
|
91
|
+
buddy cloud --ssh # SSH into deployed server
|
|
92
|
+
buddy cloud:remove # tear down infrastructure
|
|
93
|
+
buddy cloud:cleanup # clean retained resources
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Gotchas
|
|
97
|
+
- First deployment creates the CloudFormation stack — subsequent deploys update it
|
|
98
|
+
- APP_KEY must be colon-separated format (validated during deployment)
|
|
99
|
+
- Default region is `us-east-1` (from AWS_DEFAULT_REGION env)
|
|
100
|
+
- `buddy cloud --diff` shows changes BEFORE deploying — always review first
|
|
101
|
+
- Deploy hooks run in the deployment process, not on the target server
|
|
102
|
+
- For infrastructure details (EC2, Lambda, VPC, etc.), see the `stacks-cloud` skill
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-design-brutalist
|
|
3
|
+
description: Use when a Stacks UI should feel industrial and brutalist - designing a data-heavy dashboard, portfolio, or editorial site that needs Swiss typography, sharp high contrast, rigid modular grids, monospace telemetry, and experimental analog-degradation effects. Composes with stacks-design-taste as an aesthetic preset built on stx + Crosswind + composables.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Industrial / Brutalist UI (Stacks)
|
|
10
|
+
|
|
11
|
+
**Related skills:** refines [`stacks-design-taste`](../stacks-design-taste/SKILL.md) (the flagship anti-slop skill) with an industrial/brutalist preset. Build with [`stacks-stx`](../stacks-stx/SKILL.md) (semantic templating, signals), [`stacks-crosswind`](../stacks-crosswind/SKILL.md) (utilities, custom rules, `gap-px` grids), and [`stacks-ui`](../stacks-ui/SKILL.md) (Craft + headless components). Full composable reference: [`stacks-composables`](../stacks-composables/SKILL.md).
|
|
12
|
+
|
|
13
|
+
## 1. Skill Meta
|
|
14
|
+
Industrial brutalism and tactical telemetry interface engineering for Stacks apps. Advanced proficiency in architecting stx + Crosswind interfaces that synthesize mid-century Swiss typographic design, industrial manufacturing manuals, and retro-futuristic aerospace/military terminal interfaces. This discipline requires absolute mastery over rigid modular grids, extreme typographic scale contrast, purely utilitarian color palettes, and the programmatic simulation of analog degradation (halftones, CRT scanlines, bitmap dithering). The objective is digital environments that project raw functionality, mechanical precision, and high data density, deliberately discarding conventional consumer UI patterns.
|
|
15
|
+
|
|
16
|
+
## 2. Visual Archetypes
|
|
17
|
+
The system merges two distinct but highly compatible visual paradigms. **Pick ONE per project and commit to it. Do not alternate or mix both modes within the same interface.**
|
|
18
|
+
|
|
19
|
+
### 2.1 Swiss Industrial Print
|
|
20
|
+
Derived from 1960s corporate identity systems and heavy machinery blueprints.
|
|
21
|
+
- **Characteristics:** High-contrast light modes (newsprint/off-white substrates). Reliance on monolithic, heavy sans-serif typography. Unforgiving structural grids outlined by visible dividing lines. Aggressive, asymmetric use of negative space punctuated by oversized, viewport-bleeding numerals or letterforms. Heavy use of primary red as an alert/accent color.
|
|
22
|
+
|
|
23
|
+
### 2.2 Tactical Telemetry & CRT Terminal
|
|
24
|
+
Derived from classified military databases, legacy mainframes, and aerospace Heads-Up Displays (HUDs).
|
|
25
|
+
- **Characteristics:** Dark mode exclusivity. High-density tabular data presentation. Absolute dominance of monospaced typography. Integration of technical framing devices (ASCII brackets, crosshairs). Application of simulated hardware limitations (phosphor glow, scanlines, low bit-depth rendering).
|
|
26
|
+
|
|
27
|
+
## 3. Typographic Architecture
|
|
28
|
+
Typography is the primary structural and decorative infrastructure. Imagery is secondary. The system demands extreme variance in scale, weight, and spacing. Register font *choices* in the `fonts` config; load with `@font-face` / `<link>` + `font-display: swap` (never `next/font`).
|
|
29
|
+
|
|
30
|
+
### 3.1 Macro-Typography (Structural Headers)
|
|
31
|
+
- **Classification:** Neo-Grotesque / Heavy Sans-Serif.
|
|
32
|
+
- **Optimal Web Fonts:** Neue Haas Grotesk (Black), Archivo Black, Roboto Flex (Heavy), Monument Extended.
|
|
33
|
+
- **Implementation Parameters:**
|
|
34
|
+
- **Scale:** Deployed at massive scales using fluid typography (`clamp(4rem, 10vw, 15rem)`).
|
|
35
|
+
- **Tracking:** Extremely tight, often negative (`-0.03em` to `-0.06em`), forcing glyphs to form solid architectural blocks.
|
|
36
|
+
- **Leading:** Highly compressed (`0.85` to `0.95`).
|
|
37
|
+
- **Casing:** Exclusively uppercase for structural impact.
|
|
38
|
+
|
|
39
|
+
### 3.2 Micro-Typography (Data & Telemetry)
|
|
40
|
+
- **Classification:** Monospace / Technical Sans.
|
|
41
|
+
- **Optimal Web Fonts:** JetBrains Mono, IBM Plex Mono, Space Mono, VT323, Courier Prime.
|
|
42
|
+
- **Implementation Parameters:**
|
|
43
|
+
- **Scale:** Fixed and small (`10px` to `14px` / `0.7rem` to `0.875rem`).
|
|
44
|
+
- **Tracking:** Generous (`0.05em` to `0.1em`) to simulate mechanical typewriter spacing or terminal matrices.
|
|
45
|
+
- **Leading:** Standard to tight (`1.2` to `1.4`).
|
|
46
|
+
- **Casing:** Exclusively uppercase. Used for all metadata, navigation, unit IDs, and coordinates.
|
|
47
|
+
|
|
48
|
+
### 3.3 Textural Contrast (Artistic Disruption)
|
|
49
|
+
- **Classification:** High-Contrast Serif.
|
|
50
|
+
- **Optimal Web Fonts:** Playfair Display, EB Garamond, Times New Roman.
|
|
51
|
+
- **Implementation Parameters:** Used exceedingly sparingly. Must be subjected to heavy post-processing (halftone filters, 1-bit dithering) to degrade vector perfection and create textural juxtaposition against the clean sans-serifs.
|
|
52
|
+
|
|
53
|
+
## 4. Color System
|
|
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
|
+
|
|
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/ui.ts`.
|
|
57
|
+
|
|
58
|
+
### If Swiss Industrial Print (Light)
|
|
59
|
+
- **Background:** `#F4F4F0` or `#EAE8E3` (matte, unbleached documentation paper).
|
|
60
|
+
- **Foreground:** `#050505` to `#111111` (carbon ink).
|
|
61
|
+
- **Accent:** `#E61919` or `#FF2A2A` (aviation/hazard red). This is the ONLY accent color. Used for strike-throughs, thick structural dividing lines, or vital data highlights.
|
|
62
|
+
|
|
63
|
+
### If Tactical Telemetry (Dark)
|
|
64
|
+
- **Background:** `#0A0A0A` or `#121212` (deactivated CRT; avoid pure `#000000`).
|
|
65
|
+
- **Foreground:** `#EAEAEA` (white phosphor). Primary text color.
|
|
66
|
+
- **Accent:** `#E61919` or `#FF2A2A` (aviation/hazard red). Same red, same rules.
|
|
67
|
+
- **Terminal Green (`#4AF626`):** Optional. Use ONLY for a single specific UI element (one status indicator or one data readout), never as a general text color. If it does not serve a clear purpose, omit it entirely.
|
|
68
|
+
|
|
69
|
+
## 5. Layout and Spatial Engineering
|
|
70
|
+
The layout must appear mathematically engineered. It rejects conventional web padding in favor of visible compartmentalization.
|
|
71
|
+
- **The Blueprint Grid:** Strict adherence to CSS Grid architectures (`grid` utilities). Elements do not float; they anchor precisely to grid tracks and intersections.
|
|
72
|
+
- **Visible Compartmentalization:** Extensive solid borders (`border` / `border-2 border-solid`) to delineate distinct zones. Horizontal rules (`<hr>`) frequently span the entire container width to segregate operational units.
|
|
73
|
+
- **Bimodal Density:** Layouts oscillate between extreme data density (tightly packed monospace metadata) and vast expanses of calculated negative space framing macro-typography.
|
|
74
|
+
- **Geometry:** Absolute rejection of `border-radius`. All corners must be exactly 90 degrees to enforce mechanical rigidity. Ban `rounded-*` utilities entirely.
|
|
75
|
+
|
|
76
|
+
## 6. UI Components and Symbology
|
|
77
|
+
Standard web UI conventions are replaced with utilitarian, industrial graphic elements.
|
|
78
|
+
- **Syntax Decoration:** ASCII characters to frame data points.
|
|
79
|
+
- *Framing:* `[ DELIVERY SYSTEMS ]`, `< RE-IND >`
|
|
80
|
+
- *Directional:* `>>>`, `///`, `\\\\`
|
|
81
|
+
- **Industrial Markers:** Prominent registration (`®`), copyright (`©`), and trademark (`™`) symbols functioning as structural geometric elements rather than legal text.
|
|
82
|
+
- **Technical Assets:** Crosshairs (`+`) at grid intersections, repeating vertical lines (barcodes), thick horizontal warning stripes, and randomized string data (`REV 2.6`, `UNIT / D-01`) to simulate active mechanical processes.
|
|
83
|
+
- **Icons:** When an icon is unavoidable, use Iconify `i-*` classes with a single sharp monoline collection; NEVER hand-roll SVG icon paths or `npm install` an icon library. Prefer ASCII/typographic symbology over decorative icons.
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<!-- resources/components/TelemetryRow.stx -->
|
|
87
|
+
<div class="grid gap-px grid-cols-4 bg-[#E61919]">
|
|
88
|
+
<dl class="p-3 font-mono text-[#EAEAEA] text-[11px] tracking-[0.08em] uppercase bg-[#0A0A0A]">
|
|
89
|
+
<dt class="text-[#E61919]">[ UNIT ID ]</dt>
|
|
90
|
+
<dd><output>D-01</output></dd>
|
|
91
|
+
</dl>
|
|
92
|
+
<dl class="p-3 font-mono text-[#EAEAEA] text-[11px] tracking-[0.08em] uppercase bg-[#0A0A0A]">
|
|
93
|
+
<dt class="text-[#E61919]">[ REV ]</dt>
|
|
94
|
+
<dd><samp>2.6</samp></dd>
|
|
95
|
+
</dl>
|
|
96
|
+
</div>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 7. Textural and Post-Processing Effects
|
|
100
|
+
To prevent a purely digital look, simulated analog degradation is engineered into the frontend via CSS and SVG filters (in the `.stx` `<style>` block, no external libraries).
|
|
101
|
+
- **Halftone and 1-Bit Dithering:** Transform continuous-tone images or large serif typography into dot-matrix patterns via pre-processing or CSS `mix-blend-mode: multiply` overlays combined with SVG radial dot patterns.
|
|
102
|
+
- **CRT Scanlines:** For terminal interfaces, apply a `repeating-linear-gradient` to simulate horizontal electron beam sweeps (`repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0,0,0,0.1) 2px, rgba(0,0,0,0.1) 4px)`).
|
|
103
|
+
- **Mechanical Noise:** A global, low-opacity SVG static/noise filter applied to the DOM root to introduce a unified physical grain across both dark and light modes. Attach to a `position: fixed; pointer-events: none` layer, never a scrolling container.
|
|
104
|
+
|
|
105
|
+
## 8. Web Engineering Directives
|
|
106
|
+
1. **Grid Determinism:** Use `display: grid; gap: 1px;` (`grid gap-px`) with contrasting parent/child background colors to generate mathematically perfect, razor-thin dividing lines without complex border declarations.
|
|
107
|
+
2. **Semantic Rigidity:** Construct the DOM with precise semantic tags (`<data>`, `<samp>`, `<kbd>`, `<output>`, `<dl>`) to accurately reflect the technical nature of the telemetry. This aligns with stx's div-soup ban; use real semantic elements.
|
|
108
|
+
3. **Typography Clamping:** Use CSS `clamp()` exclusively for macro-typography so massive text scales aggressively while maintaining structural integrity across viewports.
|
|
109
|
+
4. **Motion (if any):** Stacks ships no animation library; do NOT import `motion`, `gsap`, or `framer-motion`. Keep motion mechanical and minimal via Crosswind transitions and CSS keyframes. For any scroll-triggered reveal use `useIntersectionObserver(target, cb)`; NEVER `window.addEventListener('scroll', ...)`. Animate only `transform` and `opacity`. No `var`/`document.*`/`window.*` in stx scripts. Gate motion with `@media (prefers-reduced-motion: reduce)` and/or `useMediaQuery('(prefers-reduced-motion: reduce)')`.
|
|
110
|
+
5. **Output:** Ship complete stx files, never a skeleton or placeholder comment.
|