@voltro/cli 0.1.0

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 (626) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/LICENSE +57 -0
  3. package/README.md +26 -0
  4. package/SECURITY.md +56 -0
  5. package/THIRD-PARTY-NOTICES.md +20236 -0
  6. package/bin/voltro.mjs +43 -0
  7. package/dist/bin.d.ts +1 -0
  8. package/dist/bin.js +9 -0
  9. package/dist/commands-CfPH2Wf4.js +18061 -0
  10. package/dist/frameworkInspectState-CX2250XB.js +86 -0
  11. package/dist/index.d.ts +48 -0
  12. package/dist/index.js +5 -0
  13. package/dist/inspectState.d.ts +116 -0
  14. package/dist/inspectState.js +2 -0
  15. package/dist/startup.d.ts +26 -0
  16. package/dist/startup.js +2 -0
  17. package/dist/startupRunner-CRhuUl91.js +71 -0
  18. package/package.json +88 -0
  19. package/templates/AGENTS.core.md +258 -0
  20. package/templates/AGENTS.md +351 -0
  21. package/templates/agent-docs/_index.md +93 -0
  22. package/templates/agent-docs/_manifest.json +655 -0
  23. package/templates/agent-docs/ai.md +1845 -0
  24. package/templates/agent-docs/authentication.md +1788 -0
  25. package/templates/agent-docs/caching.md +624 -0
  26. package/templates/agent-docs/cli.md +1650 -0
  27. package/templates/agent-docs/configuration.md +295 -0
  28. package/templates/agent-docs/data.md +2172 -0
  29. package/templates/agent-docs/database/advancedqueries.md +1583 -0
  30. package/templates/agent-docs/database/columntypes.md +1200 -0
  31. package/templates/agent-docs/database/hosting.md +881 -0
  32. package/templates/agent-docs/database/migrations.md +2938 -0
  33. package/templates/agent-docs/database/misc.md +270 -0
  34. package/templates/agent-docs/database/overview.md +108 -0
  35. package/templates/agent-docs/database/querying.md +1622 -0
  36. package/templates/agent-docs/database/scaling.md +331 -0
  37. package/templates/agent-docs/database/schema.md +1458 -0
  38. package/templates/agent-docs/database/seedsdialects.md +1235 -0
  39. package/templates/agent-docs/database/transactions.md +285 -0
  40. package/templates/agent-docs/deployment.md +999 -0
  41. package/templates/agent-docs/internationalization.md +359 -0
  42. package/templates/agent-docs/introduction.md +438 -0
  43. package/templates/agent-docs/multi-tenancy.md +610 -0
  44. package/templates/agent-docs/observability.md +350 -0
  45. package/templates/agent-docs/plugins.md +1273 -0
  46. package/templates/agent-docs/reference.md +978 -0
  47. package/templates/agent-docs/routing.md +1553 -0
  48. package/templates/agent-docs/scheduling.md +666 -0
  49. package/templates/agent-docs/schema-driven-ui.md +607 -0
  50. package/templates/agent-docs/security.md +42 -0
  51. package/templates/agent-docs/templates/apibackends.md +3214 -0
  52. package/templates/agent-docs/templates/appshells.md +2062 -0
  53. package/templates/agent-docs/templates/custom.md +128 -0
  54. package/templates/agent-docs/templates/overview.md +122 -0
  55. package/templates/agent-docs/templates/serverless.md +315 -0
  56. package/templates/agent-docs/testing.md +376 -0
  57. package/templates/agent-docs/workflows.md +1351 -0
  58. package/templates/apps/api-ai/README.md +105 -0
  59. package/templates/apps/api-ai/actions/summarize.action.server.tsx +32 -0
  60. package/templates/apps/api-ai/actions/summarize.action.ts +33 -0
  61. package/templates/apps/api-ai/agents/support.agent.server.tsx +31 -0
  62. package/templates/apps/api-ai/agents/support.agent.tsx +27 -0
  63. package/templates/apps/api-ai/app.config.ts +57 -0
  64. package/templates/apps/api-ai/database/schema.ts +67 -0
  65. package/templates/apps/api-ai/package.json +27 -0
  66. package/templates/apps/api-ai/seeds/docs.seed.ts +67 -0
  67. package/templates/apps/api-ai/template.json +6 -0
  68. package/templates/apps/api-ai/tests/summarize.test.ts +50 -0
  69. package/templates/apps/api-ai/tools/searchDocs.tool.tsx +60 -0
  70. package/templates/apps/api-ai/tsconfig.json +5 -0
  71. package/templates/apps/api-auth/.env +17 -0
  72. package/templates/apps/api-auth/README.md +109 -0
  73. package/templates/apps/api-auth/actions/me.action.server.ts +20 -0
  74. package/templates/apps/api-auth/actions/me.action.ts +19 -0
  75. package/templates/apps/api-auth/app.config.ts +59 -0
  76. package/templates/apps/api-auth/database/schema.ts +26 -0
  77. package/templates/apps/api-auth/package.json +28 -0
  78. package/templates/apps/api-auth/template.json +6 -0
  79. package/templates/apps/api-auth/tests/me.test.ts +37 -0
  80. package/templates/apps/api-auth/tsconfig.json +5 -0
  81. package/templates/apps/api-backend/README.md +25 -0
  82. package/templates/apps/api-backend/app.config.ts +39 -0
  83. package/templates/apps/api-backend/database/schema.ts +57 -0
  84. package/templates/apps/api-backend/mutations/notes.create.mutation.server.ts +19 -0
  85. package/templates/apps/api-backend/mutations/notes.create.mutation.ts +37 -0
  86. package/templates/apps/api-backend/package.json +28 -0
  87. package/templates/apps/api-backend/queries/notes.query.server.ts +14 -0
  88. package/templates/apps/api-backend/queries/notes.query.ts +20 -0
  89. package/templates/apps/api-backend/template.json +6 -0
  90. package/templates/apps/api-backend/tests/notes.create.test.ts +50 -0
  91. package/templates/apps/api-backend/tsconfig.json +5 -0
  92. package/templates/apps/api-backend-deactivation/README.md +49 -0
  93. package/templates/apps/api-backend-deactivation/actions/users.get.action.server.ts +17 -0
  94. package/templates/apps/api-backend-deactivation/actions/users.get.action.ts +18 -0
  95. package/templates/apps/api-backend-deactivation/app.config.ts +20 -0
  96. package/templates/apps/api-backend-deactivation/database/schema.ts +41 -0
  97. package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.server.ts +6 -0
  98. package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.ts +16 -0
  99. package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.server.ts +10 -0
  100. package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.ts +19 -0
  101. package/templates/apps/api-backend-deactivation/package.json +28 -0
  102. package/templates/apps/api-backend-deactivation/template.json +6 -0
  103. package/templates/apps/api-backend-deactivation/tests/users.deactivate.test.ts +47 -0
  104. package/templates/apps/api-backend-deactivation/tsconfig.json +5 -0
  105. package/templates/apps/api-backend-mail/README.md +39 -0
  106. package/templates/apps/api-backend-mail/actions/sendWelcome.action.server.ts +15 -0
  107. package/templates/apps/api-backend-mail/actions/sendWelcome.action.ts +21 -0
  108. package/templates/apps/api-backend-mail/app.config.ts +34 -0
  109. package/templates/apps/api-backend-mail/database/schema.ts +57 -0
  110. package/templates/apps/api-backend-mail/emails/welcome.email.tsx +106 -0
  111. package/templates/apps/api-backend-mail/mutations/notes.create.mutation.server.ts +19 -0
  112. package/templates/apps/api-backend-mail/mutations/notes.create.mutation.ts +37 -0
  113. package/templates/apps/api-backend-mail/package.json +30 -0
  114. package/templates/apps/api-backend-mail/queries/notes.query.server.ts +14 -0
  115. package/templates/apps/api-backend-mail/queries/notes.query.ts +20 -0
  116. package/templates/apps/api-backend-mail/template.json +6 -0
  117. package/templates/apps/api-backend-mail/tests/notes.create.test.ts +50 -0
  118. package/templates/apps/api-backend-mail/tsconfig.json +5 -0
  119. package/templates/apps/api-backend-mariadb/.env.example +35 -0
  120. package/templates/apps/api-backend-mariadb/README.md +31 -0
  121. package/templates/apps/api-backend-mariadb/app.config.ts +68 -0
  122. package/templates/apps/api-backend-mariadb/database/schema.ts +57 -0
  123. package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.server.ts +19 -0
  124. package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.ts +37 -0
  125. package/templates/apps/api-backend-mariadb/package.json +30 -0
  126. package/templates/apps/api-backend-mariadb/queries/notes.query.server.ts +14 -0
  127. package/templates/apps/api-backend-mariadb/queries/notes.query.ts +20 -0
  128. package/templates/apps/api-backend-mariadb/template.json +6 -0
  129. package/templates/apps/api-backend-mariadb/tests/notes.create.test.ts +50 -0
  130. package/templates/apps/api-backend-mariadb/tsconfig.json +5 -0
  131. package/templates/apps/api-backend-storage/README.md +86 -0
  132. package/templates/apps/api-backend-storage/actions/uploadAvatar.action.server.ts +21 -0
  133. package/templates/apps/api-backend-storage/actions/uploadAvatar.action.ts +21 -0
  134. package/templates/apps/api-backend-storage/actions/uploadDocument.action.server.ts +21 -0
  135. package/templates/apps/api-backend-storage/actions/uploadDocument.action.ts +20 -0
  136. package/templates/apps/api-backend-storage/app.config.ts +38 -0
  137. package/templates/apps/api-backend-storage/database/schema.ts +57 -0
  138. package/templates/apps/api-backend-storage/mutations/notes.create.mutation.server.ts +19 -0
  139. package/templates/apps/api-backend-storage/mutations/notes.create.mutation.ts +37 -0
  140. package/templates/apps/api-backend-storage/package.json +27 -0
  141. package/templates/apps/api-backend-storage/queries/notes.query.server.ts +14 -0
  142. package/templates/apps/api-backend-storage/queries/notes.query.ts +20 -0
  143. package/templates/apps/api-backend-storage/template.json +6 -0
  144. package/templates/apps/api-backend-storage/tests/notes.create.test.ts +50 -0
  145. package/templates/apps/api-backend-storage/tsconfig.json +5 -0
  146. package/templates/apps/api-data-advanced/.env +17 -0
  147. package/templates/apps/api-data-advanced/README.md +88 -0
  148. package/templates/apps/api-data-advanced/app.config.ts +56 -0
  149. package/templates/apps/api-data-advanced/database/actors.entity.ts +14 -0
  150. package/templates/apps/api-data-advanced/database/authors.entity.ts +30 -0
  151. package/templates/apps/api-data-advanced/database/authors.relations.ts +15 -0
  152. package/templates/apps/api-data-advanced/database/books.entity.ts +59 -0
  153. package/templates/apps/api-data-advanced/database/books.relations.ts +10 -0
  154. package/templates/apps/api-data-advanced/database/index.ts +23 -0
  155. package/templates/apps/api-data-advanced/database/tenants.entity.ts +11 -0
  156. package/templates/apps/api-data-advanced/package.json +28 -0
  157. package/templates/apps/api-data-advanced/queries/authors.withBooks.query.server.ts +18 -0
  158. package/templates/apps/api-data-advanced/queries/authors.withBooks.query.ts +40 -0
  159. package/templates/apps/api-data-advanced/queries/books.search.query.server.ts +17 -0
  160. package/templates/apps/api-data-advanced/queries/books.search.query.ts +39 -0
  161. package/templates/apps/api-data-advanced/seeds/catalog.seed.ts +101 -0
  162. package/templates/apps/api-data-advanced/template.json +6 -0
  163. package/templates/apps/api-data-advanced/tests/queries.test.ts +124 -0
  164. package/templates/apps/api-data-advanced/tsconfig.json +5 -0
  165. package/templates/apps/api-durable/README.md +81 -0
  166. package/templates/apps/api-durable/aggregates/orderStats.aggregate.ts +49 -0
  167. package/templates/apps/api-durable/app.config.ts +41 -0
  168. package/templates/apps/api-durable/database/schema.ts +65 -0
  169. package/templates/apps/api-durable/mutations/orders.approve.mutation.server.ts +43 -0
  170. package/templates/apps/api-durable/mutations/orders.approve.mutation.ts +23 -0
  171. package/templates/apps/api-durable/mutations/orders.place.mutation.server.ts +45 -0
  172. package/templates/apps/api-durable/mutations/orders.place.mutation.ts +40 -0
  173. package/templates/apps/api-durable/package.json +28 -0
  174. package/templates/apps/api-durable/schedules/nightlyReport.cron.tsx +37 -0
  175. package/templates/apps/api-durable/startup/warm.startup.tsx +33 -0
  176. package/templates/apps/api-durable/subscribers/orderChanges.subscribe.ts +27 -0
  177. package/templates/apps/api-durable/template.json +6 -0
  178. package/templates/apps/api-durable/tests/orders.place.test.ts +91 -0
  179. package/templates/apps/api-durable/triggers/order.placed.trigger.tsx +21 -0
  180. package/templates/apps/api-durable/tsconfig.json +5 -0
  181. package/templates/apps/api-durable/workflows/order.fulfill.workflow.server.tsx +103 -0
  182. package/templates/apps/api-durable/workflows/order.fulfill.workflow.tsx +25 -0
  183. package/templates/apps/api-feature-flags/README.md +63 -0
  184. package/templates/apps/api-feature-flags/actions/notes.export.action.server.ts +11 -0
  185. package/templates/apps/api-feature-flags/actions/notes.export.action.ts +18 -0
  186. package/templates/apps/api-feature-flags/app.config.ts +41 -0
  187. package/templates/apps/api-feature-flags/database/schema.ts +37 -0
  188. package/templates/apps/api-feature-flags/mutations/notes.create.mutation.server.ts +29 -0
  189. package/templates/apps/api-feature-flags/mutations/notes.create.mutation.ts +28 -0
  190. package/templates/apps/api-feature-flags/package.json +29 -0
  191. package/templates/apps/api-feature-flags/template.json +6 -0
  192. package/templates/apps/api-feature-flags/tests/notes.create.test.ts +67 -0
  193. package/templates/apps/api-feature-flags/tsconfig.json +5 -0
  194. package/templates/apps/api-governance/.env +4 -0
  195. package/templates/apps/api-governance/README.md +61 -0
  196. package/templates/apps/api-governance/actions/profiles.get.action.server.ts +17 -0
  197. package/templates/apps/api-governance/actions/profiles.get.action.ts +17 -0
  198. package/templates/apps/api-governance/app.config.ts +35 -0
  199. package/templates/apps/api-governance/database/schema.ts +41 -0
  200. package/templates/apps/api-governance/mutations/profiles.create.mutation.server.ts +17 -0
  201. package/templates/apps/api-governance/mutations/profiles.create.mutation.ts +21 -0
  202. package/templates/apps/api-governance/package.json +29 -0
  203. package/templates/apps/api-governance/template.json +6 -0
  204. package/templates/apps/api-governance/tests/profiles.create.test.ts +59 -0
  205. package/templates/apps/api-governance/tsconfig.json +5 -0
  206. package/templates/apps/api-kv/README.md +100 -0
  207. package/templates/apps/api-kv/actions/sync.pull.action.server.ts +75 -0
  208. package/templates/apps/api-kv/actions/sync.pull.action.ts +25 -0
  209. package/templates/apps/api-kv/actions/sync.reset.action.server.ts +25 -0
  210. package/templates/apps/api-kv/actions/sync.reset.action.ts +22 -0
  211. package/templates/apps/api-kv/actions/sync.status.action.server.ts +28 -0
  212. package/templates/apps/api-kv/actions/sync.status.action.ts +17 -0
  213. package/templates/apps/api-kv/app.config.ts +48 -0
  214. package/templates/apps/api-kv/database/schema.ts +62 -0
  215. package/templates/apps/api-kv/package.json +28 -0
  216. package/templates/apps/api-kv/queries/events.list.query.server.ts +14 -0
  217. package/templates/apps/api-kv/queries/events.list.query.ts +23 -0
  218. package/templates/apps/api-kv/template.json +6 -0
  219. package/templates/apps/api-kv/tests/sync.test.ts +103 -0
  220. package/templates/apps/api-kv/tsconfig.json +5 -0
  221. package/templates/apps/api-moderation/README.md +46 -0
  222. package/templates/apps/api-moderation/app.config.ts +33 -0
  223. package/templates/apps/api-moderation/database/schema.ts +45 -0
  224. package/templates/apps/api-moderation/mutations/comments.create.mutation.server.ts +8 -0
  225. package/templates/apps/api-moderation/mutations/comments.create.mutation.ts +20 -0
  226. package/templates/apps/api-moderation/mutations/posts.create.mutation.server.ts +9 -0
  227. package/templates/apps/api-moderation/mutations/posts.create.mutation.ts +25 -0
  228. package/templates/apps/api-moderation/package.json +29 -0
  229. package/templates/apps/api-moderation/template.json +6 -0
  230. package/templates/apps/api-moderation/tests/posts.create.test.ts +79 -0
  231. package/templates/apps/api-moderation/tsconfig.json +5 -0
  232. package/templates/apps/api-observability/README.md +106 -0
  233. package/templates/apps/api-observability/app.config.ts +32 -0
  234. package/templates/apps/api-observability/database/schema.ts +38 -0
  235. package/templates/apps/api-observability/mutations/notes.create.mutation.server.ts +33 -0
  236. package/templates/apps/api-observability/mutations/notes.create.mutation.ts +15 -0
  237. package/templates/apps/api-observability/package.json +29 -0
  238. package/templates/apps/api-observability/queries/notes.list.query.server.ts +7 -0
  239. package/templates/apps/api-observability/queries/notes.list.query.ts +14 -0
  240. package/templates/apps/api-observability/template.json +6 -0
  241. package/templates/apps/api-observability/tests/notes.create.test.ts +36 -0
  242. package/templates/apps/api-observability/tsconfig.json +5 -0
  243. package/templates/apps/api-ratelimit/README.md +49 -0
  244. package/templates/apps/api-ratelimit/app.config.ts +42 -0
  245. package/templates/apps/api-ratelimit/database/schema.ts +37 -0
  246. package/templates/apps/api-ratelimit/mutations/notes.create.mutation.server.ts +16 -0
  247. package/templates/apps/api-ratelimit/mutations/notes.create.mutation.ts +34 -0
  248. package/templates/apps/api-ratelimit/package.json +29 -0
  249. package/templates/apps/api-ratelimit/template.json +6 -0
  250. package/templates/apps/api-ratelimit/tests/notes.create.test.ts +69 -0
  251. package/templates/apps/api-ratelimit/tsconfig.json +5 -0
  252. package/templates/apps/api-rbac/README.md +59 -0
  253. package/templates/apps/api-rbac/app.config.ts +48 -0
  254. package/templates/apps/api-rbac/database/schema.ts +37 -0
  255. package/templates/apps/api-rbac/mutations/notes.create.mutation.server.ts +22 -0
  256. package/templates/apps/api-rbac/mutations/notes.create.mutation.ts +26 -0
  257. package/templates/apps/api-rbac/package.json +29 -0
  258. package/templates/apps/api-rbac/template.json +6 -0
  259. package/templates/apps/api-rbac/tests/notes.create.test.ts +80 -0
  260. package/templates/apps/api-rbac/tsconfig.json +5 -0
  261. package/templates/apps/api-rest/README.md +85 -0
  262. package/templates/apps/api-rest/app.config.ts +70 -0
  263. package/templates/apps/api-rest/database/schema.ts +52 -0
  264. package/templates/apps/api-rest/lib/product.ts +30 -0
  265. package/templates/apps/api-rest/package.json +27 -0
  266. package/templates/apps/api-rest/routes/v1/products.create.route.tsx +45 -0
  267. package/templates/apps/api-rest/routes/v1/products.delete.route.tsx +25 -0
  268. package/templates/apps/api-rest/routes/v1/products.get.route.tsx +29 -0
  269. package/templates/apps/api-rest/routes/v1/products.list.route.tsx +43 -0
  270. package/templates/apps/api-rest/template.json +6 -0
  271. package/templates/apps/api-rest/tests/products.create.test.ts +53 -0
  272. package/templates/apps/api-rest/tsconfig.json +5 -0
  273. package/templates/apps/api-saas/README.md +106 -0
  274. package/templates/apps/api-saas/app.config.ts +51 -0
  275. package/templates/apps/api-saas/database/schema.ts +50 -0
  276. package/templates/apps/api-saas/mutations/projects.create.mutation.server.ts +52 -0
  277. package/templates/apps/api-saas/mutations/projects.create.mutation.ts +18 -0
  278. package/templates/apps/api-saas/package.json +31 -0
  279. package/templates/apps/api-saas/queries/projects.list.query.server.ts +7 -0
  280. package/templates/apps/api-saas/queries/projects.list.query.ts +18 -0
  281. package/templates/apps/api-saas/template.json +6 -0
  282. package/templates/apps/api-saas/tests/projects.create.test.ts +47 -0
  283. package/templates/apps/api-saas/tsconfig.json +5 -0
  284. package/templates/apps/api-search/README.md +68 -0
  285. package/templates/apps/api-search/app.config.ts +31 -0
  286. package/templates/apps/api-search/database/schema.ts +47 -0
  287. package/templates/apps/api-search/lib/search.ts +27 -0
  288. package/templates/apps/api-search/mutations/articles.create.mutation.server.ts +19 -0
  289. package/templates/apps/api-search/mutations/articles.create.mutation.ts +35 -0
  290. package/templates/apps/api-search/package.json +29 -0
  291. package/templates/apps/api-search/queries/articles.list.query.server.ts +14 -0
  292. package/templates/apps/api-search/queries/articles.list.query.ts +19 -0
  293. package/templates/apps/api-search/seeds/articles.seed.ts +41 -0
  294. package/templates/apps/api-search/startup/searchBackfill.startup.tsx +24 -0
  295. package/templates/apps/api-search/template.json +6 -0
  296. package/templates/apps/api-search/tests/articles.create.test.ts +69 -0
  297. package/templates/apps/api-search/tsconfig.json +5 -0
  298. package/templates/apps/api-versioning/README.md +51 -0
  299. package/templates/apps/api-versioning/actions/documents.asOf.action.server.ts +13 -0
  300. package/templates/apps/api-versioning/actions/documents.asOf.action.ts +14 -0
  301. package/templates/apps/api-versioning/actions/documents.history.action.server.ts +15 -0
  302. package/templates/apps/api-versioning/actions/documents.history.action.ts +17 -0
  303. package/templates/apps/api-versioning/app.config.ts +24 -0
  304. package/templates/apps/api-versioning/database/schema.ts +38 -0
  305. package/templates/apps/api-versioning/mutations/documents.create.mutation.server.ts +8 -0
  306. package/templates/apps/api-versioning/mutations/documents.create.mutation.ts +21 -0
  307. package/templates/apps/api-versioning/mutations/documents.update.mutation.server.ts +9 -0
  308. package/templates/apps/api-versioning/mutations/documents.update.mutation.ts +21 -0
  309. package/templates/apps/api-versioning/package.json +29 -0
  310. package/templates/apps/api-versioning/template.json +6 -0
  311. package/templates/apps/api-versioning/tests/documents.create.test.ts +37 -0
  312. package/templates/apps/api-versioning/tsconfig.json +5 -0
  313. package/templates/apps/api-webhooks/.env +6 -0
  314. package/templates/apps/api-webhooks/README.md +106 -0
  315. package/templates/apps/api-webhooks/app.config.ts +16 -0
  316. package/templates/apps/api-webhooks/database/schema.ts +49 -0
  317. package/templates/apps/api-webhooks/events/order.completed.webhook.tsx +22 -0
  318. package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.server.ts +37 -0
  319. package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.ts +15 -0
  320. package/templates/apps/api-webhooks/package.json +28 -0
  321. package/templates/apps/api-webhooks/queries/orders.list.query.server.ts +7 -0
  322. package/templates/apps/api-webhooks/queries/orders.list.query.ts +15 -0
  323. package/templates/apps/api-webhooks/template.json +6 -0
  324. package/templates/apps/api-webhooks/tests/orders.fulfill.test.ts +51 -0
  325. package/templates/apps/api-webhooks/tsconfig.json +5 -0
  326. package/templates/apps/api-webhooks/webhooks/orders.webhook.tsx +35 -0
  327. package/templates/apps/changelog/README.md +77 -0
  328. package/templates/apps/changelog/app.config.ts +27 -0
  329. package/templates/apps/changelog/content/releases/0.1.0.mdx +19 -0
  330. package/templates/apps/changelog/content/releases/0.2.0.mdx +28 -0
  331. package/templates/apps/changelog/package.json +30 -0
  332. package/templates/apps/changelog/scripts/generate-rss.mjs +38 -0
  333. package/templates/apps/changelog/src/globals.css +66 -0
  334. package/templates/apps/changelog/src/globals.d.ts +16 -0
  335. package/templates/apps/changelog/src/lib/locale.test.ts +72 -0
  336. package/templates/apps/changelog/src/lib/locale.ts +55 -0
  337. package/templates/apps/changelog/src/lib/releases.ts +21 -0
  338. package/templates/apps/changelog/src/locales/de.ts +22 -0
  339. package/templates/apps/changelog/src/locales/en.ts +30 -0
  340. package/templates/apps/changelog/src/pages/[locale]/[slug].tsx +24 -0
  341. package/templates/apps/changelog/src/pages/[locale]/index.tsx +13 -0
  342. package/templates/apps/changelog/src/pages/[locale]/mirrors.test.tsx +95 -0
  343. package/templates/apps/changelog/src/pages/[slug].test.tsx +127 -0
  344. package/templates/apps/changelog/src/pages/[slug].tsx +52 -0
  345. package/templates/apps/changelog/src/pages/index.test.tsx +112 -0
  346. package/templates/apps/changelog/src/pages/index.tsx +55 -0
  347. package/templates/apps/changelog/src/pages/layout.tsx +84 -0
  348. package/templates/apps/changelog/template.json +6 -0
  349. package/templates/apps/changelog/tsconfig.json +11 -0
  350. package/templates/apps/edge-functions/README.md +55 -0
  351. package/templates/apps/edge-functions/functions/aiComplete.serverless.ts +58 -0
  352. package/templates/apps/edge-functions/functions/currencyConvert.serverless.ts +47 -0
  353. package/templates/apps/edge-functions/functions/geoGreeting.serverless.ts +44 -0
  354. package/templates/apps/edge-functions/functions/health.serverless.ts +29 -0
  355. package/templates/apps/edge-functions/functions/resolveLink.serverless.ts +32 -0
  356. package/templates/apps/edge-functions/functions/shareLink.serverless.ts +30 -0
  357. package/templates/apps/edge-functions/functions/slackNotify.serverless.ts +40 -0
  358. package/templates/apps/edge-functions/functions/verifySignature.serverless.ts +52 -0
  359. package/templates/apps/edge-functions/package.json +21 -0
  360. package/templates/apps/edge-functions/template.json +6 -0
  361. package/templates/apps/edge-functions/tsconfig.json +10 -0
  362. package/templates/apps/frontend-admin/README.md +40 -0
  363. package/templates/apps/frontend-admin/app.config.ts +37 -0
  364. package/templates/apps/frontend-admin/package.json +30 -0
  365. package/templates/apps/frontend-admin/src/config.ts +8 -0
  366. package/templates/apps/frontend-admin/src/globals.css +76 -0
  367. package/templates/apps/frontend-admin/src/globals.d.ts +6 -0
  368. package/templates/apps/frontend-admin/src/lib/admin.ts +16 -0
  369. package/templates/apps/frontend-admin/src/lib/auth.ts +24 -0
  370. package/templates/apps/frontend-admin/src/locales/de.ts +67 -0
  371. package/templates/apps/frontend-admin/src/locales/en.ts +79 -0
  372. package/templates/apps/frontend-admin/src/locales/index.ts +15 -0
  373. package/templates/apps/frontend-admin/src/pages/(marketing)/index.test.tsx +55 -0
  374. package/templates/apps/frontend-admin/src/pages/(marketing)/index.tsx +32 -0
  375. package/templates/apps/frontend-admin/src/pages/(marketing)/layout.tsx +29 -0
  376. package/templates/apps/frontend-admin/src/pages/(marketing)/login.test.tsx +73 -0
  377. package/templates/apps/frontend-admin/src/pages/(marketing)/login.tsx +35 -0
  378. package/templates/apps/frontend-admin/src/pages/admin/[entity].tsx +121 -0
  379. package/templates/apps/frontend-admin/src/pages/admin/entity.test.tsx +119 -0
  380. package/templates/apps/frontend-admin/src/pages/admin/error.tsx +20 -0
  381. package/templates/apps/frontend-admin/src/pages/admin/fallbacks.test.tsx +68 -0
  382. package/templates/apps/frontend-admin/src/pages/admin/index.test.tsx +88 -0
  383. package/templates/apps/frontend-admin/src/pages/admin/index.tsx +65 -0
  384. package/templates/apps/frontend-admin/src/pages/admin/layout.test.tsx +114 -0
  385. package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +97 -0
  386. package/templates/apps/frontend-admin/src/pages/admin/loading.tsx +15 -0
  387. package/templates/apps/frontend-admin/src/pages/admin/not-found.tsx +15 -0
  388. package/templates/apps/frontend-admin/src/pages/layout.tsx +12 -0
  389. package/templates/apps/frontend-admin/src/pages/layouts.test.tsx +54 -0
  390. package/templates/apps/frontend-admin/template.json +6 -0
  391. package/templates/apps/frontend-admin/tsconfig.json +11 -0
  392. package/templates/apps/frontend-app/README.md +98 -0
  393. package/templates/apps/frontend-app/app.config.ts +43 -0
  394. package/templates/apps/frontend-app/package.json +30 -0
  395. package/templates/apps/frontend-app/src/locales/de.ts +36 -0
  396. package/templates/apps/frontend-app/src/locales/en.ts +43 -0
  397. package/templates/apps/frontend-app/src/locales/index.ts +15 -0
  398. package/templates/apps/frontend-app/src/pages/index.test.tsx +167 -0
  399. package/templates/apps/frontend-app/src/pages/index.tsx +136 -0
  400. package/templates/apps/frontend-app/src/pages/layout.tsx +41 -0
  401. package/templates/apps/frontend-app/src/pages/schema-ui.test.tsx +99 -0
  402. package/templates/apps/frontend-app/src/pages/schema-ui.tsx +74 -0
  403. package/templates/apps/frontend-app/template.json +6 -0
  404. package/templates/apps/frontend-app/tsconfig.json +11 -0
  405. package/templates/apps/frontend-blank/README.md +18 -0
  406. package/templates/apps/frontend-blank/app.config.ts +29 -0
  407. package/templates/apps/frontend-blank/package.json +29 -0
  408. package/templates/apps/frontend-blank/src/locales/de.ts +15 -0
  409. package/templates/apps/frontend-blank/src/locales/en.ts +22 -0
  410. package/templates/apps/frontend-blank/src/locales/index.ts +15 -0
  411. package/templates/apps/frontend-blank/src/pages/index.test.tsx +55 -0
  412. package/templates/apps/frontend-blank/src/pages/index.tsx +27 -0
  413. package/templates/apps/frontend-blank/src/pages/layout.test.tsx +54 -0
  414. package/templates/apps/frontend-blank/src/pages/layout.tsx +35 -0
  415. package/templates/apps/frontend-blank/template.json +6 -0
  416. package/templates/apps/frontend-blank/tsconfig.json +11 -0
  417. package/templates/apps/frontend-contact/README.md +65 -0
  418. package/templates/apps/frontend-contact/app.config.ts +25 -0
  419. package/templates/apps/frontend-contact/functions/sendMessage.serverless.ts +69 -0
  420. package/templates/apps/frontend-contact/package.json +33 -0
  421. package/templates/apps/frontend-contact/src/components/ContactForm.island.test.tsx +142 -0
  422. package/templates/apps/frontend-contact/src/components/ContactForm.island.tsx +104 -0
  423. package/templates/apps/frontend-contact/src/config.ts +12 -0
  424. package/templates/apps/frontend-contact/src/globals.css +84 -0
  425. package/templates/apps/frontend-contact/src/lib/locale.ts +55 -0
  426. package/templates/apps/frontend-contact/src/locales/de.ts +26 -0
  427. package/templates/apps/frontend-contact/src/locales/en.ts +29 -0
  428. package/templates/apps/frontend-contact/src/pages/[locale]/index.tsx +14 -0
  429. package/templates/apps/frontend-contact/src/pages/index.test.tsx +70 -0
  430. package/templates/apps/frontend-contact/src/pages/index.tsx +63 -0
  431. package/templates/apps/frontend-contact/src/pages/layout.tsx +65 -0
  432. package/templates/apps/frontend-contact/template.json +6 -0
  433. package/templates/apps/frontend-contact/tsconfig.json +11 -0
  434. package/templates/apps/frontend-dashboard/README.md +54 -0
  435. package/templates/apps/frontend-dashboard/app.config.ts +39 -0
  436. package/templates/apps/frontend-dashboard/package.json +29 -0
  437. package/templates/apps/frontend-dashboard/src/config.ts +8 -0
  438. package/templates/apps/frontend-dashboard/src/globals.css +72 -0
  439. package/templates/apps/frontend-dashboard/src/globals.d.ts +6 -0
  440. package/templates/apps/frontend-dashboard/src/lib/auth.ts +27 -0
  441. package/templates/apps/frontend-dashboard/src/locales/de.ts +49 -0
  442. package/templates/apps/frontend-dashboard/src/locales/en.ts +60 -0
  443. package/templates/apps/frontend-dashboard/src/locales/index.ts +15 -0
  444. package/templates/apps/frontend-dashboard/src/pages/(marketing)/index.test.tsx +55 -0
  445. package/templates/apps/frontend-dashboard/src/pages/(marketing)/index.tsx +34 -0
  446. package/templates/apps/frontend-dashboard/src/pages/(marketing)/layout.tsx +32 -0
  447. package/templates/apps/frontend-dashboard/src/pages/(marketing)/login.test.tsx +74 -0
  448. package/templates/apps/frontend-dashboard/src/pages/(marketing)/login.tsx +40 -0
  449. package/templates/apps/frontend-dashboard/src/pages/dashboard/error.tsx +21 -0
  450. package/templates/apps/frontend-dashboard/src/pages/dashboard/fallbacks.test.tsx +68 -0
  451. package/templates/apps/frontend-dashboard/src/pages/dashboard/index.test.tsx +55 -0
  452. package/templates/apps/frontend-dashboard/src/pages/dashboard/index.tsx +38 -0
  453. package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.test.tsx +88 -0
  454. package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.tsx +69 -0
  455. package/templates/apps/frontend-dashboard/src/pages/dashboard/loading.tsx +21 -0
  456. package/templates/apps/frontend-dashboard/src/pages/dashboard/not-found.tsx +19 -0
  457. package/templates/apps/frontend-dashboard/src/pages/dashboard/settings.test.tsx +69 -0
  458. package/templates/apps/frontend-dashboard/src/pages/dashboard/settings.tsx +35 -0
  459. package/templates/apps/frontend-dashboard/src/pages/layout.tsx +12 -0
  460. package/templates/apps/frontend-dashboard/src/pages/layouts.test.tsx +54 -0
  461. package/templates/apps/frontend-dashboard/template.json +6 -0
  462. package/templates/apps/frontend-dashboard/tsconfig.json +11 -0
  463. package/templates/apps/frontend-docs/README.md +19 -0
  464. package/templates/apps/frontend-docs/app.config.ts +25 -0
  465. package/templates/apps/frontend-docs/package.json +29 -0
  466. package/templates/apps/frontend-docs/src/globals.css +32 -0
  467. package/templates/apps/frontend-docs/src/lib/locale.test.ts +72 -0
  468. package/templates/apps/frontend-docs/src/lib/locale.ts +56 -0
  469. package/templates/apps/frontend-docs/src/locales/de.ts +24 -0
  470. package/templates/apps/frontend-docs/src/locales/en.ts +28 -0
  471. package/templates/apps/frontend-docs/src/pages/[locale]/docs/[...slug].tsx +18 -0
  472. package/templates/apps/frontend-docs/src/pages/[locale]/index.tsx +13 -0
  473. package/templates/apps/frontend-docs/src/pages/[locale]/mirrors.test.tsx +67 -0
  474. package/templates/apps/frontend-docs/src/pages/docs/[...slug].test.tsx +115 -0
  475. package/templates/apps/frontend-docs/src/pages/docs/[...slug].tsx +82 -0
  476. package/templates/apps/frontend-docs/src/pages/index.test.tsx +90 -0
  477. package/templates/apps/frontend-docs/src/pages/index.tsx +45 -0
  478. package/templates/apps/frontend-docs/src/pages/layout.test.tsx +84 -0
  479. package/templates/apps/frontend-docs/src/pages/layout.tsx +66 -0
  480. package/templates/apps/frontend-docs/template.json +6 -0
  481. package/templates/apps/frontend-docs/tsconfig.json +11 -0
  482. package/templates/apps/frontend-i18n/README.md +61 -0
  483. package/templates/apps/frontend-i18n/app.config.ts +33 -0
  484. package/templates/apps/frontend-i18n/package.json +28 -0
  485. package/templates/apps/frontend-i18n/src/globals.css +46 -0
  486. package/templates/apps/frontend-i18n/src/globals.d.ts +6 -0
  487. package/templates/apps/frontend-i18n/src/lib/locale.test.ts +72 -0
  488. package/templates/apps/frontend-i18n/src/lib/locale.ts +55 -0
  489. package/templates/apps/frontend-i18n/src/locales/de.ts +24 -0
  490. package/templates/apps/frontend-i18n/src/locales/en.ts +25 -0
  491. package/templates/apps/frontend-i18n/src/pages/[locale]/about.tsx +11 -0
  492. package/templates/apps/frontend-i18n/src/pages/[locale]/index.tsx +13 -0
  493. package/templates/apps/frontend-i18n/src/pages/[locale]/mirrors.test.tsx +50 -0
  494. package/templates/apps/frontend-i18n/src/pages/about.test.tsx +75 -0
  495. package/templates/apps/frontend-i18n/src/pages/about.tsx +31 -0
  496. package/templates/apps/frontend-i18n/src/pages/index.test.tsx +102 -0
  497. package/templates/apps/frontend-i18n/src/pages/index.tsx +43 -0
  498. package/templates/apps/frontend-i18n/src/pages/layout.test.tsx +86 -0
  499. package/templates/apps/frontend-i18n/src/pages/layout.tsx +70 -0
  500. package/templates/apps/frontend-i18n/template.json +6 -0
  501. package/templates/apps/frontend-i18n/tsconfig.json +11 -0
  502. package/templates/apps/frontend-landing/README.md +17 -0
  503. package/templates/apps/frontend-landing/app.config.ts +25 -0
  504. package/templates/apps/frontend-landing/package.json +29 -0
  505. package/templates/apps/frontend-landing/src/globals.css +23 -0
  506. package/templates/apps/frontend-landing/src/lib/locale.test.ts +72 -0
  507. package/templates/apps/frontend-landing/src/lib/locale.ts +55 -0
  508. package/templates/apps/frontend-landing/src/locales/de.ts +24 -0
  509. package/templates/apps/frontend-landing/src/locales/en.ts +26 -0
  510. package/templates/apps/frontend-landing/src/pages/[locale]/index.tsx +13 -0
  511. package/templates/apps/frontend-landing/src/pages/[locale]/mirrors.test.tsx +37 -0
  512. package/templates/apps/frontend-landing/src/pages/index.test.tsx +110 -0
  513. package/templates/apps/frontend-landing/src/pages/index.tsx +75 -0
  514. package/templates/apps/frontend-landing/src/pages/layout.test.tsx +84 -0
  515. package/templates/apps/frontend-landing/src/pages/layout.tsx +66 -0
  516. package/templates/apps/frontend-landing/template.json +6 -0
  517. package/templates/apps/frontend-landing/tsconfig.json +11 -0
  518. package/templates/apps/frontend-spa/README.md +45 -0
  519. package/templates/apps/frontend-spa/app.config.ts +27 -0
  520. package/templates/apps/frontend-spa/package.json +29 -0
  521. package/templates/apps/frontend-spa/src/globals.css +84 -0
  522. package/templates/apps/frontend-spa/src/locales/de.ts +22 -0
  523. package/templates/apps/frontend-spa/src/locales/en.ts +29 -0
  524. package/templates/apps/frontend-spa/src/locales/index.ts +15 -0
  525. package/templates/apps/frontend-spa/src/pages/index.test.tsx +137 -0
  526. package/templates/apps/frontend-spa/src/pages/index.tsx +123 -0
  527. package/templates/apps/frontend-spa/src/pages/layout.tsx +27 -0
  528. package/templates/apps/frontend-spa/template.json +6 -0
  529. package/templates/apps/frontend-spa/tsconfig.json +11 -0
  530. package/templates/apps/frontend-ssr/README.md +68 -0
  531. package/templates/apps/frontend-ssr/app.config.ts +32 -0
  532. package/templates/apps/frontend-ssr/package.json +29 -0
  533. package/templates/apps/frontend-ssr/src/globals.css +67 -0
  534. package/templates/apps/frontend-ssr/src/locales/de.ts +41 -0
  535. package/templates/apps/frontend-ssr/src/locales/en.ts +54 -0
  536. package/templates/apps/frontend-ssr/src/locales/index.ts +16 -0
  537. package/templates/apps/frontend-ssr/src/pages/feed-swr.test.tsx +69 -0
  538. package/templates/apps/frontend-ssr/src/pages/feed-swr.tsx +54 -0
  539. package/templates/apps/frontend-ssr/src/pages/feed.test.tsx +73 -0
  540. package/templates/apps/frontend-ssr/src/pages/feed.tsx +64 -0
  541. package/templates/apps/frontend-ssr/src/pages/index.test.tsx +89 -0
  542. package/templates/apps/frontend-ssr/src/pages/index.tsx +72 -0
  543. package/templates/apps/frontend-ssr/src/pages/layout.tsx +37 -0
  544. package/templates/apps/frontend-ssr/template.json +6 -0
  545. package/templates/apps/frontend-ssr/tsconfig.json +11 -0
  546. package/templates/apps/frontend-ssr-api/README.md +50 -0
  547. package/templates/apps/frontend-ssr-api/app.config.ts +43 -0
  548. package/templates/apps/frontend-ssr-api/package.json +30 -0
  549. package/templates/apps/frontend-ssr-api/src/globals.css +38 -0
  550. package/templates/apps/frontend-ssr-api/src/globals.d.ts +6 -0
  551. package/templates/apps/frontend-ssr-api/src/locales/de.ts +20 -0
  552. package/templates/apps/frontend-ssr-api/src/locales/en.ts +31 -0
  553. package/templates/apps/frontend-ssr-api/src/locales/index.ts +16 -0
  554. package/templates/apps/frontend-ssr-api/src/pages/index.test.tsx +105 -0
  555. package/templates/apps/frontend-ssr-api/src/pages/index.tsx +83 -0
  556. package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +28 -0
  557. package/templates/apps/frontend-ssr-api/template.json +6 -0
  558. package/templates/apps/frontend-ssr-api/tsconfig.json +11 -0
  559. package/templates/apps/frontend-static-blog/README.md +49 -0
  560. package/templates/apps/frontend-static-blog/app.config.ts +34 -0
  561. package/templates/apps/frontend-static-blog/package.json +28 -0
  562. package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.test.tsx +65 -0
  563. package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.tsx +35 -0
  564. package/templates/apps/frontend-static-blog/src/content/posts.ts +64 -0
  565. package/templates/apps/frontend-static-blog/src/globals.css +75 -0
  566. package/templates/apps/frontend-static-blog/src/lib/locale.test.ts +72 -0
  567. package/templates/apps/frontend-static-blog/src/lib/locale.ts +55 -0
  568. package/templates/apps/frontend-static-blog/src/locales/de.ts +19 -0
  569. package/templates/apps/frontend-static-blog/src/locales/en.ts +26 -0
  570. package/templates/apps/frontend-static-blog/src/pages/[locale]/blog/[slug].tsx +20 -0
  571. package/templates/apps/frontend-static-blog/src/pages/[locale]/index.tsx +13 -0
  572. package/templates/apps/frontend-static-blog/src/pages/[locale]/mirrors.test.tsx +62 -0
  573. package/templates/apps/frontend-static-blog/src/pages/blog/[slug].test.tsx +116 -0
  574. package/templates/apps/frontend-static-blog/src/pages/blog/[slug].tsx +69 -0
  575. package/templates/apps/frontend-static-blog/src/pages/index.test.tsx +100 -0
  576. package/templates/apps/frontend-static-blog/src/pages/index.tsx +58 -0
  577. package/templates/apps/frontend-static-blog/src/pages/layout.tsx +63 -0
  578. package/templates/apps/frontend-static-blog/template.json +6 -0
  579. package/templates/apps/frontend-static-blog/tsconfig.json +11 -0
  580. package/templates/baselines/bare/.env.example +37 -0
  581. package/templates/baselines/bare/README.md +47 -0
  582. package/templates/baselines/bare/baseline.json +31 -0
  583. package/templates/baselines/bare/deploy/README.md +43 -0
  584. package/templates/baselines/bare/deploy/voltro.service.example +36 -0
  585. package/templates/baselines/compose/.env.example +46 -0
  586. package/templates/baselines/compose/README.md +69 -0
  587. package/templates/baselines/compose/baseline.json +51 -0
  588. package/templates/baselines/compose/docker/.dockerignore +38 -0
  589. package/templates/baselines/compose/docker/api.Dockerfile +57 -0
  590. package/templates/baselines/compose/docker/dev.Dockerfile +35 -0
  591. package/templates/baselines/compose/docker/web.Dockerfile +59 -0
  592. package/templates/baselines/compose/docker-compose.dev.yml +89 -0
  593. package/templates/baselines/compose/docker-compose.prod.yml +87 -0
  594. package/templates/baselines/compose/docker-compose.yml +41 -0
  595. package/templates/baselines/compose-mariadb/.env.example +57 -0
  596. package/templates/baselines/compose-mariadb/README.md +78 -0
  597. package/templates/baselines/compose-mariadb/baseline.json +51 -0
  598. package/templates/baselines/compose-mariadb/docker/.dockerignore +38 -0
  599. package/templates/baselines/compose-mariadb/docker/api.Dockerfile +57 -0
  600. package/templates/baselines/compose-mariadb/docker/dev.Dockerfile +35 -0
  601. package/templates/baselines/compose-mariadb/docker/mariadb-init.sql +6 -0
  602. package/templates/baselines/compose-mariadb/docker/web.Dockerfile +59 -0
  603. package/templates/baselines/compose-mariadb/docker-compose.dev.yml +117 -0
  604. package/templates/baselines/compose-mariadb/docker-compose.prod.yml +114 -0
  605. package/templates/baselines/compose-mariadb/docker-compose.yml +79 -0
  606. package/templates/baselines/helm/.env.example +39 -0
  607. package/templates/baselines/helm/README.md +98 -0
  608. package/templates/baselines/helm/baseline.json +53 -0
  609. package/templates/baselines/helm/charts/voltro-app/.helmignore +10 -0
  610. package/templates/baselines/helm/charts/voltro-app/Chart.yaml +10 -0
  611. package/templates/baselines/helm/charts/voltro-app/templates/_helpers.tpl +36 -0
  612. package/templates/baselines/helm/charts/voltro-app/templates/configmap.yaml +13 -0
  613. package/templates/baselines/helm/charts/voltro-app/templates/deployment-api.yaml +120 -0
  614. package/templates/baselines/helm/charts/voltro-app/templates/deployment-web.yaml +45 -0
  615. package/templates/baselines/helm/charts/voltro-app/templates/ingress.yaml +37 -0
  616. package/templates/baselines/helm/charts/voltro-app/templates/postgres-service.yaml +19 -0
  617. package/templates/baselines/helm/charts/voltro-app/templates/postgres-statefulset.yaml +73 -0
  618. package/templates/baselines/helm/charts/voltro-app/templates/secret.yaml +33 -0
  619. package/templates/baselines/helm/charts/voltro-app/templates/service-api.yaml +19 -0
  620. package/templates/baselines/helm/charts/voltro-app/templates/service-web.yaml +19 -0
  621. package/templates/baselines/helm/charts/voltro-app/values-dev.yaml +21 -0
  622. package/templates/baselines/helm/charts/voltro-app/values-prod.yaml +58 -0
  623. package/templates/baselines/helm/charts/voltro-app/values-staging.yaml +25 -0
  624. package/templates/baselines/helm/charts/voltro-app/values.yaml +109 -0
  625. package/templates/baselines/helm/deploy/README.md +94 -0
  626. package/templates/patches/@effect__cluster@0.59.0.patch +262 -0
@@ -0,0 +1,63 @@
1
+ // Root layout — wraps every page. Strategy B (URL-prefix i18n): an INNER
2
+ // <I18nProvider> reads the locale FROM THE URL, so `voltro build` pre-renders
3
+ // each page once per locale (en at the bare path, de under /de) with the right
4
+ // catalog baked into the static HTML.
5
+ //
6
+ // The language switcher is a plain <a> per locale — a real browser navigation
7
+ // to the other locale's crawlable URL. That is exactly right for a static
8
+ // content site: the index is `interactive: 'none'` (zero JS) and the post
9
+ // pages hydrate only their island, so there is no client runtime to swap
10
+ // catalogs in place; a hard nav to the pre-rendered variant is the whole point.
11
+ //
12
+ // `<html>`/`<head>`/`<body>` belong to the framework's index.html shell;
13
+ // render only the in-document chrome here.
14
+
15
+ import type { ReactNode } from 'react'
16
+ import { I18nProvider, T } from '@voltro/i18n'
17
+ import { useLocation } from '@voltro/web'
18
+ import {
19
+ CATALOGS,
20
+ DEFAULT_LOCALE,
21
+ SUPPORTED_LOCALES,
22
+ stripLocalePrefix,
23
+ useUrlLocale,
24
+ withLocalePrefix,
25
+ } from '../lib/locale'
26
+ import '../globals.css'
27
+
28
+ function SiteHeader(): ReactNode {
29
+ const locale = useUrlLocale()
30
+ // The path WITHOUT its locale prefix, so switching language keeps you on the
31
+ // same page (e.g. /de/blog/x → /blog/x, then re-prefixed per locale).
32
+ const barePath = stripLocalePrefix(useLocation())
33
+ return (
34
+ <header className="site-header">
35
+ <a className="brand" href={withLocalePrefix('/', locale)}>{{capProjectName}}</a>
36
+ <span className="spacer" />
37
+ <span className="lang">
38
+ <span className="label">
39
+ <T id="nav.language" />:
40
+ </span>
41
+ {SUPPORTED_LOCALES.map((code) => (
42
+ <a
43
+ key={code}
44
+ href={withLocalePrefix(barePath, code)}
45
+ aria-current={code === locale ? 'true' : undefined}
46
+ >
47
+ {code.toUpperCase()}
48
+ </a>
49
+ ))}
50
+ </span>
51
+ </header>
52
+ )
53
+ }
54
+
55
+ export default function Layout({ children }: { readonly children: ReactNode }): ReactNode {
56
+ const locale = useUrlLocale()
57
+ return (
58
+ <I18nProvider locale={locale} messages={CATALOGS[locale]} defaultLocale={DEFAULT_LOCALE}>
59
+ <SiteHeader />
60
+ {children}
61
+ </I18nProvider>
62
+ )
63
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "frontend-static-blog",
3
+ "kind": "web",
4
+ "summary": "Static SSG blog: dynamic [slug] routes pre-rendered at build via getStaticPaths from a content source (the CMS→static pattern), per-post meta from loaderData, and ONE island (reading-progress bar) showing selective hydration. No backend.",
5
+ "tags": ["web", "frontend", "static", "ssg", "blog", "getStaticPaths", "islands", "content"]
6
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "jsx": "react-jsx",
5
+ "lib": ["ES2024", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "moduleResolution": "Bundler"
8
+ },
9
+ "include": ["src/**/*"],
10
+ "exclude": ["node_modules", "dist", ".framework"]
11
+ }
@@ -0,0 +1,37 @@
1
+ # Voltro local env — bare baseline.
2
+ #
3
+ # The Voltro CLI auto-loads .env from each app dir + every ancestor
4
+ # at boot (see voltro/packages/cli/src/bin.ts). Shell exports always
5
+ # override .env values, so CI can set DB_URL via env without touching
6
+ # this file.
7
+
8
+ # Postgres connection. Bring your own (host install, docker run,
9
+ # cloud provider URL).
10
+ DB_URL=postgres://app:app@localhost:5432/{{projectName}}
11
+
12
+ # Session signing secret. The plugin-auth handlers refuse to mint
13
+ # sessions without it. Rotate before shipping.
14
+ VOLTRO_SESSION_SECRET=dev-only-secret-please-rotate-in-prod
15
+
16
+ # ─── Optional backends — ALL OFF by default; uncomment to activate ───────────
17
+ # The cache and the durable KV each run on a zero-infra default (in-process
18
+ # memory / your SQL store). Point either at a RESP server (Redis / Valkey /
19
+ # KeyDB / Dragonfly / Upstash) ONLY when you want cross-instance sharing.
20
+ # Enablement is per concern — a bare REDIS_URL is NOT a master switch; each
21
+ # concern reads its own <NAME>_REDIS_URL first, then a shared REDIS_URL.
22
+
23
+ # @voltro/cache → Redis: a distributed query/result cache. `voltro add redis`
24
+ # wires this for you (flips app.config `cache: 'redis'` + adds the infra).
25
+ # CACHE_BACKEND=redis
26
+ # CACHE_REDIS_URL=redis://localhost:6379
27
+
28
+ # @voltro/kv → Redis: durable `ctx.kv`. Default backend is `database`
29
+ # (durable, shared across replicas, survives restarts) — leave it unless you
30
+ # specifically want KV on Redis. If you do, use a PERSISTENT redis (AOF/RDB),
31
+ # NOT an ephemeral cache-only one: an eviction/restart is data loss for
32
+ # durable KV. See docs → Caching → Key-value backends.
33
+ # KV_BACKEND=redis
34
+ # KV_REDIS_URL=redis://localhost:6379
35
+
36
+ # One server for everything, instead of the per-concern URLs above:
37
+ # REDIS_URL=redis://localhost:6379
@@ -0,0 +1,47 @@
1
+ # Bare baseline
2
+
3
+ Native Node + pnpm. No containers, no orchestration. You bring your
4
+ own Postgres.
5
+
6
+ ## What this baseline gives you
7
+
8
+ - `.env.example` — the env vars Voltro reads on boot, with sane
9
+ defaults for a local install.
10
+ - `deploy/voltro.service.example` — a sample systemd unit you can
11
+ copy to `/etc/systemd/system/voltro.service` on a VPS and adjust.
12
+ - `deploy/README.md` — short notes on rolling-your-own deploy.
13
+
14
+ That's it. No `Dockerfile`, no `docker-compose.yml`, no
15
+ `charts/`. By design.
16
+
17
+ ## What you have to do
18
+
19
+ ### Local dev
20
+
21
+ 1. Install Postgres locally (`brew install postgresql@17`,
22
+ `apt install postgresql-17`, or run a one-off
23
+ `docker run postgres:17-alpine -p 5432:5432 ...`).
24
+ 2. Create the database: `createdb voltro_local`
25
+ 3. Copy env: `cp .env.example .env` and edit `DB_URL`.
26
+ 4. `pnpm install && pnpm dev`
27
+
28
+ ### Production deploy
29
+
30
+ You're on your own. Common approaches:
31
+
32
+ - **systemd on a VPS** — see `deploy/voltro.service.example` for a
33
+ starting unit. `pnpm voltro build .` per app, copy `dist/` over,
34
+ enable + start the unit.
35
+ - **PM2 / Forever / Nodemon** — wraps the same `node dist/...`
36
+ command with auto-restart.
37
+ - **Cloud Run / Fly.io / Render** — these will want a `Dockerfile`
38
+ anyway. If you're going that route, switch to the **compose**
39
+ baseline: `voltro baseline set compose`.
40
+
41
+ ## Switching baselines
42
+
43
+ Run `voltro baseline set compose` to add Docker / `voltro baseline
44
+ set helm` to add a Helm chart. The switch writes the new baseline's
45
+ files and backs up your current `.env.example` + any conflicting
46
+ files to `.voltro-baseline-backup/<timestamp>/`. Your application
47
+ code is never touched.
@@ -0,0 +1,31 @@
1
+ {
2
+ "id": "bare",
3
+ "displayName": "Bare",
4
+ "summary": "Native Node + pnpm only. No containers, no orchestration. You bring your own Postgres (host install, cloud provider, or external Docker).",
5
+ "tags": ["native", "minimal", "starter"],
6
+ "recommendedFor": "Solo devs, prototyping, environments where Docker is unavailable or undesired.",
7
+ "tradeoffs": {
8
+ "pros": [
9
+ "Fastest HMR — native fs.watch (<50ms)",
10
+ "Lowest memory overhead",
11
+ "Native TypeScript LSP + debugger",
12
+ "No image-build step"
13
+ ],
14
+ "cons": [
15
+ "Postgres setup is your problem (brew/apt/docker-on-the-side)",
16
+ "Onboarding new devs requires per-dev environment setup",
17
+ "Deploy story = whatever you build (systemd? PM2? rolling-yours?)"
18
+ ]
19
+ },
20
+ "files": [
21
+ ".env.example",
22
+ "deploy/README.md",
23
+ "deploy/voltro.service.example"
24
+ ],
25
+ "packageJsonScripts": {
26
+ "dev": "turbo run dev",
27
+ "build": "turbo run build",
28
+ "test": "turbo run test",
29
+ "typecheck": "turbo run typecheck"
30
+ }
31
+ }
@@ -0,0 +1,43 @@
1
+ # Deploy notes — bare baseline
2
+
3
+ You are running native Node, so deploy is "ship the built `dist/`
4
+ to a host that has Node 24 + pnpm".
5
+
6
+ ## systemd on a Linux VPS
7
+
8
+ 1. Build on a build host (or in CI):
9
+ ```sh
10
+ pnpm install --frozen-lockfile
11
+ pnpm voltro build . # per app
12
+ ```
13
+ 2. Rsync the project to the target host.
14
+ 3. Install Postgres on the host (or point `DB_URL` at a managed
15
+ service like RDS / Supabase / Neon).
16
+ 4. Copy `deploy/voltro.service.example` to
17
+ `/etc/systemd/system/voltro-{{appName}}.service`, adjust the
18
+ `WorkingDirectory` and `EnvironmentFile`, then:
19
+ ```sh
20
+ sudo systemctl daemon-reload
21
+ sudo systemctl enable --now voltro-{{appName}}
22
+ sudo systemctl status voltro-{{appName}}
23
+ ```
24
+
25
+ Per-app you'll want one unit. systemd handles restarts, env file
26
+ loading, journald log capture.
27
+
28
+ ## PM2
29
+
30
+ ```sh
31
+ pm2 start "pnpm voltro start ." --name {{appName}} --cwd apps/{{appName}}
32
+ pm2 save
33
+ pm2 startup
34
+ ```
35
+
36
+ Easier than systemd, more moving parts.
37
+
38
+ ## When to switch to compose
39
+
40
+ If your deploy story includes more than one app + a Postgres, and
41
+ you're going to want CI to build images, switch to the **compose**
42
+ baseline. The native deploy story stays the same as a fallback
43
+ either way — switching baselines doesn't ban Node-native runs.
@@ -0,0 +1,36 @@
1
+ # systemd unit example for a Voltro app on a Linux VPS.
2
+ #
3
+ # Copy to /etc/systemd/system/voltro-<appName>.service and adjust
4
+ # the paths + User + EnvironmentFile to match your install.
5
+ #
6
+ # sudo cp deploy/voltro.service.example \
7
+ # /etc/systemd/system/voltro-{{appName}}.service
8
+ # sudo systemctl daemon-reload
9
+ # sudo systemctl enable --now voltro-{{appName}}
10
+ # sudo journalctl -u voltro-{{appName}} -f
11
+
12
+ [Unit]
13
+ Description=Voltro app: {{appName}}
14
+ After=network-online.target postgresql.service
15
+ Wants=network-online.target
16
+
17
+ [Service]
18
+ Type=simple
19
+ User=voltro
20
+ Group=voltro
21
+ WorkingDirectory=/opt/{{projectName}}/apps/{{appName}}
22
+ EnvironmentFile=/opt/{{projectName}}/apps/{{appName}}/.env
23
+ ExecStart=/usr/bin/pnpm voltro start .
24
+ Restart=on-failure
25
+ RestartSec=5
26
+ StandardOutput=journal
27
+ StandardError=journal
28
+
29
+ # Hardening — adjust as your host allows
30
+ NoNewPrivileges=true
31
+ ProtectSystem=strict
32
+ ProtectHome=true
33
+ ReadWritePaths=/opt/{{projectName}}
34
+
35
+ [Install]
36
+ WantedBy=multi-user.target
@@ -0,0 +1,46 @@
1
+ # Voltro local env — compose baseline.
2
+ #
3
+ # The Voltro CLI auto-loads .env from each app dir + every ancestor
4
+ # at boot (see voltro/packages/cli/src/bin.ts). Shell exports always
5
+ # override .env values, so CI can set DB_URL via env without touching
6
+ # this file.
7
+
8
+ # Postgres connection — points at the postgres service in
9
+ # docker-compose.yml (port 5433 to avoid clashing with a host pg on 5432).
10
+ # When you run inside the docker network (dev:docker / prod:up), the
11
+ # host is `postgres`. When you run native (pnpm dev with pnpm db:up),
12
+ # the host is `localhost` and port stays 5433.
13
+ DB_URL=postgres://app:app@localhost:5433/{{projectName}}
14
+
15
+ # Used by prod:up — required, no dev fallback.
16
+ VOLTRO_SESSION_SECRET=dev-only-secret-please-rotate-in-prod
17
+
18
+ # Used by docker-compose.prod.yml — the prod postgres uses a
19
+ # different password from dev (intentional: avoid `db:reset` blowing
20
+ # away the prod-shape dataset by accident).
21
+ POSTGRES_PASSWORD=change-me-in-prod
22
+
23
+ # ─── Optional backends — ALL OFF by default; uncomment to activate ───────────
24
+ # The cache and the durable KV each run on a zero-infra default (in-process
25
+ # memory / your SQL store). Point either at a RESP server (Redis / Valkey /
26
+ # KeyDB / Dragonfly / Upstash) ONLY when you want cross-instance sharing.
27
+ # Enablement is per concern — a bare REDIS_URL is NOT a master switch; each
28
+ # concern reads its own <NAME>_REDIS_URL first, then a shared REDIS_URL.
29
+
30
+ # @voltro/cache → Redis: a distributed query/result cache. Easiest path:
31
+ # `voltro add redis` uncomments these AND injects a `redis` service into
32
+ # docker-compose.yml; then `docker compose up -d redis` and reboot.
33
+ # CACHE_BACKEND=redis
34
+ # CACHE_REDIS_URL=redis://localhost:6379
35
+
36
+ # @voltro/kv → Redis: durable `ctx.kv`. Default backend is `database`
37
+ # (durable, shared across replicas, survives restarts) — leave it unless you
38
+ # specifically want KV on Redis. If you do, use a PERSISTENT redis (AOF/RDB),
39
+ # NOT the ephemeral cache service `voltro add redis` provisions: an
40
+ # eviction/restart is data loss for durable KV. See docs → Caching → Key-value
41
+ # backends.
42
+ # KV_BACKEND=redis
43
+ # KV_REDIS_URL=redis://localhost:6379
44
+
45
+ # One server for everything, instead of the per-concern URLs above:
46
+ # REDIS_URL=redis://localhost:6379
@@ -0,0 +1,69 @@
1
+ # Compose baseline
2
+
3
+ Three docker-compose files + two Dockerfiles. Postgres included.
4
+ Two flavours: dev with volume-mounted HMR, prod with built images.
5
+
6
+ ## Layout
7
+
8
+ ```
9
+ .
10
+ ├── docker/
11
+ │ ├── api.Dockerfile # multi-stage: deps + builder + prod
12
+ │ ├── web.Dockerfile # multi-stage: deps + builder + prod
13
+ │ └── .dockerignore
14
+ ├── docker-compose.yml # postgres only — the "infra" file
15
+ ├── docker-compose.dev.yml # postgres + apps in dev mode
16
+ └── docker-compose.prod.yml # postgres + apps in prod (built images)
17
+ ```
18
+
19
+ ## Common flows
20
+
21
+ ### Daily dev — fastest
22
+
23
+ ```sh
24
+ pnpm db:up # boot postgres only
25
+ pnpm dev # turbo run dev, native node, HMR <50ms
26
+ ```
27
+
28
+ ### Daily dev — full-docker (slower HMR but zero host install)
29
+
30
+ ```sh
31
+ pnpm dev:docker # boots postgres + all apps in containers
32
+ pnpm dev:docker:down # stop everything
33
+ ```
34
+
35
+ ### Production smoke-test on localhost
36
+
37
+ ```sh
38
+ pnpm prod:build # build all images (slow first run, ~5 min)
39
+ pnpm prod:up # boot the prod stack
40
+ pnpm prod:down # tear down
41
+ ```
42
+
43
+ ## When to add apps
44
+
45
+ The shipped compose files cover ONE api + ONE web by default. As you
46
+ add apps to `apps/`, mirror the pattern in both `docker-compose.dev.yml`
47
+ and `docker-compose.prod.yml`: copy a service block, change its
48
+ `working_dir` / `APP_PATH` / port.
49
+
50
+ A future `voltro baseline sync` will auto-regenerate the service
51
+ blocks from your `project.json` / `app.config.ts` files. Until then,
52
+ hand-edit.
53
+
54
+ ## What's NOT in here
55
+
56
+ - No CI configs (GitHub Actions / GitLab CI). Each provider's syntax
57
+ is different; we don't pick a winner.
58
+ - No reverse proxy (Traefik / nginx / Caddy). If you need one in
59
+ prod, add it as a service in `docker-compose.prod.yml`.
60
+ - No Redis, S3-emulator, or other infra. Add as needed.
61
+
62
+ ## Switching baselines
63
+
64
+ `voltro baseline set helm` → swaps to Helm chart + Kustomize overlays.
65
+ `voltro baseline set bare` → removes docker-compose entirely.
66
+
67
+ Either switch backs up the current docker-compose files + Dockerfiles
68
+ to `.voltro-baseline-backup/<timestamp>/`. Application code is never
69
+ touched.
@@ -0,0 +1,51 @@
1
+ {
2
+ "id": "compose",
3
+ "displayName": "Docker Compose",
4
+ "summary": "Full stack via docker-compose: separate dev (volume-mounted HMR) and prod (built images) variants. Postgres included.",
5
+ "tags": ["docker", "compose", "dev", "prod"],
6
+ "recommendedFor": "Teams without k8s; VPS or self-hosted deploys; reproducible onboarding for new devs.",
7
+ "tradeoffs": {
8
+ "pros": [
9
+ "Zero-host-install: docker + git is all you need to run the stack",
10
+ "Prod-parity smoke-tests locally via `prod:up`",
11
+ "Onboarding new devs is `pnpm dev:docker` after clone",
12
+ "Postgres, Redis, S3-emulators etc. are trivial additions"
13
+ ],
14
+ "cons": [
15
+ "HMR through volumes is slower than native (200-2000ms vs <50ms, esp. on macOS)",
16
+ "Requires per-app Dockerfile maintenance",
17
+ "Docker Desktop adds ~3GB memory overhead on macOS/Windows",
18
+ "First-time image build for prod variant is slow (5+ minutes)"
19
+ ]
20
+ },
21
+ "files": [
22
+ ".env.example",
23
+ "docker/api.Dockerfile",
24
+ "docker/web.Dockerfile",
25
+ "docker/dev.Dockerfile",
26
+ "docker/.dockerignore",
27
+ "docker-compose.yml",
28
+ "docker-compose.dev.yml",
29
+ "docker-compose.prod.yml"
30
+ ],
31
+ "packageJsonScripts": {
32
+ "dev": "turbo run dev",
33
+ "dev:hybrid": "docker compose up -d --wait postgres && turbo run dev",
34
+ "dev:docker": "HOST_UID=$(id -u) HOST_GID=$(id -g) docker compose -f docker-compose.dev.yml up",
35
+ "dev:docker:bg": "HOST_UID=$(id -u) HOST_GID=$(id -g) docker compose -f docker-compose.dev.yml up -d",
36
+ "dev:docker:down": "docker compose -f docker-compose.dev.yml down",
37
+ "dev:docker:logs": "docker compose -f docker-compose.dev.yml logs -f",
38
+ "build": "turbo run build",
39
+ "test": "turbo run test",
40
+ "typecheck": "turbo run typecheck",
41
+ "db:up": "docker compose up -d --wait postgres",
42
+ "db:down": "docker compose stop postgres",
43
+ "db:reset": "docker compose down -v postgres && docker compose up -d --wait postgres",
44
+ "db:logs": "docker compose logs -f postgres",
45
+ "db:psql": "docker compose exec postgres psql -U app -d {{projectNameSnake}}",
46
+ "prod:build": "docker compose -f docker-compose.prod.yml build",
47
+ "prod:up": "docker compose -f docker-compose.prod.yml up -d",
48
+ "prod:down": "docker compose -f docker-compose.prod.yml down",
49
+ "prod:logs": "docker compose -f docker-compose.prod.yml logs -f"
50
+ }
51
+ }
@@ -0,0 +1,38 @@
1
+ # Build context excludes — keep image size sane.
2
+ #
3
+ # Most of these are obvious noise. Customize per project if you
4
+ # have additional generated dirs to exclude.
5
+
6
+ **/node_modules
7
+ **/dist
8
+ **/.turbo
9
+ **/.next
10
+ **/.vite
11
+ **/.cache
12
+ **/coverage
13
+
14
+ **/.env
15
+ **/.env.local
16
+ **/.env.*.local
17
+ **/.voltro
18
+ **/.voltro-baseline-backup
19
+
20
+ **/.git
21
+ **/.gitignore.local
22
+
23
+ **/.vscode
24
+ **/.idea
25
+ **/*.swp
26
+ **/*.swo
27
+
28
+ **/*.log
29
+ **/npm-debug.log*
30
+ **/yarn-debug.log*
31
+ **/yarn-error.log*
32
+
33
+ **/.DS_Store
34
+ **/Thumbs.db
35
+
36
+ **/Dockerfile*
37
+ **/docker-compose*.yml
38
+ **/.dockerignore
@@ -0,0 +1,57 @@
1
+ # API service Dockerfile for {{projectName}}'s Node-based api apps.
2
+ #
3
+ # Build context = project root (where pnpm-workspace.yaml lives).
4
+ # The `.dockerignore` next to this file aggressively excludes noise.
5
+ #
6
+ # Build args:
7
+ # APP_PATH — path relative to context where the api lives.
8
+ # e.g. apps/{{projectName}}/api
9
+ #
10
+ # Targets:
11
+ # prod — production image (this file's only target; dev uses
12
+ # node:24-alpine directly via docker-compose.dev.yml so
13
+ # code mounts work without an image-build step).
14
+ #
15
+ # Build:
16
+ # docker build \
17
+ # -f docker/api.Dockerfile \
18
+ # --build-arg APP_PATH=apps/{{projectName}}/api \
19
+ # -t {{projectName}}-api:latest \
20
+ # .
21
+
22
+ ARG NODE_VERSION=24-alpine
23
+ ARG PNPM_VERSION=10.25.0
24
+ ARG APP_PATH=apps/{{projectName}}/api
25
+
26
+ # ---------- deps stage ----------
27
+ FROM node:${NODE_VERSION} AS deps
28
+ ARG PNPM_VERSION
29
+ RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
30
+ WORKDIR /workspace
31
+
32
+ # Copy ONLY what pnpm install needs — lockfile + workspace manifests.
33
+ COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
34
+ COPY apps apps
35
+ COPY packages packages
36
+
37
+ RUN pnpm install --frozen-lockfile
38
+
39
+ # ---------- builder stage ----------
40
+ FROM deps AS builder
41
+ ARG APP_PATH
42
+ WORKDIR /workspace/${APP_PATH}
43
+ RUN pnpm voltro codegen . || true
44
+
45
+ # ---------- prod runner ----------
46
+ FROM node:${NODE_VERSION} AS prod
47
+ ARG PNPM_VERSION
48
+ ARG APP_PATH
49
+ RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
50
+ WORKDIR /workspace
51
+
52
+ COPY --from=builder /workspace /workspace
53
+
54
+ WORKDIR /workspace/${APP_PATH}
55
+ EXPOSE 4000
56
+ ENV NODE_ENV=production
57
+ CMD ["pnpm", "voltro", "start", "."]
@@ -0,0 +1,35 @@
1
+ # Dev runtime image for {{projectName}}'s node/vite services.
2
+ #
3
+ # Why this exists (vs `image: node:24-alpine` directly in compose):
4
+ #
5
+ # Compose's `user: "${HOST_UID}:${HOST_GID}"` directive runs the
6
+ # container process as the host's UID/GID so files written into the
7
+ # bind-mounted workspace land owned by the host user, not root.
8
+ # That kills the "root-owned .framework/.vite/deps blocks native vite"
9
+ # bug that bites every dev who alternates between full-docker and
10
+ # native pnpm dev.
11
+ #
12
+ # But it also means:
13
+ # - The container has no `/etc/passwd` entry for that numeric UID,
14
+ # so HOME resolves to `/` (read-only for non-root).
15
+ # - `corepack enable` writes to `/usr/local/bin/` (root-owned in the
16
+ # stock node image), which a non-root container can't do.
17
+ #
18
+ # So we PREBAKE pnpm here as root at build time. /usr/local/bin/pnpm
19
+ # becomes world-executable (mode 755) → the non-root runtime user can
20
+ # exec it. HOME=/tmp gives pnpm/npm a writable home for state files.
21
+ #
22
+ # Build:
23
+ # docker build -f docker/dev.Dockerfile -t {{projectName}}-dev .
24
+ # (compose's `build:` does this automatically on first `up`)
25
+
26
+ FROM node:24-alpine
27
+
28
+ RUN corepack enable && corepack prepare pnpm@10.25.0 --activate
29
+
30
+ ENV HOME=/tmp
31
+ ENV PATH=/tmp/.local/bin:$PATH
32
+
33
+ # Don't pin a USER directive here — that would FREEZE the image to a
34
+ # specific UID. Compose's `user: "${HOST_UID}:${HOST_GID}"` is the
35
+ # right place to do that, dynamic per-host.
@@ -0,0 +1,59 @@
1
+ # Web (Vite) Dockerfile for {{projectName}}'s React apps.
2
+ #
3
+ # Build context = project root (where pnpm-workspace.yaml lives).
4
+ # The `.dockerignore` next to this file aggressively excludes noise.
5
+ #
6
+ # Build args:
7
+ # APP_PATH — path relative to context where the web app lives.
8
+ # e.g. apps/{{projectName}}/web
9
+ # APP_PORT — the port the app's `voltro start` listens on.
10
+ # Must match the app's app.config.ts `port` field.
11
+ #
12
+ # Targets:
13
+ # prod — production image (`voltro build .` then `voltro start .`)
14
+ #
15
+ # Build:
16
+ # docker build \
17
+ # -f docker/web.Dockerfile \
18
+ # --build-arg APP_PATH=apps/{{projectName}}/web \
19
+ # --build-arg APP_PORT=5173 \
20
+ # -t {{projectName}}-web:latest \
21
+ # .
22
+
23
+ ARG NODE_VERSION=24-alpine
24
+ ARG PNPM_VERSION=10.25.0
25
+ ARG APP_PATH=apps/{{projectName}}/web
26
+ ARG APP_PORT=5173
27
+
28
+ # ---------- deps stage ----------
29
+ FROM node:${NODE_VERSION} AS deps
30
+ ARG PNPM_VERSION
31
+ RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
32
+ WORKDIR /workspace
33
+
34
+ COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
35
+ COPY apps apps
36
+ COPY packages packages
37
+
38
+ RUN pnpm install --frozen-lockfile
39
+
40
+ # ---------- builder stage ----------
41
+ FROM deps AS builder
42
+ ARG APP_PATH
43
+ WORKDIR /workspace/${APP_PATH}
44
+ RUN pnpm voltro build .
45
+
46
+ # ---------- prod runner ----------
47
+ FROM node:${NODE_VERSION} AS prod
48
+ ARG PNPM_VERSION
49
+ ARG APP_PATH
50
+ ARG APP_PORT
51
+ RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
52
+ WORKDIR /workspace
53
+
54
+ COPY --from=builder /workspace /workspace
55
+
56
+ WORKDIR /workspace/${APP_PATH}
57
+ EXPOSE ${APP_PORT}
58
+ ENV NODE_ENV=production
59
+ CMD ["pnpm", "voltro", "start", "."]