@podosoft/podokit 0.17.4 → 1.0.1

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.
Files changed (681) hide show
  1. package/README.md +70 -114
  2. package/dist/add.d.ts +3 -2
  3. package/dist/add.js +18 -8
  4. package/dist/assemble.d.ts +2 -0
  5. package/dist/assemble.js +18 -5
  6. package/dist/create.d.ts +8 -4
  7. package/dist/create.js +16 -6
  8. package/dist/deploy-compose-profile.js +1 -0
  9. package/dist/deploy-compose-render.d.ts +1 -1
  10. package/dist/deploy-compose-render.js +6 -3
  11. package/dist/deploy-compose-sync.d.ts +10 -14
  12. package/dist/deploy-compose-sync.js +21 -22
  13. package/dist/deploy-compose.js +4 -1
  14. package/dist/deploy-profile.d.ts +1 -0
  15. package/dist/deploy-profile.js +9 -1
  16. package/dist/deploy-render.js +23 -8
  17. package/dist/deploy-schema.js +6 -1
  18. package/dist/dev.d.ts +1 -0
  19. package/dist/dev.js +63 -14
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +15 -9
  22. package/dist/inspect.d.ts +3 -1
  23. package/dist/inspect.js +6 -4
  24. package/dist/lockfile.d.ts +8 -3
  25. package/dist/lockfile.js +18 -4
  26. package/dist/prompt.d.ts +5 -12
  27. package/dist/prompt.js +5 -22
  28. package/dist/remove.js +10 -5
  29. package/dist/templates/base/AGENTS.md +8 -6
  30. package/dist/templates/base/README.md +2 -2
  31. package/dist/templates/base/apps/api/src/main.ts +1 -1
  32. package/dist/templates/base/bunfig.toml +3 -0
  33. package/dist/templates/base/package.json +5 -4
  34. package/dist/templates/{fullstack-nest-svelte → fullstack}/AGENTS.md +19 -12
  35. package/dist/templates/fullstack/Dockerfile.dev +31 -0
  36. package/dist/templates/{fullstack-nest-svelte → fullstack}/README.md +35 -18
  37. package/dist/templates/fullstack/apps/api/Dockerfile +47 -0
  38. package/dist/templates/fullstack/apps/api/package.json +35 -0
  39. package/dist/templates/fullstack/apps/api/scripts/build.mjs +38 -0
  40. package/dist/templates/fullstack/apps/api/scripts/verify-api-contract.ts +37 -0
  41. package/dist/templates/fullstack/apps/api/src/app.extensions.ts +10 -0
  42. package/dist/templates/fullstack/apps/api/src/app.ts +162 -0
  43. package/dist/templates/{todo → fullstack}/apps/api/src/config/redis.connection.spec.ts +20 -2
  44. package/dist/templates/{todo → fullstack}/apps/api/src/config/redis.connection.ts +16 -0
  45. package/dist/templates/fullstack/apps/api/src/core/api-contract.spec.ts +59 -0
  46. package/dist/templates/fullstack/apps/api/src/core/api-contract.ts +169 -0
  47. package/dist/templates/fullstack/apps/api/src/core/services.spec.ts +90 -0
  48. package/dist/templates/fullstack/apps/api/src/core/services.ts +208 -0
  49. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/database/data-source.ts +8 -3
  50. package/dist/templates/fullstack/apps/api/src/database/database.ts +25 -0
  51. package/dist/templates/fullstack/apps/api/src/health/health.plugin.ts +28 -0
  52. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/health/readiness.service.spec.ts +1 -1
  53. package/dist/templates/{todo → fullstack}/apps/api/src/health/readiness.service.ts +0 -3
  54. package/dist/templates/fullstack/apps/api/src/main.ts +30 -0
  55. package/dist/templates/{todo → fullstack}/apps/api/tsconfig.json +1 -2
  56. package/dist/templates/fullstack/apps/web/Dockerfile +41 -0
  57. package/dist/templates/{todo → fullstack}/apps/web/components.json +3 -3
  58. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/package.json +13 -10
  59. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.html +0 -1
  60. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert-action.svelte +1 -1
  61. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/alert/alert-description.svelte +1 -1
  62. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert-title.svelte +1 -1
  63. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert.svelte +1 -1
  64. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +1 -1
  65. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +1 -1
  66. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +1 -1
  67. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +1 -1
  68. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +1 -1
  69. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar.svelte +1 -1
  70. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/badge/badge.svelte +1 -1
  71. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/button/button.svelte +1 -1
  72. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-action.svelte +1 -1
  73. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-content.svelte +1 -1
  74. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-description.svelte +1 -1
  75. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-footer.svelte +1 -1
  76. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-header.svelte +1 -1
  77. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-title.svelte +1 -1
  78. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card.svelte +1 -1
  79. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +1 -1
  80. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +2 -2
  81. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +1 -1
  82. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +2 -2
  83. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +1 -1
  84. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +1 -1
  85. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +1 -1
  86. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
  87. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
  88. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
  89. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  90. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +1 -1
  91. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  92. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +1 -1
  93. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
  94. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  95. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  96. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/input/input.svelte +1 -1
  97. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/label/label.svelte +1 -1
  98. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-content.svelte +2 -2
  99. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-group-heading.svelte +1 -1
  100. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-group.svelte +1 -1
  101. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-item.svelte +1 -1
  102. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-label.svelte +1 -1
  103. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +1 -1
  104. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +1 -1
  105. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-separator.svelte +2 -2
  106. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-trigger.svelte +1 -1
  107. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/separator/separator.svelte +1 -1
  108. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +1 -1
  109. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/switch/switch.svelte +1 -1
  110. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-body.svelte +1 -1
  111. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-caption.svelte +1 -1
  112. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-cell.svelte +1 -1
  113. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/table/table-footer.svelte +1 -1
  114. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-head.svelte +1 -1
  115. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-header.svelte +1 -1
  116. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-row.svelte +1 -1
  117. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table.svelte +1 -1
  118. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +1 -1
  119. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +1 -1
  120. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +1 -1
  121. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/tabs.svelte +1 -1
  122. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +2 -2
  123. package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/api.ts +9 -6
  124. package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/backend-proxy.test.ts +25 -0
  125. package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/backend-proxy.ts +8 -1
  126. package/dist/templates/fullstack/apps/web/src/routes/+layout.svelte +14 -0
  127. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/routes/+page.svelte +5 -5
  128. package/dist/templates/{todo → fullstack}/apps/web/src/routes/api/[...path]/+server.ts +1 -1
  129. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/routes/api/auth/[...all]/+server.ts +1 -1
  130. package/dist/templates/{todo → fullstack}/apps/web/tsconfig.json +3 -2
  131. package/dist/templates/fullstack/apps/web/vite.config.ts +25 -0
  132. package/dist/templates/fullstack/bunfig.toml +3 -0
  133. package/dist/templates/{todo → fullstack}/compose.dev.yaml +8 -38
  134. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/SKILL.md +5 -5
  135. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/profile.md +5 -3
  136. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/rollback.md +2 -2
  137. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy-fast/SKILL.md +3 -3
  138. package/dist/templates/{todo → fullstack}/dot-claude/skills/podokit-add-module/SKILL.md +2 -2
  139. package/dist/templates/fullstack/dot-claude/skills/podokit-elysia-endpoint/SKILL.md +27 -0
  140. package/dist/templates/{todo → fullstack}/dot-claude/skills/podokit-sveltekit-route/SKILL.md +4 -4
  141. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-update/SKILL.md +3 -1
  142. package/dist/templates/{todo → fullstack}/dot-devcontainer/devcontainer.json +1 -1
  143. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-env.example +1 -7
  144. package/dist/templates/{todo → fullstack}/dot-github/workflows/release.yml +5 -8
  145. package/dist/templates/fullstack/dot-mcp.json +8 -0
  146. package/dist/templates/fullstack/dot-podokit/dev.json +5 -0
  147. package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/docker/docker-compose.yml +2 -2
  148. package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/docker/sms-sink.mjs +2 -1
  149. package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/README.md +5 -0
  150. package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/configmap.yaml +2 -0
  151. package/dist/templates/fullstack/package.json +27 -0
  152. package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/README.md +6 -6
  153. package/dist/templates/fullstack/tests/package.json +15 -0
  154. package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/ui/smoke.ui.spec.ts +2 -1
  155. package/dist/templates/modules/admin-dashboard/files/apps/api/scripts/bootstrap-admin.mjs +4 -4
  156. package/dist/templates/modules/admin-dashboard/files/apps/api/src/admin.module.ts +153 -0
  157. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.service.spec.ts +13 -13
  158. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.service.ts +34 -22
  159. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.validation.spec.ts +7 -7
  160. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.validation.ts +5 -6
  161. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.service.ts +31 -29
  162. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.validation.spec.ts +22 -0
  163. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.validation.ts +73 -0
  164. package/dist/templates/modules/admin-dashboard/files/apps/web/src/app.d.ts +2 -2
  165. package/dist/templates/modules/admin-dashboard/files/apps/web/src/hooks.server.ts +7 -6
  166. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/admin/registry.svelte.ts +1 -1
  167. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/auth-redirect.ts +1 -1
  168. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-menu.svelte +6 -6
  169. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-page.svelte +16 -13
  170. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/admin-sidebar.svelte +3 -3
  171. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/data-table.svelte +4 -4
  172. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/impersonation-banner.svelte +24 -0
  173. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/language-switch.svelte +4 -4
  174. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/session-idle-timeout.svelte +1 -1
  175. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/settings/appearance-card.svelte +10 -10
  176. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/sidebar-user-menu.svelte +4 -4
  177. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/site-footer.svelte +2 -2
  178. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/site-runtime.svelte +3 -3
  179. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/table-pagination.svelte +1 -1
  180. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/table-toolbar.svelte +4 -4
  181. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/theme-toggle.svelte +3 -3
  182. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-content.svelte +1 -1
  183. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-ellipsis.svelte +1 -1
  184. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-item.svelte +1 -1
  185. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-link.svelte +2 -2
  186. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-next-button.svelte +1 -1
  187. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-next.svelte +2 -2
  188. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-prev-button.svelte +1 -1
  189. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-previous.svelte +2 -2
  190. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination.svelte +1 -1
  191. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-content.svelte +2 -2
  192. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-description.svelte +1 -1
  193. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-footer.svelte +1 -1
  194. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-header.svelte +1 -1
  195. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-overlay.svelte +1 -1
  196. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-title.svelte +1 -1
  197. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/context.svelte.ts +1 -1
  198. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-content.svelte +1 -1
  199. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-footer.svelte +1 -1
  200. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-action.svelte +1 -1
  201. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-content.svelte +1 -1
  202. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-label.svelte +1 -1
  203. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group.svelte +1 -1
  204. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-header.svelte +1 -1
  205. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-input.svelte +2 -2
  206. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-inset.svelte +1 -1
  207. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-action.svelte +1 -1
  208. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-badge.svelte +1 -1
  209. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-button.svelte +2 -2
  210. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-item.svelte +1 -1
  211. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-skeleton.svelte +2 -2
  212. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub-button.svelte +1 -1
  213. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub-item.svelte +1 -1
  214. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub.svelte +1 -1
  215. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu.svelte +1 -1
  216. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-provider.svelte +2 -2
  217. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-rail.svelte +1 -1
  218. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-separator.svelte +2 -2
  219. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-trigger.svelte +2 -2
  220. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar.svelte +2 -2
  221. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/user-avatar.svelte +1 -1
  222. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/i18n/index.ts +1 -1
  223. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/+layout.server.ts +2 -2
  224. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/+layout.svelte +8 -20
  225. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/+page.svelte +3 -3
  226. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/account/+page.svelte +1 -1
  227. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/audit/+page.server.ts +1 -1
  228. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/audit/+page.svelte +5 -5
  229. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/organizations/+page.server.ts +1 -1
  230. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/organizations/+page.svelte +10 -10
  231. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/sessions/+page.server.ts +1 -1
  232. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/sessions/+page.svelte +9 -9
  233. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/+page.server.ts +1 -1
  234. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/+page.svelte +13 -13
  235. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/general-settings.svelte +10 -10
  236. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/users/+page.server.ts +1 -1
  237. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/users/+page.svelte +18 -17
  238. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/+layout.server.ts +1 -1
  239. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/accept-invitation/[id]/+page.svelte +4 -4
  240. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/+layout.svelte +2 -2
  241. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/forgot-password/+page.svelte +7 -7
  242. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/login/+page.svelte +10 -10
  243. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/pending-approval/+page.svelte +3 -3
  244. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/reset-password/+page.svelte +7 -7
  245. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/signup/+page.svelte +9 -9
  246. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/verify-email/+page.svelte +7 -7
  247. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+layout.server.ts +3 -3
  248. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+page.svelte +6 -6
  249. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/account/+page.server.ts +6 -3
  250. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/account/+page.svelte +12 -8
  251. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/maintenance/+page.svelte +4 -4
  252. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/oauth2/consent/+page.svelte +3 -3
  253. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/setup-2fa/+page.server.ts +1 -1
  254. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/setup-2fa/+page.svelte +13 -9
  255. package/dist/templates/modules/admin-dashboard/files/dot-claude/skills/podokit-data-table/SKILL.md +3 -3
  256. package/dist/templates/modules/admin-dashboard/files/tests/helpers/accounts.ts +17 -2
  257. package/dist/templates/modules/admin-dashboard/files/tests/helpers/disposable-users.ts +29 -12
  258. package/dist/templates/modules/admin-dashboard/files/tests/helpers/hydration.ts +4 -4
  259. package/dist/templates/modules/admin-dashboard/files/tests/ui/account.ui.spec.ts +51 -0
  260. package/dist/templates/modules/admin-dashboard/files/tests/ui/auth.ui.spec.ts +2 -2
  261. package/dist/templates/modules/admin-dashboard/files/tests/ui/impersonation.ui.spec.ts +4 -2
  262. package/dist/templates/modules/admin-dashboard/files/tests/ui/oidc.ui.spec.ts +16 -11
  263. package/dist/templates/modules/admin-dashboard/files/tests/ui/passkey.ui.spec.ts +3 -2
  264. package/dist/templates/modules/admin-dashboard/module.manifest.json +14 -24
  265. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key-verifier.spec.ts +1 -1
  266. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key-verifier.ts +0 -2
  267. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.spec.ts +21 -0
  268. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.ts +36 -9
  269. package/dist/templates/modules/api-key-auth/module.manifest.json +4 -4
  270. package/dist/templates/modules/audit-log/files/apps/api/src/audit/README.md +17 -16
  271. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-events.ts +8 -6
  272. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-hook.ts +2 -2
  273. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.module.ts +31 -12
  274. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.service.spec.ts +48 -0
  275. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.service.ts +76 -25
  276. package/dist/templates/modules/audit-log/module.manifest.json +12 -16
  277. package/dist/templates/modules/auth/files/apps/api/scripts/configure-auth.mjs +5 -5
  278. package/dist/templates/modules/auth/files/apps/api/scripts/run-migrations.mjs +14 -0
  279. package/dist/templates/modules/auth/files/apps/api/src/auth/auth-provider.ts +3 -6
  280. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.module.ts +176 -0
  281. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.openapi.spec.ts +20 -0
  282. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.openapi.ts +22 -0
  283. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.runtime.spec.ts +3 -3
  284. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.service.spec.ts +52 -0
  285. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.service.ts +78 -0
  286. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.ts +4 -1
  287. package/dist/templates/modules/auth/files/apps/api/src/auth/user-delete-handlers.spec.ts +6 -6
  288. package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.service.ts +214 -100
  289. package/dist/templates/modules/auth/files/apps/api/src/migrations/1720400000000-InitAppSettings.ts +2 -1
  290. package/dist/templates/modules/auth/files/apps/api/src/settings/app-settings.migration.spec.ts +34 -0
  291. package/dist/templates/modules/auth/files/apps/api/src/settings/flag-defaults.ts +3 -3
  292. package/dist/templates/modules/auth/files/apps/api/src/settings/settings.service.ts +26 -30
  293. package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/SKILL.md +7 -7
  294. package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/bootstrap-admin.md +3 -3
  295. package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/google.md +3 -3
  296. package/dist/templates/modules/auth/module.manifest.json +24 -77
  297. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.spec.ts +10 -0
  298. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.ts +3 -9
  299. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.module.ts +35 -13
  300. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/worker.module.ts +18 -19
  301. package/dist/templates/modules/bullmq/files/apps/api/src/main-worker.ts +12 -10
  302. package/dist/templates/modules/bullmq/files/infra/docker/worker.compose.example.yml +1 -1
  303. package/dist/templates/modules/bullmq/files/infra/k3s/worker-deployment.yaml +1 -1
  304. package/dist/templates/modules/bullmq/module.manifest.json +8 -9
  305. package/dist/templates/modules/file-upload/files/apps/api/src/files/files.module.ts +28 -8
  306. package/dist/templates/modules/file-upload/files/tests/api/files.api.spec.ts +9 -4
  307. package/dist/templates/modules/file-upload/module.manifest.json +2 -5
  308. package/dist/templates/modules/job-progress/files/apps/api/src/progress/job-progress.module.ts +33 -11
  309. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.spec.ts +6 -6
  310. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.ts +5 -13
  311. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.processor.ts +11 -18
  312. package/dist/templates/modules/job-progress/module.manifest.json +5 -8
  313. package/dist/templates/modules/logging/files/apps/api/src/logging/logging.module.ts +15 -28
  314. package/dist/templates/modules/logging/module.manifest.json +5 -6
  315. package/dist/templates/modules/mailer/module.manifest.json +2 -2
  316. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.spec.ts +20 -0
  317. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.ts +17 -21
  318. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.module.ts +43 -9
  319. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.ts +26 -35
  320. package/dist/templates/modules/object-storage-s3/module.manifest.json +3 -7
  321. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.config.spec.ts +10 -4
  322. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.config.ts +13 -0
  323. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.identity.spec.ts +43 -103
  324. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.identity.ts +19 -56
  325. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.spec.ts +124 -212
  326. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.ts +123 -87
  327. package/dist/templates/modules/rate-limit/files/tests/api/rate-limit.api.spec.ts +17 -1
  328. package/dist/templates/modules/rate-limit/module.manifest.json +17 -11
  329. package/dist/templates/modules/redis/files/apps/api/src/redis/redis.module.ts +41 -10
  330. package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.spec.ts +3 -3
  331. package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.ts +29 -51
  332. package/dist/templates/modules/redis/module.manifest.json +3 -12
  333. package/dist/templates/modules/sse/files/apps/api/src/events/events.module.ts +46 -17
  334. package/dist/templates/modules/sse/files/apps/api/src/events/events.service.spec.ts +19 -50
  335. package/dist/templates/modules/sse/files/apps/api/src/events/events.service.ts +40 -25
  336. package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.ts +25 -79
  337. package/dist/templates/modules/sse/module.manifest.json +2 -5
  338. package/dist/templates/todo/AGENTS.md +15 -12
  339. package/dist/templates/todo/README.md +19 -13
  340. package/dist/templates/todo/apps/api/src/todos/todo.plugin.ts +59 -0
  341. package/dist/templates/todo/apps/api/src/todos/todo.repository.ts +69 -0
  342. package/dist/templates/todo/apps/web/src/routes/+page.svelte +7 -7
  343. package/dist/templates.js +4 -4
  344. package/dist/toolchain.d.ts +13 -0
  345. package/dist/toolchain.js +44 -0
  346. package/dist/update.d.ts +18 -1
  347. package/dist/update.js +50 -12
  348. package/dist/websocket-paths.d.ts +1 -0
  349. package/dist/websocket-paths.js +32 -0
  350. package/package.json +5 -4
  351. package/dist/templates/fullstack-nest-svelte/Dockerfile.dev +0 -58
  352. package/dist/templates/fullstack-nest-svelte/apps/api/Dockerfile +0 -88
  353. package/dist/templates/fullstack-nest-svelte/apps/api/nest-cli.json +0 -5
  354. package/dist/templates/fullstack-nest-svelte/apps/api/package.json +0 -66
  355. package/dist/templates/fullstack-nest-svelte/apps/api/src/app.extensions.ts +0 -21
  356. package/dist/templates/fullstack-nest-svelte/apps/api/src/app.module.ts +0 -26
  357. package/dist/templates/fullstack-nest-svelte/apps/api/src/common/all-exceptions.filter.ts +0 -43
  358. package/dist/templates/fullstack-nest-svelte/apps/api/src/config/redis.connection.spec.ts +0 -53
  359. package/dist/templates/fullstack-nest-svelte/apps/api/src/config/redis.connection.ts +0 -69
  360. package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.controller.ts +0 -38
  361. package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.module.ts +0 -11
  362. package/dist/templates/fullstack-nest-svelte/apps/api/src/health/readiness.service.ts +0 -33
  363. package/dist/templates/fullstack-nest-svelte/apps/api/src/main.ts +0 -29
  364. package/dist/templates/fullstack-nest-svelte/apps/api/tsconfig.json +0 -30
  365. package/dist/templates/fullstack-nest-svelte/apps/web/Dockerfile +0 -81
  366. package/dist/templates/fullstack-nest-svelte/apps/web/components.json +0 -15
  367. package/dist/templates/fullstack-nest-svelte/apps/web/server.js +0 -31
  368. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/alert-description.svelte +0 -23
  369. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +0 -26
  370. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +0 -20
  371. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +0 -23
  372. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +0 -23
  373. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +0 -17
  374. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar.svelte +0 -26
  375. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-description.svelte +0 -20
  376. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-footer.svelte +0 -20
  377. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-title.svelte +0 -20
  378. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +0 -39
  379. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +0 -17
  380. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +0 -20
  381. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +0 -17
  382. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +0 -17
  383. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -44
  384. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -31
  385. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -27
  386. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -17
  387. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +0 -17
  388. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +0 -29
  389. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-group-heading.svelte +0 -21
  390. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-label.svelte +0 -20
  391. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-trigger.svelte +0 -29
  392. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/separator/separator.svelte +0 -23
  393. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +0 -17
  394. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-footer.svelte +0 -20
  395. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +0 -20
  396. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +0 -20
  397. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/api.ts +0 -21
  398. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/backend-proxy.test.ts +0 -79
  399. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/backend-proxy.ts +0 -80
  400. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/ws-upgrade.js +0 -267
  401. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/ws-upgrade.test.js +0 -134
  402. package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/+layout.svelte +0 -9
  403. package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/api/[...path]/+server.ts +0 -16
  404. package/dist/templates/fullstack-nest-svelte/apps/web/svelte.config.js +0 -15
  405. package/dist/templates/fullstack-nest-svelte/apps/web/tsconfig.json +0 -9
  406. package/dist/templates/fullstack-nest-svelte/apps/web/vite.config.ts +0 -29
  407. package/dist/templates/fullstack-nest-svelte/compose.dev.yaml +0 -162
  408. package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-add-module/SKILL.md +0 -27
  409. package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-nest-endpoint/SKILL.md +0 -23
  410. package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-sveltekit-route/SKILL.md +0 -23
  411. package/dist/templates/fullstack-nest-svelte/dot-devcontainer/devcontainer.json +0 -20
  412. package/dist/templates/fullstack-nest-svelte/dot-github/workflows/release.yml +0 -142
  413. package/dist/templates/fullstack-nest-svelte/dot-mcp.json +0 -8
  414. package/dist/templates/fullstack-nest-svelte/dot-podokit/dev.json +0 -4
  415. package/dist/templates/fullstack-nest-svelte/package.json +0 -21
  416. package/dist/templates/fullstack-nest-svelte/tests/package.json +0 -15
  417. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image-upload.interceptor.ts +0 -39
  418. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.controller.ts +0 -73
  419. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.module.ts +0 -9
  420. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.controller.ts +0 -155
  421. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.module.ts +0 -14
  422. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.decorator.ts +0 -9
  423. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.spec.ts +0 -49
  424. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.ts +0 -21
  425. package/dist/templates/modules/api-key-auth/files/apps/api/src/machine/machine.controller.ts +0 -14
  426. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-log.entity.ts +0 -46
  427. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.controller.ts +0 -21
  428. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.decorator.ts +0 -23
  429. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.interceptor.ts +0 -56
  430. package/dist/templates/modules/auth/files/apps/api/src/account/account.controller.ts +0 -101
  431. package/dist/templates/modules/auth/files/apps/api/src/account/account.module.ts +0 -6
  432. package/dist/templates/modules/auth/files/apps/api/src/auth/two-factor-required.guard.ts +0 -68
  433. package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.controller.ts +0 -33
  434. package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.entity.ts +0 -26
  435. package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.module.ts +0 -12
  436. package/dist/templates/modules/auth/files/apps/api/src/health/health.controller.ts +0 -41
  437. package/dist/templates/modules/auth/files/apps/api/src/settings/app-setting.entity.ts +0 -16
  438. package/dist/templates/modules/auth/files/apps/api/src/settings/settings.module.ts +0 -11
  439. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/dto/create-job.dto.ts +0 -9
  440. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.controller.ts +0 -29
  441. package/dist/templates/modules/file-upload/files/apps/api/src/files/files.controller.ts +0 -32
  442. package/dist/templates/modules/job-progress/files/apps/api/src/progress/dto/start-job.dto.ts +0 -11
  443. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.controller.ts +0 -17
  444. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/dto/put-object.dto.ts +0 -8
  445. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.controller.ts +0 -29
  446. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.spec.ts +0 -35
  447. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.integration.spec.ts +0 -91
  448. package/dist/templates/modules/redis/files/apps/api/src/redis/cache.controller.ts +0 -21
  449. package/dist/templates/modules/redis/files/apps/api/src/redis/dto/set-cache.dto.ts +0 -14
  450. package/dist/templates/modules/sse/files/apps/api/src/events/dto/publish-event.dto.ts +0 -8
  451. package/dist/templates/modules/sse/files/apps/api/src/events/events.controller.ts +0 -39
  452. package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.redis.spec.ts +0 -42
  453. package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.spec.ts +0 -97
  454. package/dist/templates/todo/CLAUDE.md +0 -6
  455. package/dist/templates/todo/Dockerfile.dev +0 -58
  456. package/dist/templates/todo/apps/api/Dockerfile +0 -88
  457. package/dist/templates/todo/apps/api/nest-cli.json +0 -5
  458. package/dist/templates/todo/apps/api/package.json +0 -66
  459. package/dist/templates/todo/apps/api/scripts/.keep +0 -1
  460. package/dist/templates/todo/apps/api/src/app.extensions.ts +0 -21
  461. package/dist/templates/todo/apps/api/src/app.module.ts +0 -28
  462. package/dist/templates/todo/apps/api/src/common/all-exceptions.filter.ts +0 -43
  463. package/dist/templates/todo/apps/api/src/common/app-exception.ts +0 -4
  464. package/dist/templates/todo/apps/api/src/config/env.validation.ts +0 -23
  465. package/dist/templates/todo/apps/api/src/database/data-source.ts +0 -19
  466. package/dist/templates/todo/apps/api/src/database/migrate.ts +0 -16
  467. package/dist/templates/todo/apps/api/src/health/health.controller.ts +0 -38
  468. package/dist/templates/todo/apps/api/src/health/health.module.ts +0 -11
  469. package/dist/templates/todo/apps/api/src/health/readiness.service.spec.ts +0 -22
  470. package/dist/templates/todo/apps/api/src/main.ts +0 -29
  471. package/dist/templates/todo/apps/api/src/todos/dto/create-todo.dto.ts +0 -10
  472. package/dist/templates/todo/apps/api/src/todos/dto/update-todo.dto.ts +0 -10
  473. package/dist/templates/todo/apps/api/src/todos/todo.entity.ts +0 -16
  474. package/dist/templates/todo/apps/api/src/todos/todos.controller.ts +0 -38
  475. package/dist/templates/todo/apps/api/src/todos/todos.module.ts +0 -12
  476. package/dist/templates/todo/apps/api/src/todos/todos.service.ts +0 -41
  477. package/dist/templates/todo/apps/web/Dockerfile +0 -78
  478. package/dist/templates/todo/apps/web/package.json +0 -38
  479. package/dist/templates/todo/apps/web/server.js +0 -31
  480. package/dist/templates/todo/apps/web/src/app.css +0 -81
  481. package/dist/templates/todo/apps/web/src/app.d.ts +0 -11
  482. package/dist/templates/todo/apps/web/src/app.html +0 -13
  483. package/dist/templates/todo/apps/web/src/lib/api.ts +0 -5
  484. package/dist/templates/todo/apps/web/src/lib/components/site-runtime.svelte +0 -7
  485. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-action.svelte +0 -20
  486. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-title.svelte +0 -23
  487. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert.svelte +0 -43
  488. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/index.ts +0 -17
  489. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/index.ts +0 -22
  490. package/dist/templates/todo/apps/web/src/lib/components/ui/badge/badge.svelte +0 -49
  491. package/dist/templates/todo/apps/web/src/lib/components/ui/badge/index.ts +0 -2
  492. package/dist/templates/todo/apps/web/src/lib/components/ui/button/button.svelte +0 -82
  493. package/dist/templates/todo/apps/web/src/lib/components/ui/button/index.ts +0 -17
  494. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-action.svelte +0 -23
  495. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-content.svelte +0 -20
  496. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-header.svelte +0 -23
  497. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card.svelte +0 -22
  498. package/dist/templates/todo/apps/web/src/lib/components/ui/card/index.ts +0 -25
  499. package/dist/templates/todo/apps/web/src/lib/components/ui/checkbox/index.ts +0 -6
  500. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +0 -11
  501. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +0 -48
  502. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +0 -32
  503. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +0 -7
  504. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -11
  505. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog.svelte +0 -7
  506. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/index.ts +0 -34
  507. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -16
  508. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +0 -22
  509. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -7
  510. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +0 -24
  511. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -7
  512. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -16
  513. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +0 -34
  514. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +0 -20
  515. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -7
  516. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -7
  517. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -7
  518. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/index.ts +0 -54
  519. package/dist/templates/todo/apps/web/src/lib/components/ui/input/index.ts +0 -7
  520. package/dist/templates/todo/apps/web/src/lib/components/ui/input/input.svelte +0 -48
  521. package/dist/templates/todo/apps/web/src/lib/components/ui/label/index.ts +0 -7
  522. package/dist/templates/todo/apps/web/src/lib/components/ui/label/label.svelte +0 -20
  523. package/dist/templates/todo/apps/web/src/lib/components/ui/select/index.ts +0 -37
  524. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-content.svelte +0 -45
  525. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-group.svelte +0 -17
  526. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-item.svelte +0 -40
  527. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-portal.svelte +0 -7
  528. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +0 -20
  529. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +0 -20
  530. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-separator.svelte +0 -18
  531. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select.svelte +0 -11
  532. package/dist/templates/todo/apps/web/src/lib/components/ui/separator/index.ts +0 -7
  533. package/dist/templates/todo/apps/web/src/lib/components/ui/skeleton/index.ts +0 -7
  534. package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/index.ts +0 -1
  535. package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/sonner.svelte +0 -34
  536. package/dist/templates/todo/apps/web/src/lib/components/ui/switch/index.ts +0 -7
  537. package/dist/templates/todo/apps/web/src/lib/components/ui/switch/switch.svelte +0 -29
  538. package/dist/templates/todo/apps/web/src/lib/components/ui/table/index.ts +0 -28
  539. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-body.svelte +0 -15
  540. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-caption.svelte +0 -20
  541. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-cell.svelte +0 -15
  542. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-head.svelte +0 -15
  543. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-header.svelte +0 -20
  544. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-row.svelte +0 -15
  545. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table.svelte +0 -17
  546. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/index.ts +0 -16
  547. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +0 -17
  548. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs.svelte +0 -19
  549. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/index.ts +0 -19
  550. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +0 -52
  551. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +0 -7
  552. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +0 -7
  553. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -7
  554. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +0 -7
  555. package/dist/templates/todo/apps/web/src/lib/i18n/README.md +0 -9
  556. package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/en.json +0 -1
  557. package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/ko.json +0 -1
  558. package/dist/templates/todo/apps/web/src/lib/i18n/locales/en.json +0 -6
  559. package/dist/templates/todo/apps/web/src/lib/i18n/locales/ko.json +0 -6
  560. package/dist/templates/todo/apps/web/src/lib/server/ws-upgrade.js +0 -267
  561. package/dist/templates/todo/apps/web/src/lib/server/ws-upgrade.test.js +0 -134
  562. package/dist/templates/todo/apps/web/src/lib/utils.ts +0 -11
  563. package/dist/templates/todo/apps/web/src/routes/+layout.svelte +0 -9
  564. package/dist/templates/todo/apps/web/src/routes/api/auth/[...all]/+server.ts +0 -16
  565. package/dist/templates/todo/apps/web/static/.gitkeep +0 -0
  566. package/dist/templates/todo/apps/web/static/favicon.svg +0 -13
  567. package/dist/templates/todo/apps/web/svelte.config.js +0 -15
  568. package/dist/templates/todo/apps/web/vite.config.ts +0 -29
  569. package/dist/templates/todo/dot-agents/skills/podokit-deploy/SKILL.md +0 -65
  570. package/dist/templates/todo/dot-agents/skills/podokit-deploy/agents/openai.yaml +0 -4
  571. package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/profile.md +0 -75
  572. package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/release.md +0 -64
  573. package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/rollback.md +0 -5
  574. package/dist/templates/todo/dot-agents/skills/podokit-deploy-fast/SKILL.md +0 -92
  575. package/dist/templates/todo/dot-claude/skills/podokit-add-locale/SKILL.md +0 -63
  576. package/dist/templates/todo/dot-claude/skills/podokit-add-locale/agents/openai.yaml +0 -4
  577. package/dist/templates/todo/dot-claude/skills/podokit-add-locale/references/catalog-format.md +0 -49
  578. package/dist/templates/todo/dot-claude/skills/podokit-deploy/SKILL.md +0 -8
  579. package/dist/templates/todo/dot-claude/skills/podokit-deploy-fast/SKILL.md +0 -8
  580. package/dist/templates/todo/dot-claude/skills/podokit-nest-endpoint/SKILL.md +0 -23
  581. package/dist/templates/todo/dot-claude/skills/podokit-update/SKILL.md +0 -26
  582. package/dist/templates/todo/dot-cursor/rules/podokit.mdc +0 -11
  583. package/dist/templates/todo/dot-dockerignore +0 -15
  584. package/dist/templates/todo/dot-env.docker +0 -26
  585. package/dist/templates/todo/dot-env.example +0 -34
  586. package/dist/templates/todo/dot-github/copilot-instructions.md +0 -6
  587. package/dist/templates/todo/dot-gitignore +0 -23
  588. package/dist/templates/todo/dot-mcp.json +0 -8
  589. package/dist/templates/todo/dot-podokit/dev.json +0 -4
  590. package/dist/templates/todo/infra/docker/docker-compose.yml +0 -33
  591. package/dist/templates/todo/infra/k3s/README.md +0 -18
  592. package/dist/templates/todo/infra/k3s/api-deployment.yaml +0 -29
  593. package/dist/templates/todo/infra/k3s/configmap.yaml +0 -12
  594. package/dist/templates/todo/infra/k3s/ingress.yaml +0 -32
  595. package/dist/templates/todo/infra/k3s/namespace.yaml +0 -4
  596. package/dist/templates/todo/infra/k3s/secret.example.yaml +0 -10
  597. package/dist/templates/todo/infra/k3s/services.yaml +0 -21
  598. package/dist/templates/todo/infra/k3s/web-deployment.yaml +0 -30
  599. package/dist/templates/todo/infra/traefik/dynamic.yml +0 -17
  600. package/dist/templates/todo/package.json +0 -21
  601. package/dist/templates/todo/tests/README.md +0 -21
  602. package/dist/templates/todo/tests/api/health.api.spec.ts +0 -14
  603. package/dist/templates/todo/tests/package.json +0 -15
  604. package/dist/templates/todo/tests/playwright.config.ts +0 -27
  605. package/dist/templates/todo/tests/playwright.extensions.ts +0 -44
  606. package/dist/templates/todo/tests/ui/smoke.ui.spec.ts +0 -8
  607. /package/dist/templates/{fullstack-nest-svelte → fullstack}/CLAUDE.md +0 -0
  608. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/scripts/.keep +0 -0
  609. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/common/app-exception.ts +0 -0
  610. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/config/env.validation.ts +0 -0
  611. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/database/migrate.ts +0 -0
  612. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.css +0 -0
  613. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.d.ts +0 -0
  614. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/api.ts +0 -0
  615. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/site-runtime.svelte +0 -0
  616. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/index.ts +0 -0
  617. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/avatar/index.ts +0 -0
  618. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/badge/index.ts +0 -0
  619. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/button/index.ts +0 -0
  620. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/index.ts +0 -0
  621. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/checkbox/index.ts +0 -0
  622. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +0 -0
  623. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +0 -0
  624. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -0
  625. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog.svelte +0 -0
  626. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/index.ts +0 -0
  627. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -0
  628. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -0
  629. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -0
  630. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -0
  631. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -0
  632. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -0
  633. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -0
  634. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/index.ts +0 -0
  635. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/input/index.ts +0 -0
  636. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/label/index.ts +0 -0
  637. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/index.ts +0 -0
  638. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-portal.svelte +0 -0
  639. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select.svelte +0 -0
  640. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/separator/index.ts +0 -0
  641. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/skeleton/index.ts +0 -0
  642. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/sonner/index.ts +0 -0
  643. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/sonner/sonner.svelte +0 -0
  644. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/switch/index.ts +0 -0
  645. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/index.ts +0 -0
  646. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/index.ts +0 -0
  647. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/index.ts +0 -0
  648. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +0 -0
  649. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +0 -0
  650. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -0
  651. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +0 -0
  652. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/README.md +0 -0
  653. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/catalogs/app/en.json +0 -0
  654. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/catalogs/app/ko.json +0 -0
  655. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/locales/en.json +0 -0
  656. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/locales/ko.json +0 -0
  657. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/utils.ts +0 -0
  658. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/static/.gitkeep +0 -0
  659. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/static/favicon.svg +0 -0
  660. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/agents/openai.yaml +0 -0
  661. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/release.md +0 -0
  662. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/SKILL.md +0 -0
  663. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/agents/openai.yaml +0 -0
  664. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/references/catalog-format.md +0 -0
  665. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-deploy/SKILL.md +0 -0
  666. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-deploy-fast/SKILL.md +0 -0
  667. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-cursor/rules/podokit.mdc +0 -0
  668. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-dockerignore +0 -0
  669. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-env.docker +0 -0
  670. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-github/copilot-instructions.md +0 -0
  671. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-gitignore +0 -0
  672. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/api-deployment.yaml +0 -0
  673. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/ingress.yaml +0 -0
  674. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/namespace.yaml +0 -0
  675. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/secret.example.yaml +0 -0
  676. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/services.yaml +0 -0
  677. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/web-deployment.yaml +0 -0
  678. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/traefik/dynamic.yml +0 -0
  679. /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/api/health.api.spec.ts +0 -0
  680. /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/playwright.config.ts +0 -0
  681. /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/playwright.extensions.ts +0 -0
package/dist/lockfile.js CHANGED
@@ -5,6 +5,7 @@ exports.manifestPath = manifestPath;
5
5
  exports.filesLockPath = filesLockPath;
6
6
  exports.readManifest = readManifest;
7
7
  exports.writeManifest = writeManifest;
8
+ exports.manifestTemplateVars = manifestTemplateVars;
8
9
  exports.writeFilesLock = writeFilesLock;
9
10
  exports.podokitVersion = podokitVersion;
10
11
  exports.matchGlob = matchGlob;
@@ -19,12 +20,13 @@ exports.recordModules = recordModules;
19
20
  const node_fs_1 = require("node:fs");
20
21
  const node_path_1 = require("node:path");
21
22
  const podokit_template_engine_1 = require("@podosoft/podokit-template-engine");
23
+ const toolchain_1 = require("./toolchain");
22
24
  /**
23
25
  * The generation lockfile (`.podokit/`) records how a project was assembled so
24
26
  * `podo update` can rebuild the same inputs and detect user edits. See
25
27
  * ADR-0009 (update mechanism) and ADR-0010 (ownership model).
26
28
  */
27
- exports.LOCK_SCHEMA_VERSION = 2;
29
+ exports.LOCK_SCHEMA_VERSION = 3;
28
30
  const PODOKIT_DIR = ".podokit";
29
31
  const MANIFEST_FILE = "manifest.json";
30
32
  const FILES_LOCK_FILE = "files.lock";
@@ -48,7 +50,7 @@ exports.DEFAULT_OWNED_GLOBS = [
48
50
  // Locale definitions and app messages are application-owned extension points.
49
51
  "apps/web/src/lib/i18n/locales/**",
50
52
  "apps/web/src/lib/i18n/catalogs/app/**",
51
- // Owned Nest DI extension slot — override providers here; update never touches it.
53
+ // Owned Elysia extension slot — register application services and plugins here.
52
54
  "apps/api/src/app.extensions.ts",
53
55
  // AI agent guidance — yours to customize; update never touches it.
54
56
  "AGENTS.md",
@@ -82,12 +84,24 @@ function filesLockPath(projectRoot) {
82
84
  }
83
85
  function readManifest(projectRoot) {
84
86
  const file = manifestPath(projectRoot);
85
- return (0, node_fs_1.existsSync)(file) ? JSON.parse((0, node_fs_1.readFileSync)(file, "utf8")) : null;
87
+ if (!(0, node_fs_1.existsSync)(file))
88
+ return null;
89
+ const raw = JSON.parse((0, node_fs_1.readFileSync)(file, "utf8"));
90
+ if (raw.schemaVersion !== exports.LOCK_SCHEMA_VERSION
91
+ || raw.toolchain?.runtime !== "bun"
92
+ || raw.toolchain.packageManager !== "bun") {
93
+ throw new Error("This project was generated by PodoKit v0 and is not compatible with PodoKit v1 updates. Use @podosoft/podokit@0.17.4 for this project; create a new v1 project for Bun and Elysia.");
94
+ }
95
+ return raw;
86
96
  }
87
97
  function writeManifest(projectRoot, manifest) {
88
98
  (0, node_fs_1.mkdirSync)(podokitDir(projectRoot), { recursive: true });
89
99
  (0, node_fs_1.writeFileSync)(manifestPath(projectRoot), `${JSON.stringify({ ...manifest, schemaVersion: exports.LOCK_SCHEMA_VERSION }, null, 2)}\n`);
90
100
  }
101
+ /** Complete replay variables for a Bun-only v1 project. */
102
+ function manifestTemplateVars(manifest) {
103
+ return { ...manifest.answers, ...(0, toolchain_1.toolchainTemplateVars)(manifest.toolchain) };
104
+ }
91
105
  function writeFilesLock(projectRoot, lock) {
92
106
  (0, node_fs_1.mkdirSync)(podokitDir(projectRoot), { recursive: true });
93
107
  (0, node_fs_1.writeFileSync)(filesLockPath(projectRoot), `${JSON.stringify({ ...lock, schemaVersion: exports.LOCK_SCHEMA_VERSION }, null, 2)}\n`);
@@ -196,7 +210,7 @@ function initLockfile(projectRoot, options) {
196
210
  schemaVersion: exports.LOCK_SCHEMA_VERSION,
197
211
  podokitVersion: options.version ?? podokitVersion(),
198
212
  template: options.template,
199
- packageManager: options.packageManager,
213
+ toolchain: options.toolchain ?? (0, toolchain_1.resolveToolchain)(),
200
214
  answers: options.answers,
201
215
  modules: [],
202
216
  ownedGlobs,
package/dist/prompt.d.ts CHANGED
@@ -1,20 +1,13 @@
1
- import { type PackageManager } from "./create";
2
- export declare const PACKAGE_MANAGERS: PackageManager[];
3
- /** Asks a single question and resolves to the trimmed answer (empty if skipped). */
1
+ import { type Toolchain } from "./toolchain";
4
2
  export type Ask = (question: string) => Promise<string>;
5
3
  export interface RawCreateArgs {
6
4
  template?: string;
7
- pm?: PackageManager;
5
+ pm?: string;
6
+ runtime?: string;
8
7
  }
9
8
  export interface ResolvedCreateOptions {
10
9
  template: string;
11
- packageManager: PackageManager;
10
+ toolchain: Toolchain;
12
11
  }
13
- /**
14
- * Resolve the template and package manager for `create`.
15
- *
16
- * Precedence: an explicit flag wins; otherwise, when `interactive` is true the
17
- * user is prompted (blank answer = default); otherwise the default is used.
18
- * Kept free of I/O — the caller injects `ask` — so it is unit-testable.
19
- */
12
+ /** Resolve a Bun-only v1 project create request without runtime/package prompts. */
20
13
  export declare function resolveCreateOptions(args: RawCreateArgs, ask: Ask, interactive: boolean): Promise<ResolvedCreateOptions>;
package/dist/prompt.js CHANGED
@@ -1,19 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PACKAGE_MANAGERS = void 0;
4
3
  exports.resolveCreateOptions = resolveCreateOptions;
5
4
  const templates_1 = require("./templates");
6
- exports.PACKAGE_MANAGERS = ["npm", "pnpm", "yarn"];
7
- function isPackageManager(value) {
8
- return exports.PACKAGE_MANAGERS.includes(value);
9
- }
10
- /**
11
- * Resolve the template and package manager for `create`.
12
- *
13
- * Precedence: an explicit flag wins; otherwise, when `interactive` is true the
14
- * user is prompted (blank answer = default); otherwise the default is used.
15
- * Kept free of I/O — the caller injects `ask` — so it is unit-testable.
16
- */
5
+ const toolchain_1 = require("./toolchain");
6
+ /** Resolve a Bun-only v1 project create request without runtime/package prompts. */
17
7
  async function resolveCreateOptions(args, ask, interactive) {
18
8
  let template = args.template;
19
9
  if (!template && interactive) {
@@ -24,14 +14,7 @@ async function resolveCreateOptions(args, ask, interactive) {
24
14
  if (!(0, templates_1.isKnownTemplate)(template)) {
25
15
  throw new Error(`Unknown template "${template}". Choose one of: ${templates_1.TEMPLATE_NAMES.join(", ")}.`);
26
16
  }
27
- let pm = args.pm;
28
- if (!pm && interactive) {
29
- const answer = await ask(`Package manager (${exports.PACKAGE_MANAGERS.join(" / ")}) [npm]: `);
30
- pm = answer || undefined;
31
- }
32
- pm = pm ?? "npm";
33
- if (!isPackageManager(pm)) {
34
- throw new Error(`Invalid package manager "${pm}". Choose one of: ${exports.PACKAGE_MANAGERS.join(", ")}.`);
35
- }
36
- return { template, packageManager: pm };
17
+ if (args.pm)
18
+ throw new Error("PodoKit v1 uses Bun as its package manager; remove --pm.");
19
+ return { template, toolchain: (0, toolchain_1.resolveToolchain)(args.runtime ?? "bun") };
37
20
  }
package/dist/remove.js CHANGED
@@ -6,8 +6,10 @@ const node_path_1 = require("node:path");
6
6
  const podokit_template_engine_1 = require("@podosoft/podokit-template-engine");
7
7
  const add_1 = require("./add");
8
8
  const lockfile_1 = require("./lockfile");
9
- function readModuleManifest(moduleDir) {
10
- return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(moduleDir, "module.manifest.json"), "utf8"));
9
+ const toolchain_1 = require("./toolchain");
10
+ function readModuleManifest(moduleDir, vars) {
11
+ const source = (0, node_fs_1.readFileSync)((0, node_path_1.join)(moduleDir, "module.manifest.json"), "utf8");
12
+ return JSON.parse(vars ? (0, podokit_template_engine_1.renderTokens)(source, vars) : source);
11
13
  }
12
14
  function readJson(path) {
13
15
  return JSON.parse((0, node_fs_1.readFileSync)(path, "utf8"));
@@ -47,14 +49,18 @@ function removeModule(options) {
47
49
  if (!moduleDir) {
48
50
  throw new Error(`Cannot resolve module "${module}" to un-apply it. Is it still installed/bundled?`);
49
51
  }
50
- const targetManifest = readModuleManifest(moduleDir);
52
+ const vars = {
53
+ projectName: projectName(projectRoot),
54
+ ...(0, toolchain_1.toolchainTemplateVars)(manifest.toolchain),
55
+ };
56
+ const targetManifest = readModuleManifest(moduleDir, vars);
51
57
  // Resolve the manifests of the OTHER installed modules once — used for the
52
58
  // requires guard and to decide which files/deps/env are shared.
53
59
  const others = manifest.modules
54
60
  .filter((m) => m.name !== module)
55
61
  .map((m) => {
56
62
  const dir = (0, add_1.resolveModuleDir)(m.packageName ?? m.name, modulesDir, projectRoot);
57
- return dir ? { name: m.name, dir, manifest: readModuleManifest(dir) } : null;
63
+ return dir ? { name: m.name, dir, manifest: readModuleManifest(dir, vars) } : null;
58
64
  })
59
65
  .filter((m) => m !== null);
60
66
  // Guard: refuse if another installed module requires this one.
@@ -62,7 +68,6 @@ function removeModule(options) {
62
68
  if (dependents.length) {
63
69
  throw new Error(`Cannot remove "${module}": required by ${dependents.join(", ")}. Remove ${dependents.length > 1 ? "those" : "that"} first.`);
64
70
  }
65
- const vars = { projectName: projectName(projectRoot) };
66
71
  const sharedFiles = new Set(others.flatMap((o) => moduleFilePaths(o.dir, vars)));
67
72
  const lock = (0, lockfile_1.readFilesLock)(projectRoot);
68
73
  // 1) un-wire marker injections (idempotent; skips optional/absent).
@@ -5,17 +5,17 @@ by [PodoKit](https://github.com/podosoft-dev/podokit).
5
5
 
6
6
  ## Project overview
7
7
 
8
- A minimal npm-workspace starter. Build it up from here — add features with the
8
+ A minimal Bun 1.4 workspace starter. Build it up from here — add features with the
9
9
  `podo` CLI (`podo add <module>`; run `podo add` with no argument to list them).
10
10
 
11
11
  ## Commands
12
12
 
13
13
  ```bash
14
- npm install
15
- npm run dev # runs workspace dev scripts
16
- npm run build
17
- npm run lint # type-check
18
- npm test
14
+ {{packageManager}} install
15
+ {{rootRun}} dev # runs workspace dev scripts
16
+ {{rootRun}} build
17
+ {{rootRun}} lint # type-check
18
+ {{rootRun}} test
19
19
  ```
20
20
 
21
21
  ## Code style
@@ -28,3 +28,5 @@ npm test
28
28
  This project is managed by the `podo` CLI; `.podokit/` records how it was
29
29
  assembled (do not edit by hand). Use `podo status`/`podo diff` to see your local
30
30
  edits and `podo update` to pull in improvements without losing your work.
31
+ PodoKit v1 projects are Bun-only. Projects created with PodoKit 0.x remain on
32
+ their pinned 0.x CLI line and are not converted in place.
@@ -2,8 +2,8 @@
2
2
 
3
3
  Generated with [PodoKit](https://github.com/podosoft-dev/podokit).
4
4
 
5
- A full-stack TypeScript workspace with a NestJS API (`apps/api`) and a
6
- SvelteKit web app (`apps/web`).
5
+ A minimal Bun 1.4 TypeScript workspace. Add the `fullstack` template when you
6
+ need an Elysia API and SvelteKit web application.
7
7
 
8
8
  ## Getting started
9
9
 
@@ -1,5 +1,5 @@
1
1
  // Entry point placeholder for the {{projectName}} API.
2
- // The full NestJS starter is added by `templates/fullstack-nest-svelte`.
2
+ // The Bun + Elysia starter is provided by `templates/fullstack`.
3
3
  export function health(): { status: string } {
4
4
  return { status: "ok" };
5
5
  }
@@ -0,0 +1,3 @@
1
+ [install]
2
+ linker = "hoisted"
3
+ auto = "disable"
@@ -2,16 +2,17 @@
2
2
  "name": "{{projectName}}",
3
3
  "version": "0.0.0",
4
4
  "private": true,
5
+ "packageManager": "bun@1.4.0",
5
6
  "engines": {
6
- "node": ">=20"
7
+ "bun": "1.4.0"
7
8
  },
8
9
  "workspaces": [
9
10
  "apps/*"
10
11
  ],
11
12
  "scripts": {
12
13
  "dev": "echo \"Run 'dev' in apps/api and apps/web\" && exit 0",
13
- "build": "npm run build --workspaces --if-present",
14
- "lint": "npm run lint --workspaces --if-present",
15
- "test": "npm run test --workspaces --if-present"
14
+ "build": "bun run --workspaces --if-present build",
15
+ "lint": "bun run --workspaces --if-present lint",
16
+ "test": "bun run --workspaces --if-present test"
16
17
  }
17
18
  }
@@ -6,28 +6,32 @@ Follow it so your changes match the project's conventions.
6
6
 
7
7
  ## Project overview
8
8
 
9
- A full-stack TypeScript monorepo (npm workspaces):
9
+ A Bun 1.4 full-stack TypeScript monorepo ({{packageManager}} workspaces):
10
10
 
11
- - `apps/api` — **NestJS** backend (`{{projectName}}-api`), TypeORM + PostgreSQL, Swagger at `/api-docs`.
11
+ - `apps/api` — **Elysia** backend (`{{projectName}}-api`), Bun.SQL + PostgreSQL, merged OpenAPI at `/api-docs`.
12
12
  - `apps/web` — **SvelteKit** frontend (`{{projectName}}-web`), Tailwind v4 + shadcn-svelte + typesafe-i18n.
13
13
  - `infra/` — Docker Compose (PostgreSQL/Redis) and example k3s manifests.
14
- - `.podokit/` — PodoKit's generation lockfile (see "PodoKit tooling" below). Do not edit by hand.
14
+ - `.podokit/` — PodoKit generation metadata plus application-owned development and
15
+ deployment profiles (see "PodoKit tooling" below).
15
16
 
16
17
  ## Setup & commands
17
18
 
18
19
  ```bash
19
- npm install
20
+ {{packageManager}} install
20
21
  cp .env.example .env
21
22
  docker compose -f infra/docker/docker-compose.yml up -d # PostgreSQL (+ Redis)
22
- npm run dev # api on http://localhost:5002, web on http://localhost:5001
23
+ {{rootRun}} dev # api on http://localhost:5002, web on http://localhost:5001
23
24
  ```
24
25
 
25
26
  - **Ports: web = 5001, api = 5002.** The web app reaches the API only through its
26
27
  SvelteKit server proxy (`/api/*`), never with a direct browser `fetch`.
27
- - Build: `npm run build` · Type-check/lint: `npm run lint` · Unit tests: `npm test`
28
- - Per workspace: `npm run build -w {{projectName}}-api` / `-w {{projectName}}-web`.
29
- - DB migrations (TypeORM): `npm run migration:run -w {{projectName}}-api`.
30
- - e2e (Playwright, ships in `tests/`): `npm run test:e2e`.
28
+ - Build: `{{rootRun}} build` · Type-check/lint: `{{rootRun}} lint` · Unit tests: `{{rootRun}} test`
29
+ - Per workspace: `{{apiRun}} build` / `{{webRun}} build`.
30
+ - DB migrations (TypeORM migration layer only): `{{apiRun}} migration:run`.
31
+ - e2e (Playwright, ships in `tests/`): `{{rootRun}} test:e2e`.
32
+ - Playwright officially runs on Node, so `bunx playwright` respects its Node
33
+ shebang. Node LTS is a test-tool dependency only; API, web, worker, migrations,
34
+ builds, and unit tests run on Bun.
31
35
 
32
36
  **Always** verify a change by building the affected workspace (and `svelte-check`
33
37
  for web) before considering it done. UI changes need a Playwright test; API
@@ -37,7 +41,7 @@ changes need an e2e/unit test.
37
41
 
38
42
  ### TypeScript (both apps)
39
43
  - `strict` mode. **No `any`** — use `unknown` + narrowing. **No `@ts-ignore`/`@ts-expect-error`** and no `eslint-disable`.
40
- - Explicit function return types. DTOs use `class-validator` decorators.
44
+ - Explicit function return types. Validate HTTP inputs with Elysia `t` schemas.
41
45
  - Keep `noUnusedLocals`, `noUnusedParameters`, `noImplicitReturns`, `noUncheckedIndexedAccess`.
42
46
 
43
47
  ### Svelte 5 (web)
@@ -59,12 +63,15 @@ changes need an e2e/unit test.
59
63
  This project is managed by the `podo` CLI. Files have an ownership tier recorded
60
64
  in `.podokit/files.lock` — respect it:
61
65
 
62
- - **owned** (your code: `apps/web/src/routes/**`, your components/services, `apps/api/src/app.extensions.ts`, and this `AGENTS.md`) — edit freely. To add or override Nest providers/modules, use `app.extensions.ts` (spread into `AppModule` after the module-wired providers, so a same-token override wins) rather than editing `app.module.ts`.
63
- - **assembled** (e.g. `apps/api/src/app.module.ts`, `auth.ts`) — contain `// podokit:begin:… / …:end` fenced regions that the toolkit recomputes. Edit outside the fences only; **never hand-edit inside the fences**.
66
+ - **owned** (your code: `apps/web/src/routes/**`, your components/services, `apps/api/src/app.extensions.ts`, and this `AGENTS.md`) — edit freely. Add application-owned services or module descriptors through `app.extensions.ts` instead of changing toolkit registrations.
67
+ - **assembled** (e.g. `apps/api/src/app.ts`, `auth.ts`) — contain `// podokit:begin:… / …:end` fenced regions that the toolkit recomputes. Edit outside the fences only; **never hand-edit inside the fences**.
64
68
  - **managed** (bootstrap/config like `main.ts`) — the toolkit may update these; avoid gratuitous edits.
65
69
 
66
70
  Useful commands:
67
71
 
72
+ - `podo dev watch|up|ps|logs|exec|down` — run container development through the
73
+ shared loopback gateway. `.podokit/dev.json` owns the local/public hosts and the
74
+ exact API WebSocket allowlist; never use a prefix or wildcard for that allowlist.
68
75
  - `podo add <module>` — add a feature (auth, admin-dashboard, redis, bullmq, …). It wires itself into the app; run `podo add` with no argument to list modules.
69
76
  - `podo remove <module>` — un-apply a module (inverse of add; refuses if another module needs it, keeps files you edited).
70
77
  - `podo status` / `podo diff` — see your local edits vs. what PodoKit generated.
@@ -0,0 +1,31 @@
1
+ # Development image for the Bun 1.4.0 PodoKit monorepo.
2
+ FROM oven/bun:1.4.0-alpine AS manifests
3
+ WORKDIR /src
4
+ COPY . .
5
+ RUN mkdir -p /app \
6
+ && cp package.json bun.lock bunfig.toml /app/ \
7
+ && find . -name package.json -not -path "*/node_modules/*" \
8
+ -exec sh -c 'mkdir -p "/app/$(dirname "$1")" && cp "$1" "/app/$1"' _ {} \;
9
+
10
+ FROM oven/bun:1.4.0-alpine
11
+
12
+ RUN apk add --no-cache git python3 make g++ ca-certificates
13
+
14
+ WORKDIR /app
15
+ COPY --from=manifests /app ./
16
+ ARG PODOKIT_NPM_REGISTRY=""
17
+ RUN if [ -n "$PODOKIT_NPM_REGISTRY" ]; then \
18
+ bun install --frozen-lockfile --registry "$PODOKIT_NPM_REGISTRY"; \
19
+ else \
20
+ bun install --frozen-lockfile; \
21
+ fi
22
+
23
+ COPY . .
24
+ RUN if [ -d packages ]; then \
25
+ for manifest in packages/*/package.json; do \
26
+ [ -e "$manifest" ] || continue; \
27
+ bun run --cwd "$(dirname "$manifest")" --if-present build; \
28
+ done; \
29
+ fi
30
+
31
+ EXPOSE 5001 5002
@@ -2,7 +2,7 @@
2
2
 
3
3
  Full-stack TypeScript starter generated with [PodoKit](https://github.com/podosoft-dev/podokit).
4
4
 
5
- - `apps/api` — NestJS API: schema-validated env (zod), `/health` + `/health/ready`, Swagger docs at `/api-docs`, a standard error envelope, and TypeORM + PostgreSQL wired up (no domain entities yet — add your own).
5
+ - `apps/api` — Bun 1.4 + Elysia API: schema-validated env, `/health` + `/health/ready`, merged OpenAPI at `/api-docs`, a standard error envelope, and Bun.SQL + PostgreSQL. TypeORM is used only to execute migrations.
6
6
  - `apps/web` — SvelteKit app (TailwindCSS v4, shadcn-svelte, typesafe-i18n) that talks to the API through a server-side proxy.
7
7
  - `infra/` — Docker Compose (PostgreSQL, Redis) and k3s manifests.
8
8
 
@@ -13,7 +13,7 @@ Full-stack TypeScript starter generated with [PodoKit](https://github.com/podoso
13
13
  ```bash
14
14
  {{packageManager}} install
15
15
  cp .env.example .env
16
- npx @podosoft/podokit dev watch
16
+ {{packageExecutor}} @podosoft/podokit dev watch
17
17
  ```
18
18
 
19
19
  Open the URL printed by the command; a new project defaults to
@@ -23,15 +23,20 @@ one user-level Traefik gateway on `127.0.0.1:80`; additional projects reuse it a
23
23
  route by that hostname. Even a single app uses
24
24
  the same topology, with one route and no project-specific host port.
25
25
 
26
+ When the API exposes WebSocket endpoints, add their exact paths to
27
+ `.podokit/dev.json` under `webSocketPaths`. The shared gateway sends only those paths
28
+ directly to the API and leaves every other path on the web app. Add `publicUrl` to the
29
+ same file when an HTTPS tunnel preserves its public `Host` header.
30
+
26
31
  Run lifecycle and container commands from a second terminal:
27
32
 
28
33
  ```bash
29
- npx @podosoft/podokit dev url
30
- npx @podosoft/podokit dev up -d # detached stack without source watching
31
- npx @podosoft/podokit dev ps
32
- npx @podosoft/podokit dev logs
33
- npx @podosoft/podokit dev exec api npm run migration:run -w {{projectName}}-api
34
- npx @podosoft/podokit dev down
34
+ {{packageExecutor}} @podosoft/podokit dev url
35
+ {{packageExecutor}} @podosoft/podokit dev up -d # detached stack without source watching
36
+ {{packageExecutor}} @podosoft/podokit dev ps
37
+ {{packageExecutor}} @podosoft/podokit dev logs
38
+ {{packageExecutor}} @podosoft/podokit dev exec api {{apiRun}} migration:run
39
+ {{packageExecutor}} @podosoft/podokit dev down
35
40
  ```
36
41
 
37
42
  `dev watch` reads `.podokit/manifest.json` and automatically activates `cache`,
@@ -41,7 +46,7 @@ Watch attached.
41
46
  You can still activate an additional Compose profile explicitly:
42
47
 
43
48
  ```bash
44
- npx @podosoft/podokit dev watch --profile dev
49
+ {{packageExecutor}} @podosoft/podokit dev watch --profile dev
45
50
  ```
46
51
 
47
52
  Explicit profile flags are preserved for other lifecycle commands. `dev down`
@@ -66,17 +71,15 @@ docker compose -f infra/docker/docker-compose.yml up -d
66
71
 
67
72
  ## Database & migrations
68
73
 
69
- The API uses TypeORM with PostgreSQL and ships no domain entities yet. Add an
70
- entity under `apps/api/src`, register it in `src/database/data-source.ts`, then
71
- generate and run a migration:
74
+ The API uses Bun.SQL for request-time queries and TypeORM only as a migration
75
+ runner. Add a numbered migration under `apps/api/src/migrations`, then run it:
72
76
 
73
77
  ```bash
74
- {{packageManager}} run migration:generate -w {{projectName}}-api -- src/migrations/Init
75
- {{packageManager}} run migration:run -w {{projectName}}-api
78
+ {{apiRun}} migration:run
76
79
  ```
77
80
 
78
81
  Want a worked example? Generate the `todo` template instead:
79
- `npx @podosoft/podokit create my-app --template todo`.
82
+ `{{packageExecutor}} @podosoft/podokit create my-app --template todo`.
80
83
 
81
84
  For multi-project routing, container profiles, migrations, and OAuth over a
82
85
  stable HTTPS tunnel, see the PodoKit [development guide](https://github.com/podosoft-dev/podokit/blob/main/docs/development.md).
@@ -88,9 +91,9 @@ route every public path through the web proxy. For a managed release on an
88
91
  existing cluster, initialize an application-owned profile:
89
92
 
90
93
  ```bash
91
- npx @podosoft/podokit deploy init --profile production --context production --host app.example.com
92
- npx @podosoft/podokit deploy doctor --profile production
93
- npx @podosoft/podokit deploy plan --profile production --release v1.2.3
94
+ {{packageExecutor}} @podosoft/podokit deploy init --profile production --context production --host app.example.com
95
+ {{packageExecutor}} @podosoft/podokit deploy doctor --profile production
96
+ {{packageExecutor}} @podosoft/podokit deploy plan --profile production --release v1.2.3
94
97
  ```
95
98
 
96
99
  Use existing Kubernetes Secrets and never commit their values. See the PodoKit
@@ -103,3 +106,17 @@ lockfile and all workspace package manifests:
103
106
  docker build -f apps/api/Dockerfile -t {{projectName}}-api .
104
107
  docker build -f apps/web/Dockerfile -t {{projectName}}-web .
105
108
  ```
109
+
110
+ The generated Kubernetes deployment trusts the ingress-provided
111
+ `x-forwarded-proto` and `x-forwarded-host` headers so the web server can enforce
112
+ same-origin form submissions. If the web container is served directly over plain
113
+ HTTP, fix its public origin at build time instead:
114
+
115
+ ```bash
116
+ docker build --build-arg PODOKIT_BUILD_ORIGIN=https://example.com -f apps/web/Dockerfile -t {{projectName}}-web .
117
+ ```
118
+
119
+ For a Docker Compose deployment behind a trusted reverse proxy, set
120
+ `PROTOCOL_HEADER=x-forwarded-proto` and `HOST_HEADER=x-forwarded-host` in the
121
+ deployment profile runtime configuration. Never trust client-controlled forwarded
122
+ headers on a directly exposed container.
@@ -0,0 +1,47 @@
1
+ # syntax=docker/dockerfile:1
2
+
3
+ FROM oven/bun:1.4.0-alpine AS manifests
4
+ WORKDIR /src
5
+ COPY . .
6
+ RUN mkdir -p /app \
7
+ && cp package.json bun.lock bunfig.toml /app/ \
8
+ && find . -name package.json -not -path "*/node_modules/*" \
9
+ -exec sh -c 'mkdir -p "/app/$(dirname "$1")" && cp "$1" "/app/$1"' _ {} \;
10
+
11
+ FROM oven/bun:1.4.0-alpine AS deps
12
+ WORKDIR /app
13
+ COPY --from=manifests /app ./
14
+ RUN bun ci
15
+
16
+ FROM oven/bun:1.4.0-alpine AS prod-deps
17
+ WORKDIR /app
18
+ COPY --from=manifests /app ./
19
+ RUN bun install --production --frozen-lockfile --filter './apps/api'
20
+
21
+ FROM oven/bun:1.4.0-alpine AS build
22
+ WORKDIR /app
23
+ COPY --from=deps /app ./
24
+ COPY . .
25
+ RUN if [ -d packages ]; then \
26
+ for manifest in packages/*/package.json; do \
27
+ [ -e "$manifest" ] || continue; \
28
+ bun run --cwd "$(dirname "$manifest")" --if-present build; \
29
+ done; \
30
+ fi
31
+ RUN bun run --cwd apps/api build
32
+ RUN mkdir -p /app/packages
33
+
34
+ FROM oven/bun:1.4.0-alpine AS runtime
35
+ WORKDIR /app
36
+ ENV NODE_ENV=production
37
+ COPY --from=prod-deps /app/node_modules ./node_modules
38
+ COPY --from=manifests /app/apps/api ./apps/api
39
+ COPY --from=build /app/packages ./packages
40
+ COPY --from=build /app/apps/api/dist ./apps/api/dist
41
+ COPY --from=build /app/apps/api/scripts ./apps/api/scripts
42
+ WORKDIR /app/apps/api
43
+ USER bun
44
+ EXPOSE 3000
45
+ HEALTHCHECK --interval=10s --timeout=5s --start-period=30s --retries=6 \
46
+ CMD bun -e "fetch('http://127.0.0.1:' + (process.env.PORT ?? '3000') + '/health/ready').then((r) => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"
47
+ CMD ["bun", "dist/main.js"]
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "{{projectName}}-api",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "bun --watch src/main.ts",
7
+ "build": "bun scripts/build.mjs",
8
+ "start": "bun dist/main.js",
9
+ "lint": "bunx tsc -p tsconfig.json --noEmit",
10
+ "test": "bun test src",
11
+ "contract": "bun scripts/verify-api-contract.ts",
12
+ "migrate:all": "bun dist/database/migrate.js",
13
+ "typeorm": "bunx typeorm-ts-node-commonjs -d src/database/data-source.ts",
14
+ "migration:run": "bun run typeorm -- migration:run",
15
+ "migration:revert": "bun run typeorm -- migration:revert",
16
+ "migration:generate": "bun run typeorm -- migration:generate"
17
+ },
18
+ "dependencies": {
19
+ "@podosoft/podokit-contracts": "^0.4.0",
20
+ "@elysia/cors": "^1.4.2",
21
+ "@elysia/openapi": "^1.4.15",
22
+ "dotenv": "^16.4.5",
23
+ "elysia": "^1.4.29",
24
+ "pg": "^8.12.0",
25
+ "pino": "^9.6.0",
26
+ "typeorm": "^0.3.20",
27
+ "zod": "^3.23.8"
28
+ },
29
+ "devDependencies": {
30
+ "@types/bun": "^1.3.9",
31
+ "@types/node": "^20.17.0",
32
+ "ts-node": "^10.9.2",
33
+ "typescript": "^6.0.3"
34
+ }
35
+ }
@@ -0,0 +1,38 @@
1
+ import { existsSync, readdirSync } from "node:fs";
2
+
3
+ const targets = [
4
+ { entrypoint: "src/main.ts", outdir: "dist" },
5
+ { entrypoint: "src/database/migrate.ts", outdir: "dist/database" },
6
+ { entrypoint: "src/migrate.ts", outdir: "dist" },
7
+ { entrypoint: "src/main-worker.ts", outdir: "dist" },
8
+ ].filter((target) => existsSync(target.entrypoint));
9
+
10
+ for (const target of targets) {
11
+ const result = await Bun.build({
12
+ entrypoints: [target.entrypoint],
13
+ outdir: target.outdir,
14
+ target: "bun",
15
+ });
16
+ if (!result.success) {
17
+ for (const log of result.logs) process.stderr.write(`${log}\n`);
18
+ process.exit(1);
19
+ }
20
+ }
21
+
22
+ if (existsSync("src/migrations")) {
23
+ const migrations = readdirSync("src/migrations")
24
+ .filter((file) => /^\d+-.+\.ts$/.test(file))
25
+ .map((file) => `src/migrations/${file}`);
26
+ if (migrations.length > 0) {
27
+ const result = await Bun.build({
28
+ entrypoints: migrations,
29
+ outdir: "dist/migrations",
30
+ target: "bun",
31
+ external: ["typeorm"],
32
+ });
33
+ if (!result.success) {
34
+ for (const log of result.logs) process.stderr.write(`${log}\n`);
35
+ process.exit(1);
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,37 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { createApp } from "../src/app";
4
+ import { validateEnv } from "../src/config/env.validation";
5
+ import {
6
+ assertApiContract,
7
+ assertConsistentRouteParameters,
8
+ documentedApiRoutes,
9
+ } from "../src/core/api-contract";
10
+ import { createCoreServices } from "../src/core/services";
11
+
12
+ interface ProjectManifest {
13
+ template: string;
14
+ modules: Array<{ name: string }>;
15
+ }
16
+
17
+ const manifest = JSON.parse(
18
+ readFileSync(resolve(process.cwd(), "../../.podokit/manifest.json"), "utf8"),
19
+ ) as ProjectManifest;
20
+ const env = validateEnv(process.env);
21
+ const services = createCoreServices(env);
22
+ const app = createApp({ env, services });
23
+ try {
24
+ assertConsistentRouteParameters(app.routes);
25
+ const response = await app.handle(new Request("http://localhost/api-docs-json"));
26
+ if (!response.ok) {
27
+ throw new Error(`OpenAPI request failed (${response.status}): ${await response.text()}`);
28
+ }
29
+ const document: unknown = await response.json();
30
+ const modules = manifest.modules.map((module) => module.name);
31
+ assertApiContract(document, manifest.template, modules);
32
+ process.stdout.write(
33
+ `Verified ${documentedApiRoutes(document).size} documented API operations for ${manifest.template}.\n`,
34
+ );
35
+ } finally {
36
+ await services.close();
37
+ }
@@ -0,0 +1,10 @@
1
+ import type { PodokitModule, ServiceRegistry } from "./core/services";
2
+
3
+ // This owned extension slot is never overwritten by `podo update`. Register
4
+ // application services during startup and add Elysia plugins without editing
5
+ // managed PodoKit files. The registry is frozen before the server starts, so
6
+ // service resolution never occurs on the request hot path.
7
+
8
+ export function configureServices(_services: ServiceRegistry): void {}
9
+
10
+ export const extensionModules: PodokitModule[] = [];