@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,89 @@
1
+ # {{projectName}} full-stack DEV docker compose.
2
+ #
3
+ # Boots Postgres + apps with hot-reload. Each app container runs as
4
+ # the HOST user (via `user: ${HOST_UID}:${HOST_GID}`) so files written
5
+ # into the bind-mounted workspace land owned by you, not root. Without
6
+ # this, switching between docker dev and native pnpm dev leaves
7
+ # permission-denied errors on the cached vite deps.
8
+ #
9
+ # The pnpm-prebaked dev image (docker/dev.Dockerfile) is built once
10
+ # on first `up`; subsequent `up` calls reuse the cached layer.
11
+ #
12
+ # Prereqs on the host BEFORE running this:
13
+ # 1. pnpm install in the project root (deps need to exist on host
14
+ # because they're mounted in)
15
+ # 2. .env in place — see .env.example
16
+ #
17
+ # Run:
18
+ # pnpm dev:docker # wraps `HOST_UID=... HOST_GID=... docker compose up`
19
+ #
20
+ # Native-pnpm-dev alternative (faster HMR, no container overhead):
21
+ # pnpm dev:hybrid
22
+ #
23
+ # As you add apps to apps/, copy a service block and bump the port.
24
+
25
+ x-node-defaults: &node-defaults
26
+ build:
27
+ context: ./
28
+ dockerfile: docker/dev.Dockerfile
29
+ image: {{projectName}}-dev:latest
30
+ user: "${HOST_UID:-1000}:${HOST_GID:-1000}"
31
+ volumes:
32
+ - ./:/workspace:cached
33
+ depends_on:
34
+ postgres:
35
+ condition: service_healthy
36
+
37
+ services:
38
+ postgres:
39
+ image: postgres:17-alpine
40
+ container_name: {{projectName}}-postgres
41
+ restart: unless-stopped
42
+ environment:
43
+ POSTGRES_USER: app
44
+ POSTGRES_PASSWORD: app
45
+ POSTGRES_DB: {{projectNameSnake}}
46
+ ports:
47
+ - "5433:5432"
48
+ command:
49
+ - "postgres"
50
+ - "-c"
51
+ - "wal_level=logical"
52
+ - "-c"
53
+ - "max_wal_senders=4"
54
+ - "-c"
55
+ - "max_replication_slots=4"
56
+ volumes:
57
+ - {{projectName}}-pgdata:/var/lib/postgresql/data
58
+ healthcheck:
59
+ test: ["CMD-SHELL", "pg_isready -U app -d {{projectNameSnake}}"]
60
+ interval: 2s
61
+ timeout: 2s
62
+ retries: 10
63
+
64
+ api:
65
+ <<: *node-defaults
66
+ container_name: {{projectName}}-api-dev
67
+ working_dir: /workspace/apps/{{projectName}}/api
68
+ command: pnpm voltro dev .
69
+ environment:
70
+ NODE_ENV: development
71
+ HOME: /tmp
72
+ DB_URL: postgres://app:app@postgres:5432/{{projectNameSnake}}
73
+ VOLTRO_SESSION_SECRET: ${VOLTRO_SESSION_SECRET:-dev-only-secret-please-rotate-in-prod}
74
+ ports:
75
+ - "4000:4000"
76
+
77
+ web:
78
+ <<: *node-defaults
79
+ container_name: {{projectName}}-web-dev
80
+ working_dir: /workspace/apps/{{projectName}}/web
81
+ command: pnpm voltro dev .
82
+ environment:
83
+ NODE_ENV: development
84
+ HOME: /tmp
85
+ ports:
86
+ - "5173:5173"
87
+
88
+ volumes:
89
+ {{projectName}}-pgdata:
@@ -0,0 +1,87 @@
1
+ # {{projectName}} full-stack PROD docker compose.
2
+ #
3
+ # Builds locked images per app via docker/{api,web}.Dockerfile and
4
+ # runs them behind Postgres. No source volumes — each app's code is
5
+ # baked in at image-build time. Use this to smoke-test prod config
6
+ # locally before deploying.
7
+ #
8
+ # This is NOT the production deploy target itself — that's helm or
9
+ # your cloud provider's container runtime. This file gives parity
10
+ # checking on localhost.
11
+ #
12
+ # Run:
13
+ # pnpm prod:build # build all images (slow, ~5 min)
14
+ # pnpm prod:up # boot the stack
15
+ # pnpm prod:down # tear down
16
+ #
17
+ # Different DB user from dev so accidental `pnpm db:reset` against
18
+ # the dev compose doesn't wipe a prod-shape dataset you wanted to
19
+ # poke at.
20
+
21
+ services:
22
+ postgres:
23
+ image: postgres:17-alpine
24
+ container_name: {{projectName}}-postgres-prod
25
+ restart: unless-stopped
26
+ environment:
27
+ POSTGRES_USER: {{projectNameSnake}}
28
+ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me-in-prod}
29
+ POSTGRES_DB: {{projectNameSnake}}
30
+ ports:
31
+ - "5434:5432"
32
+ command:
33
+ - "postgres"
34
+ - "-c"
35
+ - "wal_level=logical"
36
+ - "-c"
37
+ - "max_wal_senders=4"
38
+ - "-c"
39
+ - "max_replication_slots=4"
40
+ volumes:
41
+ - {{projectName}}-prod-pgdata:/var/lib/postgresql/data
42
+ healthcheck:
43
+ test: ["CMD-SHELL", "pg_isready -U {{projectNameSnake}} -d {{projectNameSnake}}"]
44
+ interval: 5s
45
+ timeout: 3s
46
+ retries: 20
47
+
48
+ api:
49
+ build:
50
+ context: ./
51
+ dockerfile: docker/api.Dockerfile
52
+ target: prod
53
+ args:
54
+ APP_PATH: apps/{{projectName}}/api
55
+ image: {{projectName}}-api:latest
56
+ container_name: {{projectName}}-api
57
+ restart: unless-stopped
58
+ environment:
59
+ NODE_ENV: production
60
+ DB_URL: postgres://{{projectNameSnake}}:${POSTGRES_PASSWORD:-change-me-in-prod}@postgres:5432/{{projectNameSnake}}
61
+ VOLTRO_SESSION_SECRET: ${VOLTRO_SESSION_SECRET:?must be set for prod compose}
62
+ ports:
63
+ - "4000:4000"
64
+ depends_on:
65
+ postgres:
66
+ condition: service_healthy
67
+
68
+ web:
69
+ build:
70
+ context: ./
71
+ dockerfile: docker/web.Dockerfile
72
+ target: prod
73
+ args:
74
+ APP_PATH: apps/{{projectName}}/web
75
+ APP_PORT: "5173"
76
+ image: {{projectName}}-web:latest
77
+ container_name: {{projectName}}-web
78
+ restart: unless-stopped
79
+ environment:
80
+ NODE_ENV: production
81
+ ports:
82
+ - "5173:5173"
83
+ depends_on:
84
+ - api
85
+
86
+ volumes:
87
+ {{projectName}}-prod-pgdata:
@@ -0,0 +1,41 @@
1
+ # {{projectName}} infra docker compose — postgres only.
2
+ #
3
+ # Brought up by `pnpm db:up`. Apps run natively via `pnpm dev` against
4
+ # this. For full-docker dev (apps in containers too), use
5
+ # `pnpm dev:docker` which adds docker-compose.dev.yml on top.
6
+ #
7
+ # Port 5433 (NOT default 5432) so it never clashes with a host
8
+ # Postgres install.
9
+
10
+ services:
11
+ postgres:
12
+ image: postgres:17-alpine
13
+ container_name: {{projectName}}-postgres
14
+ restart: unless-stopped
15
+ environment:
16
+ POSTGRES_USER: app
17
+ POSTGRES_PASSWORD: app
18
+ POSTGRES_DB: {{projectNameSnake}}
19
+ ports:
20
+ - "5433:5432"
21
+ command:
22
+ - "postgres"
23
+ # wal_level=logical so CDC subscribers (workflow run mirror,
24
+ # logical-replication consumers) can subscribe via pgoutput.
25
+ # Harmless when nothing's subscribing.
26
+ - "-c"
27
+ - "wal_level=logical"
28
+ - "-c"
29
+ - "max_wal_senders=4"
30
+ - "-c"
31
+ - "max_replication_slots=4"
32
+ volumes:
33
+ - {{projectName}}-pgdata:/var/lib/postgresql/data
34
+ healthcheck:
35
+ test: ["CMD-SHELL", "pg_isready -U app -d {{projectNameSnake}}"]
36
+ interval: 2s
37
+ timeout: 2s
38
+ retries: 10
39
+
40
+ volumes:
41
+ {{projectName}}-pgdata:
@@ -0,0 +1,57 @@
1
+ # Voltro local env — compose-mariadb baseline.
2
+ #
3
+ # The Voltro CLI auto-loads .env from each app dir + every ancestor at
4
+ # boot. Shell exports always override .env values, so CI can set DB_URL
5
+ # via env without touching this file.
6
+
7
+ # MariaDB connection — points at the mariadb service in docker-compose.yml
8
+ # (port 3307 to avoid clashing with a host MySQL on 3306). Inside the
9
+ # docker network (dev:docker) the host is `mariadb`; native (pnpm dev with
10
+ # pnpm db:up) it's `localhost` on 3307.
11
+ DB_DIALECT=mariadb
12
+ DB_URL=mysql://app:app@localhost:3307/{{projectNameSnake}}
13
+ # Cross-replica real-time via the binlog reader (the compose DB runs with
14
+ # binlog_format=ROW + binlog_row_image=FULL + a replication grant). CDC=0
15
+ # falls back to single-process inline emit.
16
+ CDC=1
17
+
18
+ # File storage — MinIO locally (S3-compatible). The createbuckets one-shot
19
+ # provisions the bucket; the public /_voltro/storage/:id route serves blobs.
20
+ STORAGE_PROVIDER=minio
21
+ S3_ENDPOINT=http://localhost:9000
22
+ S3_BUCKET={{projectNameSnake}}
23
+ S3_ACCESS_KEY_ID=minioadmin
24
+ S3_SECRET_ACCESS_KEY=minioadmin
25
+ S3_FORCE_PATH_STYLE=1
26
+
27
+ # HMAC key for signed sessions — REQUIRED by prod:up (no dev fallback).
28
+ VOLTRO_SESSION_SECRET=dev-only-secret-please-rotate-in-prod
29
+
30
+ # Used by docker-compose.prod.yml — the prod DB uses a different root
31
+ # password from dev (avoids `db:reset` blowing away a prod-shape dataset).
32
+ MARIADB_ROOT_PASSWORD=change-me-in-prod
33
+
34
+ # ─── Optional backends — ALL OFF by default; uncomment to activate ───────────
35
+ # The cache and the durable KV each run on a zero-infra default (in-process
36
+ # memory / your SQL store). Point either at a RESP server (Redis / Valkey /
37
+ # KeyDB / Dragonfly / Upstash) ONLY when you want cross-instance sharing.
38
+ # Enablement is per concern — a bare REDIS_URL is NOT a master switch; each
39
+ # concern reads its own <NAME>_REDIS_URL first, then a shared REDIS_URL.
40
+
41
+ # @voltro/cache → Redis: a distributed query/result cache. Easiest path:
42
+ # `voltro add redis` uncomments these AND injects a `redis` service into
43
+ # docker-compose.yml; then `docker compose up -d redis` and reboot.
44
+ # CACHE_BACKEND=redis
45
+ # CACHE_REDIS_URL=redis://localhost:6379
46
+
47
+ # @voltro/kv → Redis: durable `ctx.kv`. Default backend is `database`
48
+ # (durable, shared across replicas, survives restarts) — leave it unless you
49
+ # specifically want KV on Redis. If you do, use a PERSISTENT redis (AOF/RDB),
50
+ # NOT the ephemeral cache service `voltro add redis` provisions: an
51
+ # eviction/restart is data loss for durable KV. See docs → Caching → Key-value
52
+ # backends.
53
+ # KV_BACKEND=redis
54
+ # KV_REDIS_URL=redis://localhost:6379
55
+
56
+ # One server for everything, instead of the per-concern URLs above:
57
+ # REDIS_URL=redis://localhost:6379
@@ -0,0 +1,78 @@
1
+ # Compose baseline — MariaDB + MinIO
2
+
3
+ Three docker-compose files + two Dockerfiles. **MariaDB** (binlog CDC) +
4
+ **MinIO** (object storage) included. Two flavours: dev with volume-mounted
5
+ HMR, prod with built images. The local mirror of the Helm/MariaDB
6
+ production shape.
7
+
8
+ ## Layout
9
+
10
+ ```
11
+ .
12
+ ├── docker/
13
+ │ ├── api.Dockerfile # multi-stage: deps + builder + prod
14
+ │ ├── web.Dockerfile # multi-stage: deps + builder + prod
15
+ │ ├── mariadb-init.sql # grants the app user REPLICATION (CDC reader)
16
+ │ └── .dockerignore
17
+ ├── docker-compose.yml # mariadb + minio — the "infra" file
18
+ ├── docker-compose.dev.yml # mariadb + minio + apps in dev mode
19
+ └── docker-compose.prod.yml # mariadb + minio + apps in prod (built images)
20
+ ```
21
+
22
+ The MariaDB service runs with `binlog_format=ROW` + `binlog_row_image=FULL`
23
+ and a replication grant — Voltro's CDC reader tails the binary log to fan
24
+ real-time subscriptions out across replicas (the binlog IS the message
25
+ bus). MinIO provides S3-compatible object storage for the file-storage
26
+ primitive; the `createbuckets` one-shot provisions the app bucket.
27
+
28
+ ## Common flows
29
+
30
+ ### Daily dev — fastest
31
+
32
+ ```sh
33
+ pnpm db:up # boot mariadb + minio (+ create the bucket)
34
+ pnpm dev # turbo run dev, native node, HMR <50ms
35
+ ```
36
+
37
+ ### Daily dev — full-docker (slower HMR but zero host install)
38
+
39
+ ```sh
40
+ pnpm dev:docker # boots mariadb + minio + all apps in containers
41
+ pnpm dev:docker:down # stop everything
42
+ ```
43
+
44
+ ### Production smoke-test on localhost
45
+
46
+ ```sh
47
+ pnpm prod:build # build all images (slow first run, ~5 min)
48
+ pnpm prod:up # boot the prod stack
49
+ pnpm prod:down # tear down
50
+ ```
51
+
52
+ ## When to add apps
53
+
54
+ The shipped compose files cover ONE api + ONE web by default. As you
55
+ add apps to `apps/`, mirror the pattern in both `docker-compose.dev.yml`
56
+ and `docker-compose.prod.yml`: copy a service block, change its
57
+ `working_dir` / `APP_PATH` / port.
58
+
59
+ A future `voltro baseline sync` will auto-regenerate the service
60
+ blocks from your `project.json` / `app.config.ts` files. Until then,
61
+ hand-edit.
62
+
63
+ ## What's NOT in here
64
+
65
+ - No CI configs (GitHub Actions / GitLab CI). Each provider's syntax
66
+ is different; we don't pick a winner.
67
+ - No reverse proxy (Traefik / nginx / Caddy). If you need one in
68
+ prod, add it as a service in `docker-compose.prod.yml`.
69
+ - No Redis, S3-emulator, or other infra. Add as needed.
70
+
71
+ ## Switching baselines
72
+
73
+ `voltro baseline set helm` → swaps to Helm chart + Kustomize overlays.
74
+ `voltro baseline set bare` → removes docker-compose entirely.
75
+
76
+ Either switch backs up the current docker-compose files + Dockerfiles
77
+ to `.voltro-baseline-backup/<timestamp>/`. Application code is never
78
+ touched.
@@ -0,0 +1,51 @@
1
+ {
2
+ "id": "compose-mariadb",
3
+ "displayName": "Docker Compose (MariaDB + MinIO)",
4
+ "summary": "Full stack via docker-compose: MariaDB with binlog CDC (ROW) + MinIO object storage. The local-dev shape for Voltro apps that deploy to MariaDB / K8s.",
5
+ "tags": ["docker", "compose", "mariadb", "cdc", "minio", "storage"],
6
+ "recommendedFor": "Apps targeting MariaDB (company DB) with real-time CDC + file storage; the local mirror of the Helm baseline.",
7
+ "tradeoffs": {
8
+ "pros": [
9
+ "Boots MariaDB (binlog ROW) + MinIO with one `pnpm db:up` — CDC works single-node",
10
+ "Local mirror of the K8s/MariaDB production shape (no surprises at deploy)",
11
+ "Object storage (avatars, AI blobs) works locally via MinIO",
12
+ "Zero-host-install: docker + git is all you need"
13
+ ],
14
+ "cons": [
15
+ "HMR through volumes (dev:docker) is slower than native (200-2000ms, esp. macOS)",
16
+ "MariaDB binlog retention grows on disk; tune binlog-expire-logs-seconds for long-lived volumes",
17
+ "Docker Desktop adds ~3GB memory overhead on macOS/Windows"
18
+ ]
19
+ },
20
+ "files": [
21
+ ".env.example",
22
+ "docker/api.Dockerfile",
23
+ "docker/web.Dockerfile",
24
+ "docker/dev.Dockerfile",
25
+ "docker/.dockerignore",
26
+ "docker/mariadb-init.sql",
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 mariadb minio && docker compose up -d createbuckets && 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 mariadb minio && docker compose up -d createbuckets",
42
+ "db:down": "docker compose stop mariadb minio",
43
+ "db:reset": "docker compose down -v && docker compose up -d --wait mariadb minio && docker compose up -d createbuckets",
44
+ "db:logs": "docker compose logs -f mariadb",
45
+ "db:sql": "docker compose exec mariadb mariadb -uapp -papp {{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,6 @@
1
+ -- Runs once on first DB init (mounted into /docker-entrypoint-initdb.d/).
2
+ -- The MARIADB_USER ('app') is created by the image with full grants on the
3
+ -- app database; Voltro's binlog CDC reader ALSO needs replication grants to
4
+ -- tail the binary log.
5
+ GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'app'@'%';
6
+ FLUSH PRIVILEGES;
@@ -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", "."]