@podosoft/podokit 0.17.4 → 1.0.2
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/README.md +70 -114
- package/dist/add.d.ts +3 -2
- package/dist/add.js +18 -8
- package/dist/assemble.d.ts +2 -0
- package/dist/assemble.js +18 -5
- package/dist/create.d.ts +8 -4
- package/dist/create.js +16 -6
- package/dist/deploy-compose-profile.js +1 -0
- package/dist/deploy-compose-render.d.ts +2 -2
- package/dist/deploy-compose-render.js +9 -6
- package/dist/deploy-compose-sync.d.ts +10 -14
- package/dist/deploy-compose-sync.js +21 -22
- package/dist/deploy-compose.js +4 -1
- package/dist/deploy-profile.d.ts +1 -0
- package/dist/deploy-profile.js +9 -1
- package/dist/deploy-render.js +28 -13
- package/dist/deploy-schema.js +6 -1
- package/dist/dev.d.ts +1 -0
- package/dist/dev.js +63 -14
- package/dist/index.d.ts +2 -2
- package/dist/index.js +15 -9
- package/dist/inspect.d.ts +3 -1
- package/dist/inspect.js +6 -4
- package/dist/lockfile.d.ts +8 -3
- package/dist/lockfile.js +18 -4
- package/dist/prompt.d.ts +5 -12
- package/dist/prompt.js +5 -22
- package/dist/remove.js +10 -5
- package/dist/templates/base/AGENTS.md +8 -6
- package/dist/templates/base/README.md +2 -2
- package/dist/templates/base/apps/api/src/main.ts +1 -1
- package/dist/templates/base/bunfig.toml +3 -0
- package/dist/templates/base/package.json +5 -4
- package/dist/templates/{fullstack-nest-svelte → fullstack}/AGENTS.md +19 -12
- package/dist/templates/fullstack/Dockerfile.dev +31 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/README.md +35 -18
- package/dist/templates/fullstack/apps/api/Dockerfile +47 -0
- package/dist/templates/fullstack/apps/api/package.json +35 -0
- package/dist/templates/fullstack/apps/api/scripts/build.mjs +38 -0
- package/dist/templates/fullstack/apps/api/scripts/verify-api-contract.ts +37 -0
- package/dist/templates/fullstack/apps/api/src/app.extensions.ts +10 -0
- package/dist/templates/fullstack/apps/api/src/app.ts +162 -0
- package/dist/templates/{todo → fullstack}/apps/api/src/config/redis.connection.spec.ts +20 -2
- package/dist/templates/{todo → fullstack}/apps/api/src/config/redis.connection.ts +16 -0
- package/dist/templates/fullstack/apps/api/src/core/api-contract.spec.ts +59 -0
- package/dist/templates/fullstack/apps/api/src/core/api-contract.ts +169 -0
- package/dist/templates/fullstack/apps/api/src/core/services.spec.ts +90 -0
- package/dist/templates/fullstack/apps/api/src/core/services.ts +208 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/database/data-source.ts +8 -3
- package/dist/templates/fullstack/apps/api/src/database/database.ts +25 -0
- package/dist/templates/fullstack/apps/api/src/health/health.plugin.ts +28 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/health/readiness.service.spec.ts +1 -1
- package/dist/templates/{todo → fullstack}/apps/api/src/health/readiness.service.ts +0 -3
- package/dist/templates/fullstack/apps/api/src/main.ts +30 -0
- package/dist/templates/{todo → fullstack}/apps/api/tsconfig.json +1 -2
- package/dist/templates/fullstack/apps/web/Dockerfile +41 -0
- package/dist/templates/{todo → fullstack}/apps/web/components.json +3 -3
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/package.json +13 -10
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.html +0 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert-action.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/alert/alert-description.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert-title.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/badge/badge.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/button/button.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-action.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-content.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-description.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-footer.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-header.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-title.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/input/input.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/label/label.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-content.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-group-heading.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-group.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-item.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-label.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-separator.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-trigger.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/separator/separator.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/switch/switch.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-body.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-caption.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-cell.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/table/table-footer.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-head.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-header.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-row.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/tabs.svelte +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +2 -2
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/api.ts +9 -6
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/backend-proxy.test.ts +25 -0
- package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/backend-proxy.ts +8 -1
- package/dist/templates/fullstack/apps/web/src/routes/+layout.svelte +14 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/routes/+page.svelte +5 -5
- package/dist/templates/{todo → fullstack}/apps/web/src/routes/api/[...path]/+server.ts +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/routes/api/auth/[...all]/+server.ts +1 -1
- package/dist/templates/{todo → fullstack}/apps/web/tsconfig.json +3 -2
- package/dist/templates/fullstack/apps/web/vite.config.ts +25 -0
- package/dist/templates/fullstack/bunfig.toml +3 -0
- package/dist/templates/{todo → fullstack}/compose.dev.yaml +8 -38
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/SKILL.md +5 -5
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/profile.md +5 -3
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/rollback.md +2 -2
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy-fast/SKILL.md +3 -3
- package/dist/templates/{todo → fullstack}/dot-claude/skills/podokit-add-module/SKILL.md +2 -2
- package/dist/templates/fullstack/dot-claude/skills/podokit-elysia-endpoint/SKILL.md +27 -0
- package/dist/templates/{todo → fullstack}/dot-claude/skills/podokit-sveltekit-route/SKILL.md +4 -4
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-update/SKILL.md +3 -1
- package/dist/templates/{todo → fullstack}/dot-devcontainer/devcontainer.json +1 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-env.example +1 -7
- package/dist/templates/{todo → fullstack}/dot-github/workflows/release.yml +5 -8
- package/dist/templates/fullstack/dot-mcp.json +8 -0
- package/dist/templates/fullstack/dot-podokit/dev.json +5 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/docker/docker-compose.yml +2 -2
- package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/docker/sms-sink.mjs +2 -1
- package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/README.md +5 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/configmap.yaml +2 -0
- package/dist/templates/fullstack/package.json +27 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/README.md +6 -6
- package/dist/templates/fullstack/tests/package.json +15 -0
- package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/ui/smoke.ui.spec.ts +2 -1
- package/dist/templates/modules/admin-dashboard/files/apps/api/scripts/bootstrap-admin.mjs +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/admin.module.ts +153 -0
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.service.spec.ts +13 -13
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.service.ts +34 -22
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.validation.spec.ts +7 -7
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.validation.ts +5 -6
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.service.ts +31 -29
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.validation.spec.ts +22 -0
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.validation.ts +73 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/app.d.ts +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/hooks.server.ts +7 -6
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/admin/registry.svelte.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/auth-redirect.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-menu.svelte +6 -6
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-page.svelte +16 -13
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/admin-sidebar.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/data-table.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/impersonation-banner.svelte +24 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/language-switch.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/session-idle-timeout.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/settings/appearance-card.svelte +10 -10
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/sidebar-user-menu.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/site-footer.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/site-runtime.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/table-pagination.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/table-toolbar.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/theme-toggle.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-content.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-ellipsis.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-item.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-link.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-next-button.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-next.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-prev-button.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-previous.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-content.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-description.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-footer.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-header.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-overlay.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-title.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/context.svelte.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-content.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-footer.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-action.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-content.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-label.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-header.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-input.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-inset.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-action.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-badge.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-button.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-item.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-skeleton.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub-button.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub-item.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-provider.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-rail.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-separator.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-trigger.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/user-avatar.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/i18n/index.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/+layout.server.ts +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/+layout.svelte +8 -20
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/+page.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/account/+page.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/audit/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/audit/+page.svelte +5 -5
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/organizations/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/organizations/+page.svelte +10 -10
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/sessions/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/sessions/+page.svelte +9 -9
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/+page.svelte +13 -13
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/general-settings.svelte +10 -10
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/users/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/users/+page.svelte +18 -17
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/+layout.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/accept-invitation/[id]/+page.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/+layout.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/forgot-password/+page.svelte +7 -7
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/login/+page.svelte +10 -10
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/pending-approval/+page.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/reset-password/+page.svelte +7 -7
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/signup/+page.svelte +9 -9
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/verify-email/+page.svelte +7 -7
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+layout.server.ts +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+page.svelte +6 -6
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/account/+page.server.ts +6 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/account/+page.svelte +12 -8
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/maintenance/+page.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/oauth2/consent/+page.svelte +3 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/setup-2fa/+page.server.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/setup-2fa/+page.svelte +13 -9
- package/dist/templates/modules/admin-dashboard/files/dot-claude/skills/podokit-data-table/SKILL.md +3 -3
- package/dist/templates/modules/admin-dashboard/files/tests/helpers/accounts.ts +17 -2
- package/dist/templates/modules/admin-dashboard/files/tests/helpers/disposable-users.ts +29 -12
- package/dist/templates/modules/admin-dashboard/files/tests/helpers/hydration.ts +4 -4
- package/dist/templates/modules/admin-dashboard/files/tests/ui/account.ui.spec.ts +51 -0
- package/dist/templates/modules/admin-dashboard/files/tests/ui/auth.ui.spec.ts +2 -2
- package/dist/templates/modules/admin-dashboard/files/tests/ui/impersonation.ui.spec.ts +4 -2
- package/dist/templates/modules/admin-dashboard/files/tests/ui/oidc.ui.spec.ts +26 -13
- package/dist/templates/modules/admin-dashboard/files/tests/ui/passkey.ui.spec.ts +3 -2
- package/dist/templates/modules/admin-dashboard/module.manifest.json +14 -24
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key-verifier.spec.ts +1 -1
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key-verifier.ts +0 -2
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.spec.ts +21 -0
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.ts +36 -9
- package/dist/templates/modules/api-key-auth/module.manifest.json +4 -4
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/README.md +17 -16
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-events.ts +8 -6
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-hook.ts +2 -2
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.module.ts +31 -12
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.service.spec.ts +48 -0
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.service.ts +76 -25
- package/dist/templates/modules/audit-log/module.manifest.json +12 -16
- package/dist/templates/modules/auth/files/apps/api/scripts/configure-auth.mjs +5 -5
- package/dist/templates/modules/auth/files/apps/api/scripts/run-migrations.mjs +14 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth-provider.ts +3 -6
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.module.ts +176 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.openapi.spec.ts +20 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.openapi.ts +22 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.runtime.spec.ts +3 -3
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.service.spec.ts +52 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.service.ts +78 -0
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.ts +4 -1
- package/dist/templates/modules/auth/files/apps/api/src/auth/user-delete-handlers.spec.ts +6 -6
- package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.service.ts +214 -100
- package/dist/templates/modules/auth/files/apps/api/src/migrations/1720400000000-InitAppSettings.ts +2 -1
- package/dist/templates/modules/auth/files/apps/api/src/settings/app-settings.migration.spec.ts +34 -0
- package/dist/templates/modules/auth/files/apps/api/src/settings/flag-defaults.ts +3 -3
- package/dist/templates/modules/auth/files/apps/api/src/settings/settings.service.ts +26 -30
- package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/SKILL.md +7 -7
- package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/bootstrap-admin.md +3 -3
- package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/google.md +3 -3
- package/dist/templates/modules/auth/module.manifest.json +24 -77
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.spec.ts +10 -0
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.ts +3 -9
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.module.ts +35 -13
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/worker.module.ts +18 -19
- package/dist/templates/modules/bullmq/files/apps/api/src/main-worker.ts +12 -10
- package/dist/templates/modules/bullmq/files/infra/docker/worker.compose.example.yml +1 -1
- package/dist/templates/modules/bullmq/files/infra/k3s/worker-deployment.yaml +1 -1
- package/dist/templates/modules/bullmq/module.manifest.json +8 -9
- package/dist/templates/modules/file-upload/files/apps/api/src/files/files.module.ts +28 -8
- package/dist/templates/modules/file-upload/files/tests/api/files.api.spec.ts +9 -4
- package/dist/templates/modules/file-upload/module.manifest.json +2 -5
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/job-progress.module.ts +33 -11
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.spec.ts +6 -6
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.ts +5 -13
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.processor.ts +11 -18
- package/dist/templates/modules/job-progress/module.manifest.json +5 -8
- package/dist/templates/modules/logging/files/apps/api/src/logging/logging.module.ts +15 -28
- package/dist/templates/modules/logging/module.manifest.json +5 -6
- package/dist/templates/modules/mailer/module.manifest.json +2 -2
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.spec.ts +20 -0
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.ts +17 -21
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.module.ts +43 -9
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.ts +26 -35
- package/dist/templates/modules/object-storage-s3/module.manifest.json +3 -7
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.config.spec.ts +10 -4
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.config.ts +13 -0
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.identity.spec.ts +43 -103
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.identity.ts +19 -56
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.spec.ts +124 -212
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.ts +123 -87
- package/dist/templates/modules/rate-limit/files/tests/api/rate-limit.api.spec.ts +17 -1
- package/dist/templates/modules/rate-limit/module.manifest.json +17 -11
- package/dist/templates/modules/redis/files/apps/api/src/redis/redis.module.ts +41 -10
- package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.spec.ts +3 -3
- package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.ts +29 -51
- package/dist/templates/modules/redis/module.manifest.json +3 -12
- package/dist/templates/modules/sse/files/apps/api/src/events/events.module.ts +46 -17
- package/dist/templates/modules/sse/files/apps/api/src/events/events.service.spec.ts +19 -50
- package/dist/templates/modules/sse/files/apps/api/src/events/events.service.ts +40 -25
- package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.ts +25 -79
- package/dist/templates/modules/sse/module.manifest.json +2 -5
- package/dist/templates/todo/AGENTS.md +15 -12
- package/dist/templates/todo/README.md +19 -13
- package/dist/templates/todo/apps/api/src/todos/todo.plugin.ts +59 -0
- package/dist/templates/todo/apps/api/src/todos/todo.repository.ts +69 -0
- package/dist/templates/todo/apps/web/src/routes/+page.svelte +7 -7
- package/dist/templates.js +4 -4
- package/dist/toolchain.d.ts +14 -0
- package/dist/toolchain.js +48 -0
- package/dist/update.d.ts +18 -1
- package/dist/update.js +50 -12
- package/dist/websocket-paths.d.ts +1 -0
- package/dist/websocket-paths.js +32 -0
- package/package.json +5 -4
- package/dist/templates/fullstack-nest-svelte/Dockerfile.dev +0 -58
- package/dist/templates/fullstack-nest-svelte/apps/api/Dockerfile +0 -88
- package/dist/templates/fullstack-nest-svelte/apps/api/nest-cli.json +0 -5
- package/dist/templates/fullstack-nest-svelte/apps/api/package.json +0 -66
- package/dist/templates/fullstack-nest-svelte/apps/api/src/app.extensions.ts +0 -21
- package/dist/templates/fullstack-nest-svelte/apps/api/src/app.module.ts +0 -26
- package/dist/templates/fullstack-nest-svelte/apps/api/src/common/all-exceptions.filter.ts +0 -43
- package/dist/templates/fullstack-nest-svelte/apps/api/src/config/redis.connection.spec.ts +0 -53
- package/dist/templates/fullstack-nest-svelte/apps/api/src/config/redis.connection.ts +0 -69
- package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.controller.ts +0 -38
- package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.module.ts +0 -11
- package/dist/templates/fullstack-nest-svelte/apps/api/src/health/readiness.service.ts +0 -33
- package/dist/templates/fullstack-nest-svelte/apps/api/src/main.ts +0 -29
- package/dist/templates/fullstack-nest-svelte/apps/api/tsconfig.json +0 -30
- package/dist/templates/fullstack-nest-svelte/apps/web/Dockerfile +0 -81
- package/dist/templates/fullstack-nest-svelte/apps/web/components.json +0 -15
- package/dist/templates/fullstack-nest-svelte/apps/web/server.js +0 -31
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/alert-description.svelte +0 -23
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +0 -26
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +0 -23
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +0 -23
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar.svelte +0 -26
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-description.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-footer.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-title.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +0 -39
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -44
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -31
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -27
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +0 -29
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-group-heading.svelte +0 -21
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-label.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-trigger.svelte +0 -29
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/separator/separator.svelte +0 -23
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +0 -17
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-footer.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +0 -20
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/api.ts +0 -21
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/backend-proxy.test.ts +0 -79
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/backend-proxy.ts +0 -80
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/ws-upgrade.js +0 -267
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/ws-upgrade.test.js +0 -134
- package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/+layout.svelte +0 -9
- package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/api/[...path]/+server.ts +0 -16
- package/dist/templates/fullstack-nest-svelte/apps/web/svelte.config.js +0 -15
- package/dist/templates/fullstack-nest-svelte/apps/web/tsconfig.json +0 -9
- package/dist/templates/fullstack-nest-svelte/apps/web/vite.config.ts +0 -29
- package/dist/templates/fullstack-nest-svelte/compose.dev.yaml +0 -162
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-add-module/SKILL.md +0 -27
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-nest-endpoint/SKILL.md +0 -23
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-sveltekit-route/SKILL.md +0 -23
- package/dist/templates/fullstack-nest-svelte/dot-devcontainer/devcontainer.json +0 -20
- package/dist/templates/fullstack-nest-svelte/dot-github/workflows/release.yml +0 -142
- package/dist/templates/fullstack-nest-svelte/dot-mcp.json +0 -8
- package/dist/templates/fullstack-nest-svelte/dot-podokit/dev.json +0 -4
- package/dist/templates/fullstack-nest-svelte/package.json +0 -21
- package/dist/templates/fullstack-nest-svelte/tests/package.json +0 -15
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image-upload.interceptor.ts +0 -39
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.controller.ts +0 -73
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.module.ts +0 -9
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.controller.ts +0 -155
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.module.ts +0 -14
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.decorator.ts +0 -9
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.spec.ts +0 -49
- package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.ts +0 -21
- package/dist/templates/modules/api-key-auth/files/apps/api/src/machine/machine.controller.ts +0 -14
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-log.entity.ts +0 -46
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.controller.ts +0 -21
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.decorator.ts +0 -23
- package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.interceptor.ts +0 -56
- package/dist/templates/modules/auth/files/apps/api/src/account/account.controller.ts +0 -101
- package/dist/templates/modules/auth/files/apps/api/src/account/account.module.ts +0 -6
- package/dist/templates/modules/auth/files/apps/api/src/auth/two-factor-required.guard.ts +0 -68
- package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.controller.ts +0 -33
- package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.entity.ts +0 -26
- package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.module.ts +0 -12
- package/dist/templates/modules/auth/files/apps/api/src/health/health.controller.ts +0 -41
- package/dist/templates/modules/auth/files/apps/api/src/settings/app-setting.entity.ts +0 -16
- package/dist/templates/modules/auth/files/apps/api/src/settings/settings.module.ts +0 -11
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/dto/create-job.dto.ts +0 -9
- package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.controller.ts +0 -29
- package/dist/templates/modules/file-upload/files/apps/api/src/files/files.controller.ts +0 -32
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/dto/start-job.dto.ts +0 -11
- package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.controller.ts +0 -17
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/dto/put-object.dto.ts +0 -8
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.controller.ts +0 -29
- package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.spec.ts +0 -35
- package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.integration.spec.ts +0 -91
- package/dist/templates/modules/redis/files/apps/api/src/redis/cache.controller.ts +0 -21
- package/dist/templates/modules/redis/files/apps/api/src/redis/dto/set-cache.dto.ts +0 -14
- package/dist/templates/modules/sse/files/apps/api/src/events/dto/publish-event.dto.ts +0 -8
- package/dist/templates/modules/sse/files/apps/api/src/events/events.controller.ts +0 -39
- package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.redis.spec.ts +0 -42
- package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.spec.ts +0 -97
- package/dist/templates/todo/CLAUDE.md +0 -6
- package/dist/templates/todo/Dockerfile.dev +0 -58
- package/dist/templates/todo/apps/api/Dockerfile +0 -88
- package/dist/templates/todo/apps/api/nest-cli.json +0 -5
- package/dist/templates/todo/apps/api/package.json +0 -66
- package/dist/templates/todo/apps/api/scripts/.keep +0 -1
- package/dist/templates/todo/apps/api/src/app.extensions.ts +0 -21
- package/dist/templates/todo/apps/api/src/app.module.ts +0 -28
- package/dist/templates/todo/apps/api/src/common/all-exceptions.filter.ts +0 -43
- package/dist/templates/todo/apps/api/src/common/app-exception.ts +0 -4
- package/dist/templates/todo/apps/api/src/config/env.validation.ts +0 -23
- package/dist/templates/todo/apps/api/src/database/data-source.ts +0 -19
- package/dist/templates/todo/apps/api/src/database/migrate.ts +0 -16
- package/dist/templates/todo/apps/api/src/health/health.controller.ts +0 -38
- package/dist/templates/todo/apps/api/src/health/health.module.ts +0 -11
- package/dist/templates/todo/apps/api/src/health/readiness.service.spec.ts +0 -22
- package/dist/templates/todo/apps/api/src/main.ts +0 -29
- package/dist/templates/todo/apps/api/src/todos/dto/create-todo.dto.ts +0 -10
- package/dist/templates/todo/apps/api/src/todos/dto/update-todo.dto.ts +0 -10
- package/dist/templates/todo/apps/api/src/todos/todo.entity.ts +0 -16
- package/dist/templates/todo/apps/api/src/todos/todos.controller.ts +0 -38
- package/dist/templates/todo/apps/api/src/todos/todos.module.ts +0 -12
- package/dist/templates/todo/apps/api/src/todos/todos.service.ts +0 -41
- package/dist/templates/todo/apps/web/Dockerfile +0 -78
- package/dist/templates/todo/apps/web/package.json +0 -38
- package/dist/templates/todo/apps/web/server.js +0 -31
- package/dist/templates/todo/apps/web/src/app.css +0 -81
- package/dist/templates/todo/apps/web/src/app.d.ts +0 -11
- package/dist/templates/todo/apps/web/src/app.html +0 -13
- package/dist/templates/todo/apps/web/src/lib/api.ts +0 -5
- package/dist/templates/todo/apps/web/src/lib/components/site-runtime.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-action.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-title.svelte +0 -23
- package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert.svelte +0 -43
- package/dist/templates/todo/apps/web/src/lib/components/ui/alert/index.ts +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/index.ts +0 -22
- package/dist/templates/todo/apps/web/src/lib/components/ui/badge/badge.svelte +0 -49
- package/dist/templates/todo/apps/web/src/lib/components/ui/badge/index.ts +0 -2
- package/dist/templates/todo/apps/web/src/lib/components/ui/button/button.svelte +0 -82
- package/dist/templates/todo/apps/web/src/lib/components/ui/button/index.ts +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-action.svelte +0 -23
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-content.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-header.svelte +0 -23
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/card.svelte +0 -22
- package/dist/templates/todo/apps/web/src/lib/components/ui/card/index.ts +0 -25
- package/dist/templates/todo/apps/web/src/lib/components/ui/checkbox/index.ts +0 -6
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +0 -11
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +0 -48
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +0 -32
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -11
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/index.ts +0 -34
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -16
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +0 -22
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +0 -24
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -16
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +0 -34
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/index.ts +0 -54
- package/dist/templates/todo/apps/web/src/lib/components/ui/input/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/input/input.svelte +0 -48
- package/dist/templates/todo/apps/web/src/lib/components/ui/label/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/label/label.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/index.ts +0 -37
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-content.svelte +0 -45
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-group.svelte +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-item.svelte +0 -40
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-portal.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-separator.svelte +0 -18
- package/dist/templates/todo/apps/web/src/lib/components/ui/select/select.svelte +0 -11
- package/dist/templates/todo/apps/web/src/lib/components/ui/separator/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/skeleton/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/index.ts +0 -1
- package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/sonner.svelte +0 -34
- package/dist/templates/todo/apps/web/src/lib/components/ui/switch/index.ts +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/switch/switch.svelte +0 -29
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/index.ts +0 -28
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-body.svelte +0 -15
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-caption.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-cell.svelte +0 -15
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-head.svelte +0 -15
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-header.svelte +0 -20
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-row.svelte +0 -15
- package/dist/templates/todo/apps/web/src/lib/components/ui/table/table.svelte +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/index.ts +0 -16
- package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +0 -17
- package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs.svelte +0 -19
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/index.ts +0 -19
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +0 -52
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +0 -7
- package/dist/templates/todo/apps/web/src/lib/i18n/README.md +0 -9
- package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/en.json +0 -1
- package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/ko.json +0 -1
- package/dist/templates/todo/apps/web/src/lib/i18n/locales/en.json +0 -6
- package/dist/templates/todo/apps/web/src/lib/i18n/locales/ko.json +0 -6
- package/dist/templates/todo/apps/web/src/lib/server/ws-upgrade.js +0 -267
- package/dist/templates/todo/apps/web/src/lib/server/ws-upgrade.test.js +0 -134
- package/dist/templates/todo/apps/web/src/lib/utils.ts +0 -11
- package/dist/templates/todo/apps/web/src/routes/+layout.svelte +0 -9
- package/dist/templates/todo/apps/web/src/routes/api/auth/[...all]/+server.ts +0 -16
- package/dist/templates/todo/apps/web/static/.gitkeep +0 -0
- package/dist/templates/todo/apps/web/static/favicon.svg +0 -13
- package/dist/templates/todo/apps/web/svelte.config.js +0 -15
- package/dist/templates/todo/apps/web/vite.config.ts +0 -29
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/SKILL.md +0 -65
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/agents/openai.yaml +0 -4
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/profile.md +0 -75
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/release.md +0 -64
- package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/rollback.md +0 -5
- package/dist/templates/todo/dot-agents/skills/podokit-deploy-fast/SKILL.md +0 -92
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/SKILL.md +0 -63
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/agents/openai.yaml +0 -4
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/references/catalog-format.md +0 -49
- package/dist/templates/todo/dot-claude/skills/podokit-deploy/SKILL.md +0 -8
- package/dist/templates/todo/dot-claude/skills/podokit-deploy-fast/SKILL.md +0 -8
- package/dist/templates/todo/dot-claude/skills/podokit-nest-endpoint/SKILL.md +0 -23
- package/dist/templates/todo/dot-claude/skills/podokit-update/SKILL.md +0 -26
- package/dist/templates/todo/dot-cursor/rules/podokit.mdc +0 -11
- package/dist/templates/todo/dot-dockerignore +0 -15
- package/dist/templates/todo/dot-env.docker +0 -26
- package/dist/templates/todo/dot-env.example +0 -34
- package/dist/templates/todo/dot-github/copilot-instructions.md +0 -6
- package/dist/templates/todo/dot-gitignore +0 -23
- package/dist/templates/todo/dot-mcp.json +0 -8
- package/dist/templates/todo/dot-podokit/dev.json +0 -4
- package/dist/templates/todo/infra/docker/docker-compose.yml +0 -33
- package/dist/templates/todo/infra/k3s/README.md +0 -18
- package/dist/templates/todo/infra/k3s/api-deployment.yaml +0 -29
- package/dist/templates/todo/infra/k3s/configmap.yaml +0 -12
- package/dist/templates/todo/infra/k3s/ingress.yaml +0 -32
- package/dist/templates/todo/infra/k3s/namespace.yaml +0 -4
- package/dist/templates/todo/infra/k3s/secret.example.yaml +0 -10
- package/dist/templates/todo/infra/k3s/services.yaml +0 -21
- package/dist/templates/todo/infra/k3s/web-deployment.yaml +0 -30
- package/dist/templates/todo/infra/traefik/dynamic.yml +0 -17
- package/dist/templates/todo/package.json +0 -21
- package/dist/templates/todo/tests/README.md +0 -21
- package/dist/templates/todo/tests/api/health.api.spec.ts +0 -14
- package/dist/templates/todo/tests/package.json +0 -15
- package/dist/templates/todo/tests/playwright.config.ts +0 -27
- package/dist/templates/todo/tests/playwright.extensions.ts +0 -44
- package/dist/templates/todo/tests/ui/smoke.ui.spec.ts +0 -8
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/CLAUDE.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/scripts/.keep +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/common/app-exception.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/config/env.validation.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/database/migrate.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.css +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.d.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/api.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/site-runtime.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/avatar/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/badge/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/button/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/checkbox/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/input/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/label/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-portal.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/separator/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/skeleton/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/sonner/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/sonner/sonner.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/switch/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/index.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/README.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/catalogs/app/en.json +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/catalogs/app/ko.json +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/locales/en.json +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/locales/ko.json +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/utils.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/static/.gitkeep +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/static/favicon.svg +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/agents/openai.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/release.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/SKILL.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/agents/openai.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/references/catalog-format.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-deploy/SKILL.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-deploy-fast/SKILL.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-cursor/rules/podokit.mdc +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-dockerignore +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-env.docker +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-github/copilot-instructions.md +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-gitignore +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/api-deployment.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/ingress.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/namespace.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/secret.example.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/services.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/web-deployment.yaml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/traefik/dynamic.yml +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/api/health.api.spec.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/playwright.config.ts +0 -0
- /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/playwright.extensions.ts +0 -0
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: podokit-deploy
|
|
3
|
-
description: Plan, inspect, apply, verify, and roll back PodoKit releases with an explicit deployment profile and confirmation hash, on Kubernetes or Docker Compose. Use when an agent needs to initialize a .podokit/deploy profile, diagnose a target, preview a release, perform an approved deployment, inspect rollout state, verify public endpoints, or prepare a rollback.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Deploy a PodoKit application
|
|
7
|
-
|
|
8
|
-
A profile records which driver it uses, so every command below is the same for both.
|
|
9
|
-
Read the profile's `driver` first and say which one you are operating.
|
|
10
|
-
|
|
11
|
-
| Driver | Target | Use it when |
|
|
12
|
-
| --- | --- | --- |
|
|
13
|
-
| `kubernetes-helm` | a cluster context and namespace | you already run a cluster, or you need more than one node, cluster-managed rollouts, or per-workload scaling |
|
|
14
|
-
| `docker-compose` | one Docker host, local or over `ssh://` | one machine is the whole deployment and a reverse proxy in front of it terminates TLS |
|
|
15
|
-
|
|
16
|
-
1. Run `npx @podosoft/podokit status`, `npx @podosoft/podokit diff`, and `npx @podosoft/podokit doctor`. Stop if managed-file conflicts or unsupported framework versions could make the image unreliable.
|
|
17
|
-
2. Read [references/profile.md](references/profile.md) before creating or changing a deployment profile.
|
|
18
|
-
3. Make sure the images exist for that tag. Read [references/release.md](references/release.md): tagging `vX.Y.Z` runs the release workflow, which builds and pushes both images and stops there. Never apply a release whose images were not published.
|
|
19
|
-
4. Run `npx @podosoft/podokit deploy doctor --profile <name>`. Resolve every failure without printing secret values.
|
|
20
|
-
5. Run `npx @podosoft/podokit deploy plan --profile <name> --release <stable-semver> --json`.
|
|
21
|
-
6. Show the user the driver, the target (context plus namespace and Helm release, or Docker context plus Compose project), the fingerprint result, the exact image digests, the current revision, the actions, the migration warning, and the plan hash.
|
|
22
|
-
7. Do not apply until the user explicitly approves that exact plan.
|
|
23
|
-
8. Apply with `npx @podosoft/podokit deploy apply --profile <name> --release <stable-semver> --confirm <plan-hash>`.
|
|
24
|
-
9. Run `npx @podosoft/podokit deploy status --profile <name> --json` and `npx @podosoft/podokit deploy verify --profile <name> --json`.
|
|
25
|
-
10. Report the exact images, the revision, running replicas, restart totals, and the verification result. Report `syncDrift` too: a non-empty value means containers are running locally synced artifacts and the release tag does not describe what is serving.
|
|
26
|
-
|
|
27
|
-
## Iterating against a deployment is a different command
|
|
28
|
-
|
|
29
|
-
If the user is changing code and wants to see it on the deployment, a release is the
|
|
30
|
-
wrong loop — it rebuilds and republishes to move a few megabytes of compiled output.
|
|
31
|
-
Use the `podokit-deploy-fast` skill (`podo deploy sync`, docker-compose driver only).
|
|
32
|
-
Reach for a release when the change needs a migration, changes runtime dependencies,
|
|
33
|
-
or is going to real users.
|
|
34
|
-
|
|
35
|
-
## The migration runs against the release that is still serving
|
|
36
|
-
|
|
37
|
-
Both drivers run the migration **before** the new containers start, and both keep the
|
|
38
|
-
previous release serving while the new one rolls out. So a migration must be
|
|
39
|
-
compatible with the code already running:
|
|
40
|
-
|
|
41
|
-
- Additive changes are safe: new tables, new nullable columns, new indexes.
|
|
42
|
-
- Dropping or renaming a column, or tightening a constraint, breaks the running
|
|
43
|
-
release the moment the migration commits — before any new code is live.
|
|
44
|
-
- Destructive changes belong in a **second** release, after the code that stopped
|
|
45
|
-
using the column has fully rolled out.
|
|
46
|
-
|
|
47
|
-
Rollback does not reverse migrations on either driver. If an older image cannot read
|
|
48
|
-
the current schema, roll forward instead.
|
|
49
|
-
|
|
50
|
-
## Rollback
|
|
51
|
-
|
|
52
|
-
Read [references/rollback.md](references/rollback.md), preview the target revision
|
|
53
|
-
without `--confirm`, show the new plan hash, and obtain explicit approval.
|
|
54
|
-
|
|
55
|
-
The compose driver can only reproduce a revision whose rendered project still matches
|
|
56
|
-
the current profile byte for byte; if the profile changed since, it refuses and tells
|
|
57
|
-
you to roll forward.
|
|
58
|
-
|
|
59
|
-
## Boundary
|
|
60
|
-
|
|
61
|
-
Never create or rotate cluster credentials, registry credentials, DNS records,
|
|
62
|
-
virtual machines, Kubernetes Secrets, env files on a deployment host, TLS
|
|
63
|
-
certificates, or backup repositories. Never put a password, token, private key,
|
|
64
|
-
connection URL containing credentials, or secret value in a profile, a command
|
|
65
|
-
argument, a log, or a report.
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# Deployment profile
|
|
2
|
-
|
|
3
|
-
The profile at `.podokit/deploy/<name>.json` is application-owned and contains no Secret values.
|
|
4
|
-
|
|
5
|
-
## kubernetes-helm (default)
|
|
6
|
-
|
|
7
|
-
Initialize it with an explicit kubeconfig context:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npx @podosoft/podokit deploy init --profile production --context production --host app.example.com
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Review the target, immutable API/web repositories, exposure, workloads, dependency modes, API/optional web Secret names and required keys, non-sensitive runtime configuration, and verification checks before planning.
|
|
14
|
-
|
|
15
|
-
The cluster namespace and referenced Secrets must already exist. PodoKit asks `kubectl` to output only Secret key names and never prints or stores their values; the Kubernetes client still materializes the Secret while evaluating that output.
|
|
16
|
-
|
|
17
|
-
Required keys:
|
|
18
|
-
|
|
19
|
-
| Secret | Required keys |
|
|
20
|
-
| --- | --- |
|
|
21
|
-
| API | Profile-declared keys plus enabled dependency connection keys: `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB`, `REDIS_PASSWORD`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY` |
|
|
22
|
-
| web | Only explicitly declared web keys; omitted by default |
|
|
23
|
-
| PostgreSQL dependency | `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB` |
|
|
24
|
-
| Redis dependency | `REDIS_PASSWORD` |
|
|
25
|
-
| Object storage dependency | `MINIO_ROOT_USER`, `MINIO_ROOT_PASSWORD`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY` |
|
|
26
|
-
| image pull | A `kubernetes.io/dockerconfigjson` Secret |
|
|
27
|
-
|
|
28
|
-
Use `inCluster` when the generated Helm release should manage a dependency, `external` when application configuration points to an existing service, and `disabled` only when the application does not require it.
|
|
29
|
-
|
|
30
|
-
Use the same stable SemVer tag for API and web. `latest`, branch tags, and empty tags are rejected. Planning resolves every deployed tag to an immutable registry digest through Docker Buildx.
|
|
31
|
-
|
|
32
|
-
## docker-compose
|
|
33
|
-
|
|
34
|
-
Initialize it with an explicit Docker context. The context may be local or `ssh://`,
|
|
35
|
-
and it is pinned by a fingerprint of the endpoint plus the daemon ID, so repointing
|
|
36
|
-
it at a different host invalidates the profile instead of deploying somewhere else.
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npx @podosoft/podokit deploy init \
|
|
40
|
-
--profile production \
|
|
41
|
-
--driver docker-compose \
|
|
42
|
-
--context production \
|
|
43
|
-
--host app.example.com \
|
|
44
|
-
--secrets-dir /etc/podokit/example-app
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
The fields that differ from the Kubernetes driver:
|
|
48
|
-
|
|
49
|
-
- `target`: Docker context, endpoint fingerprint, Compose project name
|
|
50
|
-
- `exposure`: `bindAddress` and `port` published from the web service. It defaults to
|
|
51
|
-
`127.0.0.1`, because the expected front door is a reverse proxy on the same host —
|
|
52
|
-
binding every interface publishes the app before TLS exists
|
|
53
|
-
- `workloads`: replicas plus Compose `cpus` and `memory` limits
|
|
54
|
-
- `dependencies`: `managed`, `external`, or `disabled`, each with a named Docker
|
|
55
|
-
volume and the path of its env file on the target host
|
|
56
|
-
- `secrets`: env-file paths and required key names, plus `registryLogin`
|
|
57
|
-
|
|
58
|
-
Credentials live in env files **on the target host**, never in the profile and never
|
|
59
|
-
in the rendered Compose project. The doctor reads only the key names, in a throwaway
|
|
60
|
-
container that mounts the file read-only. Create those files with the host's own
|
|
61
|
-
secret tooling before deploying; PodoKit does not write them.
|
|
62
|
-
|
|
63
|
-
Required keys:
|
|
64
|
-
|
|
65
|
-
| Env file | Required keys |
|
|
66
|
-
| --- | --- |
|
|
67
|
-
| API | Profile-declared keys plus enabled dependency connection keys: `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB`, `REDIS_PASSWORD`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY` |
|
|
68
|
-
| web | Only explicitly declared web keys; omitted by default |
|
|
69
|
-
| PostgreSQL dependency | `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB` |
|
|
70
|
-
| Redis dependency | `REDIS_PASSWORD` |
|
|
71
|
-
| Object storage dependency | `MINIO_ROOT_USER`, `MINIO_ROOT_PASSWORD`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY` |
|
|
72
|
-
|
|
73
|
-
Data volumes are declared `external`, so `docker compose down -v` cannot delete the
|
|
74
|
-
database. Editing an env file changes the containers' rollout label, so the next
|
|
75
|
-
apply actually restarts them instead of leaving stale environment values running.
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
# Publishing the images a release deploys
|
|
2
|
-
|
|
3
|
-
`podo deploy` consumes images. Building them is `.github/workflows/release.yml`,
|
|
4
|
-
which triggers on a `v*.*.*` tag, verifies the commit, builds both images from the
|
|
5
|
-
repository root, and pushes them under that one tag. It does not roll out.
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
git tag v1.2.3
|
|
9
|
-
git push origin v1.2.3
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Then plan and apply as the main skill describes. `podo deploy plan` resolves the tag
|
|
13
|
-
to an immutable digest, so a tag whose images were never pushed fails there rather
|
|
14
|
-
than half way through a rollout.
|
|
15
|
-
|
|
16
|
-
## Before the first tag: check the runner
|
|
17
|
-
|
|
18
|
-
**GitHub-hosted runners are free for public repositories only.** In a private
|
|
19
|
-
repository every minute is metered against the account's included Actions minutes and
|
|
20
|
-
billed beyond them, and image builds are usually the most expensive job a project
|
|
21
|
-
runs. A self-hosted runner consumes no Actions minutes at all.
|
|
22
|
-
|
|
23
|
-
The workflow reads the choice from a variable, so it is a setting rather than an edit:
|
|
24
|
-
|
|
25
|
-
| Variable | Unset | Notes |
|
|
26
|
-
| --- | --- | --- |
|
|
27
|
-
| `PODOKIT_RUNNER` | `["ubuntu-latest"]` | JSON array of labels. Self-hosted example: `["self-hosted","Linux","X64"]` |
|
|
28
|
-
| `PODOKIT_DEPLOY_PROFILE` | `production` | which `.podokit/deploy/<name>.json` names the image repositories |
|
|
29
|
-
| `PODOKIT_IMAGE_PLATFORM` | `linux/amd64` | the architecture the **deployment target** runs, not the runner's |
|
|
30
|
-
|
|
31
|
-
Nothing warns when a private repository is still on the default: the workflow
|
|
32
|
-
succeeds either way and the difference appears on a bill. **When asked to set up
|
|
33
|
-
releases, check the repository's visibility first and say which case it is.**
|
|
34
|
-
|
|
35
|
-
`PODOKIT_IMAGE_PLATFORM` is the other one worth stating out loud. Building for the
|
|
36
|
-
wrong architecture produces `exec format error` at rollout — after the migration has
|
|
37
|
-
already run — and building for the right one on a runner of a different architecture
|
|
38
|
-
works but runs under emulation, which is slow enough to be mistaken for a problem
|
|
39
|
-
with Docker.
|
|
40
|
-
|
|
41
|
-
## Secrets
|
|
42
|
-
|
|
43
|
-
`REGISTRY_USERNAME` and `REGISTRY_PASSWORD`, for the registry named by the profile's
|
|
44
|
-
`release.apiRepository`. A robot or deploy account is enough for pushing, but some
|
|
45
|
-
registries do not let a robot **create** a repository — push the first tag of a new
|
|
46
|
-
repository with an account that can, or create the repository in the registry first.
|
|
47
|
-
|
|
48
|
-
Never print either value, and never put one in a profile, a command argument, or a
|
|
49
|
-
report.
|
|
50
|
-
|
|
51
|
-
## Building by hand
|
|
52
|
-
|
|
53
|
-
Only when a tag is not the right trigger. Build for the target's architecture, tag
|
|
54
|
-
both images identically, and push before planning:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
docker build --platform linux/amd64 -f apps/api/Dockerfile -t <api-repository>:v1.2.3 .
|
|
58
|
-
docker build --platform linux/amd64 -f apps/web/Dockerfile -t <web-repository>:v1.2.3 .
|
|
59
|
-
docker push <api-repository>:v1.2.3
|
|
60
|
-
docker push <web-repository>:v1.2.3
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
A bare local tag cannot be deployed: it does not match the profile's stable SemVer
|
|
64
|
-
pattern and cannot be resolved to a digest.
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# Application rollback
|
|
2
|
-
|
|
3
|
-
Preview the selected revision without `--confirm`, show the resulting plan hash, and obtain explicit approval before rerunning the command with that hash.
|
|
4
|
-
|
|
5
|
-
Rollback changes only the application Helm release. It does not reverse database migrations, change the dependency release, delete PersistentVolumeClaims, or delete Secrets. If the old application is incompatible with the current database schema, prepare a forward fix instead.
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: podokit-deploy-fast
|
|
3
|
-
description: Push locally built artifacts into a running Docker Compose deployment and restart it, without building or publishing an image. Use when iterating on code against a deployed environment and a full release round trip is too slow. Not for releases, migrations, dependency changes, or anything going to real users.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Sync code into a running deployment
|
|
7
|
-
|
|
8
|
-
`podo deploy sync` copies this project's build output into the containers that are
|
|
9
|
-
already running and restarts them. `docker-compose` driver only — read the profile's
|
|
10
|
-
`driver` first and stop if it is `kubernetes-helm`, where the equivalent would have
|
|
11
|
-
to reach every node and would stop being a shortcut.
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npx @podosoft/podokit deploy sync --profile <name> --build
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Say what this does before doing it
|
|
18
|
-
|
|
19
|
-
It is not a release, and the user has to understand three consequences before you run
|
|
20
|
-
it:
|
|
21
|
-
|
|
22
|
-
1. **The deployment will run code its image tag does not describe.** A marker file
|
|
23
|
-
records the sync and `podo deploy status` reports it under `syncDrift`.
|
|
24
|
-
2. **Every connection the restarted containers hold is dropped** — WebSocket sessions,
|
|
25
|
-
in-flight requests, anything attached.
|
|
26
|
-
3. **It disappears on the next release.** Container writable layers do not survive
|
|
27
|
-
recreation, so `podo deploy apply` restores the image with no cleanup step. That is
|
|
28
|
-
the property that makes this safe; do not build anything that depends on the copy
|
|
29
|
-
persisting.
|
|
30
|
-
|
|
31
|
-
## When NOT to use it
|
|
32
|
-
|
|
33
|
-
Use a release instead — build the images and `podo deploy apply` — when any of these
|
|
34
|
-
is true. The first three are refusals the command makes itself; the last two it
|
|
35
|
-
cannot detect, which is why they are your job.
|
|
36
|
-
|
|
37
|
-
| Situation | Why |
|
|
38
|
-
| --- | --- |
|
|
39
|
-
| runtime dependencies changed | the container's `node_modules` was installed `--omit=dev` from the old manifest, so the new code imports something that is not there |
|
|
40
|
-
| a release holds the deployment lock | an apply is in progress |
|
|
41
|
-
| nothing is running for that project | there is no container to copy into |
|
|
42
|
-
| **the change needs a migration** | sync never migrates, and a migration belongs with the release whose code needs it |
|
|
43
|
-
| **the change is going to real users** | nothing is pushed, so nothing is reproducible from it |
|
|
44
|
-
|
|
45
|
-
## Procedure
|
|
46
|
-
|
|
47
|
-
1. Read the profile's `driver`. Stop unless it is `docker-compose`.
|
|
48
|
-
2. Tell the user what will restart and that connections drop. Get agreement if anyone
|
|
49
|
-
is using the deployment.
|
|
50
|
-
3. Run with `--build` unless the project is already built. `--build` compiles in the
|
|
51
|
-
order the images do — every `packages/*` before the apps — because a root build
|
|
52
|
-
script runs workspaces in manifest order and an app listed first would compile
|
|
53
|
-
against a workspace package's previous output.
|
|
54
|
-
4. Report what was copied, which containers restarted, and that the deployment is now
|
|
55
|
-
in sync drift.
|
|
56
|
-
5. Verify against the running deployment, not against the build: request a path the
|
|
57
|
-
change affects. If part of the build output is excluded (below), check one of
|
|
58
|
-
those paths too — that is the failure this exclusion exists to prevent, and it
|
|
59
|
-
does not make the page look broken.
|
|
60
|
-
|
|
61
|
-
## Restoring the image
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
npx @podosoft/podokit deploy sync --profile <name> --revert
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
This recreates the containers from the Compose project **already on the target**,
|
|
68
|
-
which is the description of what was actually applied — not a fresh render, which
|
|
69
|
-
would reproduce the profile as it is now.
|
|
70
|
-
|
|
71
|
-
A release does the same thing as a side effect, so `--revert` is for abandoning a
|
|
72
|
-
sync, not a required cleanup step.
|
|
73
|
-
|
|
74
|
-
## Excluding part of the build output
|
|
75
|
-
|
|
76
|
-
Some of a build output can come from a toolchain the developer's machine does not
|
|
77
|
-
have. Overwriting that part replaces real artifacts with an index of artifacts that
|
|
78
|
-
are no longer there, and the application keeps serving pages while the missing files
|
|
79
|
-
404 — so nothing looks broken. Those paths belong in the profile:
|
|
80
|
-
|
|
81
|
-
```json
|
|
82
|
-
{ "sync": { "exclude": ["apps/web/build/static-assets/generated"] } }
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
If you find yourself about to sync over something this machine cannot rebuild, add it
|
|
86
|
-
here rather than remembering not to. `--clean` refuses while an exclude sits beneath
|
|
87
|
-
a synced path, for the same reason.
|
|
88
|
-
|
|
89
|
-
## Boundary
|
|
90
|
-
|
|
91
|
-
Never use this to ship. Never run migrations alongside it. Never create or rotate
|
|
92
|
-
credentials, and never print a secret value.
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: podokit-add-locale
|
|
3
|
-
description: Add, translate, validate, activate, or troubleshoot a JSON locale in a PodoKit-generated SvelteKit app. Use when a user asks to add a language, split or edit locale JSON, check translation coverage or placeholders, configure fallback behavior, or verify locale changes through Vite HMR.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# PodoKit Add Locale
|
|
7
|
-
|
|
8
|
-
Add languages through the PodoKit locale commands and the app-owned JSON catalog. Keep module catalogs managed so `podo update` can continue to update them.
|
|
9
|
-
|
|
10
|
-
## Workflow
|
|
11
|
-
|
|
12
|
-
1. Inspect the existing locale state.
|
|
13
|
-
|
|
14
|
-
```sh
|
|
15
|
-
podo locale list
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
2. Add a canonical BCP 47 language tag. Set `--direction rtl` only for right-to-left languages.
|
|
19
|
-
|
|
20
|
-
```sh
|
|
21
|
-
podo locale add pt-BR --name "Português (Brasil)"
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
3. Read [references/catalog-format.md](references/catalog-format.md), then translate the new app-owned file at `apps/web/src/lib/i18n/catalogs/app/<locale>.json`.
|
|
25
|
-
|
|
26
|
-
4. Validate key coverage, JSON value types, and interpolation placeholders.
|
|
27
|
-
|
|
28
|
-
```sh
|
|
29
|
-
podo locale validate pt-BR
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
5. Activate the locale. Partial catalogs are permitted because runtime fallback fills missing keys, but report the coverage percentage to the user.
|
|
33
|
-
|
|
34
|
-
```sh
|
|
35
|
-
podo locale activate pt-BR
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
6. Run the app with its documented container-based development command. Verify the language switch, one complete key, one fallback key, and locale persistence. Editing an existing JSON file must update through Vite HMR without restarting the container. Adding a new locale file may trigger an automatic full-page reload.
|
|
39
|
-
|
|
40
|
-
## Rules
|
|
41
|
-
|
|
42
|
-
- Treat `en` as the stable final fallback and never deactivate it.
|
|
43
|
-
- Preserve placeholders exactly. For example, translate `Hello {name}` without renaming or removing `{name}`.
|
|
44
|
-
- Put product-specific copy only in `catalogs/app/`. Do not edit `catalogs/admin-dashboard/` or other module catalogs directly.
|
|
45
|
-
- Keep locale definition filenames identical to their canonical codes, including case such as `pt-BR.json`.
|
|
46
|
-
- Do not activate a locale definition before its JSON parses and `podo locale validate` succeeds.
|
|
47
|
-
- Do not use the UI message catalogs for user-authored records. Dynamic content needs locale-aware records and a separate publication/fallback policy.
|
|
48
|
-
- When deactivating a locale, preserve its files so it can be reactivated without losing translations.
|
|
49
|
-
|
|
50
|
-
## Fallback And Site Default
|
|
51
|
-
|
|
52
|
-
The message runtime resolves missing keys in this order: selected locale, configured site default, then English. The site default is an administrator choice, not a build-time constant. Changing it must not delete or rewrite catalogs.
|
|
53
|
-
|
|
54
|
-
If a requested language is unsupported or inactive, resolve it to the configured site default. Keep localized URL and SEO behavior in the consuming app; the catalogs provide translated strings but do not define routing policy.
|
|
55
|
-
|
|
56
|
-
## Completion Checklist
|
|
57
|
-
|
|
58
|
-
- `podo locale validate` succeeds for every active locale.
|
|
59
|
-
- The new locale definition is active and has the intended display name and direction.
|
|
60
|
-
- App-owned JSON contains the new product copy; managed module catalogs remain untouched.
|
|
61
|
-
- Development edits update without a container restart.
|
|
62
|
-
- Automated tests cover selection, fallback, placeholders, and at least one incomplete catalog.
|
|
63
|
-
- User-facing locale setup or routing documentation is updated when behavior changes.
|
package/dist/templates/todo/dot-claude/skills/podokit-add-locale/references/catalog-format.md
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# JSON Catalog Format
|
|
2
|
-
|
|
3
|
-
## Directory Layout
|
|
4
|
-
|
|
5
|
-
```text
|
|
6
|
-
apps/web/src/lib/i18n/
|
|
7
|
-
├── locales/
|
|
8
|
-
│ ├── en.json
|
|
9
|
-
│ ├── ko.json
|
|
10
|
-
│ └── pt-BR.json
|
|
11
|
-
└── catalogs/
|
|
12
|
-
├── admin-dashboard/ # PodoKit-managed module messages
|
|
13
|
-
├── blog/ # module-managed messages when installed
|
|
14
|
-
└── app/ # app-owned product messages and overrides
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Each locale definition has this shape:
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
{
|
|
21
|
-
"code": "pt-BR",
|
|
22
|
-
"name": "Português (Brasil)",
|
|
23
|
-
"direction": "ltr",
|
|
24
|
-
"enabled": false
|
|
25
|
-
}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
`code` must be a canonical BCP 47 tag and must match the filename. `direction` is `ltr` or `rtl`. Newly added locales stay inactive until explicitly activated.
|
|
29
|
-
|
|
30
|
-
## Catalog Composition
|
|
31
|
-
|
|
32
|
-
Catalogs are nested JSON objects with strings at their leaves:
|
|
33
|
-
|
|
34
|
-
```json
|
|
35
|
-
{
|
|
36
|
-
"common": {
|
|
37
|
-
"save": "Save",
|
|
38
|
-
"welcome": "Welcome, {name}"
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
The runtime lazily loads every `catalogs/*/<locale>.json` file. Module catalogs are merged first in stable name order; the `app` catalog is merged last, so the consuming app may intentionally override module copy without modifying managed files.
|
|
44
|
-
|
|
45
|
-
English defines the complete key and value-type contract. Other locales may omit keys, but translated values must retain the English type and all `{placeholder}` names. JSON objects and arrays are supported; executable expressions are not.
|
|
46
|
-
|
|
47
|
-
## Development Reloading
|
|
48
|
-
|
|
49
|
-
Catalog imports use Vite's `import.meta.glob`. Changes to an existing JSON dependency participate in Vite HMR and must appear without restarting the development container. A new file changes the glob membership and may cause Vite to reload the page automatically. If neither occurs, confirm that the app source directory, including `apps/web/src`, is mounted or synced by the development compose configuration.
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: podokit-deploy
|
|
3
|
-
description: Plan, inspect, apply, verify, and roll back PodoKit releases with an explicit profile and confirmation hash, on Kubernetes or Docker Compose. Use for release, rollout, and rollback work in a generated PodoKit project.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# PodoKit deployment
|
|
7
|
-
|
|
8
|
-
Read and follow the canonical skill at `../../../.agents/skills/podokit-deploy/SKILL.md`.
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: podokit-deploy-fast
|
|
3
|
-
description: Push locally built artifacts into a running Docker Compose deployment and restart it, without building or publishing an image. Use when iterating on code against a deployed environment and a full release round trip is too slow. Not for releases, migrations, dependency changes, or anything going to real users.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# PodoKit fast deployment sync
|
|
7
|
-
|
|
8
|
-
Read and follow the canonical skill at `../../../.agents/skills/podokit-deploy-fast/SKILL.md`.
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: podokit-nest-endpoint
|
|
3
|
-
description: Use when adding or changing a NestJS REST endpoint in apps/api — a controller/service with DTO validation, the standard error envelope, and a test. Follow this for any new backend route in a PodoKit project.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Add a NestJS endpoint (PodoKit conventions)
|
|
7
|
-
|
|
8
|
-
1. **Module**: create/extend a Nest module under `apps/api/src/<feature>/`
|
|
9
|
-
(`<feature>.module.ts`, `.controller.ts`, `.service.ts`, `dto/`). Register the
|
|
10
|
-
module in `apps/api/src/app.module.ts` — add it **inside** the
|
|
11
|
-
`// podokit:begin:module-imports … end` fence, never outside it.
|
|
12
|
-
2. **DTOs**: validate every input with `class-validator` decorators on a DTO
|
|
13
|
-
class. No `any`; give explicit return types.
|
|
14
|
-
3. **Errors**: throw `AppException("STABLE_CODE", "message", statusCode)` (from
|
|
15
|
-
`@podosoft/podokit-contracts` / the app's `common/`). The global filter renders
|
|
16
|
-
it as `{ success: false, error: { code, message, statusCode, path, timestamp } }`.
|
|
17
|
-
Pick a stable, UPPER_SNAKE `code` — the frontend branches on it.
|
|
18
|
-
4. **Auth**: if the `auth` module is installed the API is secure by default; mark
|
|
19
|
-
public routes with `@Public()` and read the user with `@Session()`.
|
|
20
|
-
5. **Swagger**: annotate with `@ApiTags` so it shows under `/api-docs`.
|
|
21
|
-
6. **Test**: add an e2e/unit test under `apps/api` or the `tests/` workspace
|
|
22
|
-
(Nest e2e or Vitest + supertest). Verify with
|
|
23
|
-
`npm run build -w {{projectName}}-api` and the test.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: podokit-update
|
|
3
|
-
description: Use when the user wants to update the project to a newer PodoKit version, pull in template/module improvements, check what they've changed vs the generated code, or take ownership of a managed file. Covers podo status/diff/doctor/update/eject.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Keep a PodoKit project up to date
|
|
7
|
-
|
|
8
|
-
The project records how it was assembled in `.podokit/` so the toolkit can update
|
|
9
|
-
its own files while keeping the user's changes.
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
podo status # version, modules, file tiers, and how many managed files were edited
|
|
13
|
-
podo diff # list the PodoKit-managed files you've edited (owned files ignored)
|
|
14
|
-
podo doctor # check framework versions vs. the supported ranges
|
|
15
|
-
podo update # dry-run: preview what a newer version would change (writes nothing)
|
|
16
|
-
podo update --apply # apply it — clean updates are written; your edits are 3-way merged
|
|
17
|
-
podo eject <path> # take ownership of a managed file so update skips it
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Rules to respect:
|
|
21
|
-
- **owned** files (routes, your components, `AGENTS.md`, shadcn `ui/**`) are never
|
|
22
|
-
touched by `update`.
|
|
23
|
-
- **assembled** files are recomputed from the module set — keep edits **outside**
|
|
24
|
-
the `// podokit:begin…end` fences.
|
|
25
|
-
- Run `podo update` (dry-run) first and read the plan before `--apply`. Commit or
|
|
26
|
-
stash your work beforehand so a merge is easy to review.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: PodoKit project conventions (stack, commands, code style, tooling)
|
|
3
|
-
alwaysApply: true
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
The conventions for this project are documented in [`AGENTS.md`](../../AGENTS.md)
|
|
7
|
-
at the repository root. Follow them: web runs on :5001 and api on :5002; use
|
|
8
|
-
shadcn-svelte components and the shared `DataTable`/`TableToolbar` for lists;
|
|
9
|
-
Svelte 5 runes only; branch on the error `code`, not the message; keep strings in
|
|
10
|
-
i18n; and respect the `.podokit/` file-ownership tiers (never hand-edit
|
|
11
|
-
`// podokit:` fenced regions or `src/lib/components/ui/**`).
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
node_modules
|
|
2
|
-
**/node_modules
|
|
3
|
-
dist
|
|
4
|
-
**/dist
|
|
5
|
-
.svelte-kit
|
|
6
|
-
**/.svelte-kit
|
|
7
|
-
.git
|
|
8
|
-
*.log
|
|
9
|
-
|
|
10
|
-
# Real environment files never enter a build context. The build stages copy the
|
|
11
|
-
# whole repository, so an .env left here is baked into an image layer even when the
|
|
12
|
-
# runtime stage does not copy it -- and getting-started tells you to create one.
|
|
13
|
-
.env
|
|
14
|
-
.env.*
|
|
15
|
-
!.env.example
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
NODE_ENV=development
|
|
2
|
-
PORT=5002
|
|
3
|
-
POSTGRES_HOST=postgres
|
|
4
|
-
POSTGRES_PORT=5432
|
|
5
|
-
POSTGRES_USER=podokit
|
|
6
|
-
POSTGRES_PASSWORD=podokit
|
|
7
|
-
POSTGRES_DB=podokit
|
|
8
|
-
BACKEND_INTERNAL_URL=http://api:5002
|
|
9
|
-
CORS_ORIGIN=http://{{projectName}}.localhost,http://localhost
|
|
10
|
-
REDIS_HOST=redis
|
|
11
|
-
REDIS_PORT=6379
|
|
12
|
-
BETTER_AUTH_SECRET=change-me-in-container-min-32-characters
|
|
13
|
-
BETTER_AUTH_URL=http://{{projectName}}.localhost
|
|
14
|
-
ADMIN_EMAILS=admin@example.com
|
|
15
|
-
AUDIT_LOG_ENABLED=true
|
|
16
|
-
RATE_LIMIT_TTL=60
|
|
17
|
-
RATE_LIMIT_MAX=100
|
|
18
|
-
API_KEYS=dev-key-please-change
|
|
19
|
-
LOG_LEVEL=info
|
|
20
|
-
STORAGE_PROVIDER=minio
|
|
21
|
-
S3_ENDPOINT=http://minio:9000
|
|
22
|
-
S3_REGION=us-east-1
|
|
23
|
-
S3_BUCKET=podokit
|
|
24
|
-
S3_ACCESS_KEY_ID=podokit
|
|
25
|
-
S3_SECRET_ACCESS_KEY=podokitsecret
|
|
26
|
-
S3_FORCE_PATH_STYLE=true
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Copy to .env and adjust. Never commit real secrets.
|
|
2
|
-
|
|
3
|
-
# ── Required (runtime) ───────────────────────────────────────────────
|
|
4
|
-
NODE_ENV=development
|
|
5
|
-
PORT=5002
|
|
6
|
-
|
|
7
|
-
POSTGRES_HOST=localhost
|
|
8
|
-
POSTGRES_PORT=5432
|
|
9
|
-
POSTGRES_USER=podokit
|
|
10
|
-
POSTGRES_PASSWORD=podokit
|
|
11
|
-
POSTGRES_DB=podokit
|
|
12
|
-
|
|
13
|
-
# Web -> API boundary (server-side only; not exposed to the browser)
|
|
14
|
-
BACKEND_INTERNAL_URL=http://localhost:5002
|
|
15
|
-
|
|
16
|
-
# Exact paths the web server may proxy as WebSocket upgrades to the API, comma
|
|
17
|
-
# separated. Empty means none: a SvelteKit route cannot answer an upgrade, so a
|
|
18
|
-
# WebSocket gateway on the API is unreachable until it is named here. Each path is
|
|
19
|
-
# matched whole and must be authorised by the API at handshake time -- a relay that
|
|
20
|
-
# forwards anything is an open tunnel to every private route.
|
|
21
|
-
WS_PROXY_PATHS=
|
|
22
|
-
CORS_ORIGIN=http://localhost:5001
|
|
23
|
-
|
|
24
|
-
# ── Optional / development ───────────────────────────────────────────
|
|
25
|
-
# Redis — only needed by cache/queue modules. Start it with:
|
|
26
|
-
# docker compose --profile cache up
|
|
27
|
-
REDIS_HOST=localhost
|
|
28
|
-
REDIS_PORT=6379
|
|
29
|
-
# REDIS_URL takes precedence over the individual settings below.
|
|
30
|
-
# REDIS_URL=rediss://user:password@cache.example.com:6380/0
|
|
31
|
-
REDIS_DB=0
|
|
32
|
-
# REDIS_USERNAME=
|
|
33
|
-
# REDIS_PASSWORD=
|
|
34
|
-
REDIS_TLS=false
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# Copilot instructions
|
|
2
|
-
|
|
3
|
-
This project's coding conventions for AI agents live in [`AGENTS.md`](../AGENTS.md).
|
|
4
|
-
Read it before making changes — it covers the stack, commands (web :5001 / api
|
|
5
|
-
:5002), TypeScript/Svelte 5/shadcn-svelte rules, the error-code envelope, and the
|
|
6
|
-
`podo` tooling.
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
node_modules/
|
|
2
|
-
dist/
|
|
3
|
-
build/
|
|
4
|
-
.svelte-kit/
|
|
5
|
-
.env
|
|
6
|
-
.env.*
|
|
7
|
-
!.env.example
|
|
8
|
-
.DS_Store
|
|
9
|
-
*.log
|
|
10
|
-
|
|
11
|
-
# e2e test artifacts
|
|
12
|
-
tests/playwright/
|
|
13
|
-
tests/playwright-report/
|
|
14
|
-
tests/test-results/
|
|
15
|
-
playwright/.auth/
|
|
16
|
-
playwright-report/
|
|
17
|
-
test-results/
|
|
18
|
-
|
|
19
|
-
# local performance reports
|
|
20
|
-
output/lighthouse/
|
|
21
|
-
|
|
22
|
-
# podo dev generated compose overlay
|
|
23
|
-
.podokit/runtime/
|