vibecarbon 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 (495) hide show
  1. package/LICENSE +663 -0
  2. package/README.md +188 -0
  3. package/carbon/.claude/hooks/task-completed-gate.sh +19 -0
  4. package/carbon/.claude/hooks/teammate-idle-gate.sh +29 -0
  5. package/carbon/.claude/settings.json +29 -0
  6. package/carbon/.cursor/rules/vibecarbon.mdc +6 -0
  7. package/carbon/.dockerignore +57 -0
  8. package/carbon/.env.example +219 -0
  9. package/carbon/.github/copilot-instructions.md +3 -0
  10. package/carbon/.github/workflows/deploy.yml +346 -0
  11. package/carbon/.github/workflows/vibecarbon-build.yml +81 -0
  12. package/carbon/.windsurfrules +74 -0
  13. package/carbon/AGENTS.md +422 -0
  14. package/carbon/CLAUDE.md +3 -0
  15. package/carbon/DEVELOPMENT.md +187 -0
  16. package/carbon/Dockerfile +98 -0
  17. package/carbon/LICENSE +21 -0
  18. package/carbon/PRODUCTION.md +364 -0
  19. package/carbon/README.md +193 -0
  20. package/carbon/TESTING.md +138 -0
  21. package/carbon/backup/Dockerfile +75 -0
  22. package/carbon/backup/backup.sh +95 -0
  23. package/carbon/backup/compose-backup.sh +140 -0
  24. package/carbon/biome.json +83 -0
  25. package/carbon/cloud-init/docker-ce-setup.yaml +55 -0
  26. package/carbon/cloud-init/k3s/master-init.sh +215 -0
  27. package/carbon/cloud-init/k3s/supabase-init.sh +167 -0
  28. package/carbon/cloud-init/k3s/worker-init.sh +147 -0
  29. package/carbon/components.json +24 -0
  30. package/carbon/content/blog/authentication-guide.mdx +34 -0
  31. package/carbon/content/blog/getting-started.mdx +41 -0
  32. package/carbon/content/changelog/v0-1-0.mdx +40 -0
  33. package/carbon/content/docs/analytics.mdx +90 -0
  34. package/carbon/content/docs/authentication.mdx +231 -0
  35. package/carbon/content/docs/background-jobs.mdx +116 -0
  36. package/carbon/content/docs/cli.mdx +630 -0
  37. package/carbon/content/docs/database.mdx +236 -0
  38. package/carbon/content/docs/deployment.mdx +227 -0
  39. package/carbon/content/docs/development.mdx +238 -0
  40. package/carbon/content/docs/environments.mdx +84 -0
  41. package/carbon/content/docs/getting-started.mdx +112 -0
  42. package/carbon/content/docs/legal/privacy-policy.mdx +89 -0
  43. package/carbon/content/docs/legal/terms-of-service.mdx +99 -0
  44. package/carbon/content/docs/optional-services.mdx +160 -0
  45. package/carbon/db/Dockerfile +23 -0
  46. package/carbon/docker-compose.dev-init.yml +5 -0
  47. package/carbon/docker-compose.metabase.override.yml +14 -0
  48. package/carbon/docker-compose.metabase.prod.yml +28 -0
  49. package/carbon/docker-compose.metabase.yml +84 -0
  50. package/carbon/docker-compose.n8n.override.yml +14 -0
  51. package/carbon/docker-compose.n8n.prod.yml +31 -0
  52. package/carbon/docker-compose.n8n.yml +97 -0
  53. package/carbon/docker-compose.observability.override.yml +18 -0
  54. package/carbon/docker-compose.observability.prod.yml +28 -0
  55. package/carbon/docker-compose.observability.yml +125 -0
  56. package/carbon/docker-compose.override.yml +28 -0
  57. package/carbon/docker-compose.prod.yml +294 -0
  58. package/carbon/docker-compose.yml +508 -0
  59. package/carbon/docker-entrypoint.sh +12 -0
  60. package/carbon/ha/activate-standby.sh +52 -0
  61. package/carbon/ha/primary-init.sql +36 -0
  62. package/carbon/ha/standby-init.sh +74 -0
  63. package/carbon/k8s/LICENSE +99 -0
  64. package/carbon/k8s/README.md +272 -0
  65. package/carbon/k8s/base/app/deployment.yaml +130 -0
  66. package/carbon/k8s/base/app/hpa.yaml +44 -0
  67. package/carbon/k8s/base/app/kustomization.yaml +10 -0
  68. package/carbon/k8s/base/app/network-policy.yaml +124 -0
  69. package/carbon/k8s/base/app/pdb.yaml +14 -0
  70. package/carbon/k8s/base/app/rbac.yaml +36 -0
  71. package/carbon/k8s/base/app/service.yaml +16 -0
  72. package/carbon/k8s/base/backup/cronjob.yaml +120 -0
  73. package/carbon/k8s/base/backup/kustomization.yaml +7 -0
  74. package/carbon/k8s/base/backup/network-policy.yaml +31 -0
  75. package/carbon/k8s/base/backup/rbac.yaml +7 -0
  76. package/carbon/k8s/base/cluster-autoscaler/deployment.yaml +103 -0
  77. package/carbon/k8s/base/cluster-autoscaler/kustomization.yaml +17 -0
  78. package/carbon/k8s/base/cluster-autoscaler/rbac.yaml +109 -0
  79. package/carbon/k8s/base/config/configmap.yaml +48 -0
  80. package/carbon/k8s/base/config/kustomization.yaml +8 -0
  81. package/carbon/k8s/base/hetzner-ccm/kustomization.yaml +9 -0
  82. package/carbon/k8s/base/hetzner-csi/kustomization.yaml +9 -0
  83. package/carbon/k8s/base/kustomization.yaml +43 -0
  84. package/carbon/k8s/base/namespace.yaml +7 -0
  85. package/carbon/k8s/base/network-policies.yaml +95 -0
  86. package/carbon/k8s/base/registry/kustomization.yaml +5 -0
  87. package/carbon/k8s/base/registry/local-registry.yaml +193 -0
  88. package/carbon/k8s/base/traefik/certificate.yaml +21 -0
  89. package/carbon/k8s/base/traefik/configmap.yaml +13 -0
  90. package/carbon/k8s/base/traefik/deployment.yaml +165 -0
  91. package/carbon/k8s/base/traefik/ingressroute.yaml +141 -0
  92. package/carbon/k8s/base/traefik/kustomization.yaml +11 -0
  93. package/carbon/k8s/base/traefik/middleware.yaml +109 -0
  94. package/carbon/k8s/base/traefik/network-policy.yaml +92 -0
  95. package/carbon/k8s/base/traefik/service.yaml +38 -0
  96. package/carbon/k8s/flux/README.md +49 -0
  97. package/carbon/k8s/flux/clusters/primary/vibecarbon.yaml +128 -0
  98. package/carbon/k8s/flux/clusters/standby/vibecarbon.yaml +83 -0
  99. package/carbon/k8s/gitops/cert-manager-webhook-hetzner/helm-release.yaml +38 -0
  100. package/carbon/k8s/gitops/cert-manager-webhook-hetzner/helm-repository.yaml +16 -0
  101. package/carbon/k8s/gitops/cert-manager-webhook-hetzner/kustomization.yaml +10 -0
  102. package/carbon/k8s/gitops/supabase/helm-release.yaml +66 -0
  103. package/carbon/k8s/gitops/supabase/helm-repository.yaml +18 -0
  104. package/carbon/k8s/gitops/supabase/kustomization.yaml +33 -0
  105. package/carbon/k8s/infra/cert-manager-resources/cluster-issuers-cloudflare.yaml +51 -0
  106. package/carbon/k8s/infra/cert-manager-resources/cluster-issuers-hetzner.yaml +59 -0
  107. package/carbon/k8s/infra/cert-manager-resources/cluster-issuers-manual.yaml +43 -0
  108. package/carbon/k8s/infra/cert-manager-resources/kustomization.yaml +15 -0
  109. package/carbon/k8s/infra/kustomization.yaml +21 -0
  110. package/carbon/k8s/infra/traefik-crds/kustomization.yaml +10 -0
  111. package/carbon/k8s/overlays/local/configmap.yaml +23 -0
  112. package/carbon/k8s/overlays/local/ingressroute-studio.yaml +104 -0
  113. package/carbon/k8s/overlays/local/kustomization.yaml +215 -0
  114. package/carbon/k8s/overlays/local/namespace.yaml +8 -0
  115. package/carbon/k8s/overlays/local/secrets.yaml +32 -0
  116. package/carbon/k8s/overlays/production/kustomization.yaml +34 -0
  117. package/carbon/k8s/test-local.sh +318 -0
  118. package/carbon/k8s/values/supabase.values.yaml +133 -0
  119. package/carbon/package.json +154 -0
  120. package/carbon/runtime.Dockerfile +17 -0
  121. package/carbon/scripts/_dev-jwt.mjs +45 -0
  122. package/carbon/scripts/check-rls.ts +53 -0
  123. package/carbon/scripts/dev-init.js +191 -0
  124. package/carbon/scripts/dev.js +191 -0
  125. package/carbon/scripts/docker-down.js +63 -0
  126. package/carbon/scripts/docker-logs.js +59 -0
  127. package/carbon/scripts/docker-up.js +222 -0
  128. package/carbon/scripts/generate-dev-configs.sh +131 -0
  129. package/carbon/scripts/generate-rss.ts +116 -0
  130. package/carbon/scripts/generate-sitemap.ts +102 -0
  131. package/carbon/scripts/k8s-apply.js +71 -0
  132. package/carbon/scripts/k8s-delete.js +75 -0
  133. package/carbon/scripts/lib/manifest.js +176 -0
  134. package/carbon/scripts/secret-scan.mjs +278 -0
  135. package/carbon/scripts/validate-dev-configs.sh +101 -0
  136. package/carbon/src/client/App.tsx +202 -0
  137. package/carbon/src/client/assets/hyperformant-dark.svg +29 -0
  138. package/carbon/src/client/assets/hyperformant-light.svg +29 -0
  139. package/carbon/src/client/assets/logos/aider.svg +1 -0
  140. package/carbon/src/client/assets/logos/antigravity.svg +1 -0
  141. package/carbon/src/client/assets/logos/bolt.svg +1 -0
  142. package/carbon/src/client/assets/logos/claude-code.svg +1 -0
  143. package/carbon/src/client/assets/logos/copilot.svg +1 -0
  144. package/carbon/src/client/assets/logos/cursor.svg +1 -0
  145. package/carbon/src/client/assets/logos/gemini-cli.svg +1 -0
  146. package/carbon/src/client/assets/logos/lovable.svg +1 -0
  147. package/carbon/src/client/assets/logos/openai-codex.svg +1 -0
  148. package/carbon/src/client/assets/logos/v0.svg +1 -0
  149. package/carbon/src/client/assets/logos/windsurf.svg +1 -0
  150. package/carbon/src/client/assets/vibecarbon-icon.svg +19 -0
  151. package/carbon/src/client/assets/vibecarbon-logo-dark.svg +29 -0
  152. package/carbon/src/client/assets/vibecarbon-logo-light.svg +29 -0
  153. package/carbon/src/client/components/AIIntegrationSection.tsx +120 -0
  154. package/carbon/src/client/components/AppSidebar.tsx +760 -0
  155. package/carbon/src/client/components/ArchitectureSection.tsx +46 -0
  156. package/carbon/src/client/components/CTAFooter.tsx +59 -0
  157. package/carbon/src/client/components/ComparisonSection.tsx +132 -0
  158. package/carbon/src/client/components/ContentPanel.tsx +66 -0
  159. package/carbon/src/client/components/ContentSkeleton.tsx +21 -0
  160. package/carbon/src/client/components/ErrorBoundary.tsx +46 -0
  161. package/carbon/src/client/components/FAQSection.tsx +76 -0
  162. package/carbon/src/client/components/FileUpload.tsx +210 -0
  163. package/carbon/src/client/components/HeaderActions.tsx +17 -0
  164. package/carbon/src/client/components/Hero.tsx +608 -0
  165. package/carbon/src/client/components/ImpersonationBanner.tsx +31 -0
  166. package/carbon/src/client/components/LanguageSwitcher.tsx +67 -0
  167. package/carbon/src/client/components/Logo.tsx +87 -0
  168. package/carbon/src/client/components/LogoStrip.tsx +76 -0
  169. package/carbon/src/client/components/MetricsStrip.tsx +48 -0
  170. package/carbon/src/client/components/Nav.tsx +195 -0
  171. package/carbon/src/client/components/NewsletterSignup.tsx +147 -0
  172. package/carbon/src/client/components/NotificationDrawer.tsx +171 -0
  173. package/carbon/src/client/components/PageHeader.tsx +24 -0
  174. package/carbon/src/client/components/PlanGate.tsx +36 -0
  175. package/carbon/src/client/components/PricingSection.tsx +371 -0
  176. package/carbon/src/client/components/SEO.tsx +34 -0
  177. package/carbon/src/client/components/SmoothScroll.tsx +45 -0
  178. package/carbon/src/client/components/TechStackSection.tsx +165 -0
  179. package/carbon/src/client/components/WorkflowSection.tsx +604 -0
  180. package/carbon/src/client/components/admin/DockerLogs.tsx +276 -0
  181. package/carbon/src/client/components/admin/PerformanceMetrics.tsx +230 -0
  182. package/carbon/src/client/components/admin/ServiceCard.tsx +45 -0
  183. package/carbon/src/client/components/admin/ServicesStatus.tsx +296 -0
  184. package/carbon/src/client/components/architecture/ArchitectureDiagram.tsx +413 -0
  185. package/carbon/src/client/components/auth/AuthProvider.tsx +466 -0
  186. package/carbon/src/client/components/effects/FilmGrainOverlay.tsx +35 -0
  187. package/carbon/src/client/components/effects/FresnelEdge.tsx +49 -0
  188. package/carbon/src/client/components/effects/GlowTracker.tsx +46 -0
  189. package/carbon/src/client/components/effects/SparkBurst.tsx +145 -0
  190. package/carbon/src/client/components/effects/VGlowEffect.tsx +83 -0
  191. package/carbon/src/client/components/effects/index.ts +2 -0
  192. package/carbon/src/client/components/layouts/SidebarLayout.tsx +20 -0
  193. package/carbon/src/client/components/scroll/ScrollSection.tsx +76 -0
  194. package/carbon/src/client/components/scroll/ScrollytellingProvider.tsx +81 -0
  195. package/carbon/src/client/components/scroll/index.ts +2 -0
  196. package/carbon/src/client/components/ui/accordion.tsx +71 -0
  197. package/carbon/src/client/components/ui/alert-dialog.tsx +162 -0
  198. package/carbon/src/client/components/ui/alert.tsx +73 -0
  199. package/carbon/src/client/components/ui/aspect-ratio.tsx +22 -0
  200. package/carbon/src/client/components/ui/avatar.tsx +91 -0
  201. package/carbon/src/client/components/ui/badge.tsx +50 -0
  202. package/carbon/src/client/components/ui/breadcrumb.tsx +100 -0
  203. package/carbon/src/client/components/ui/button-group.tsx +78 -0
  204. package/carbon/src/client/components/ui/button.tsx +120 -0
  205. package/carbon/src/client/components/ui/calendar.tsx +182 -0
  206. package/carbon/src/client/components/ui/card.tsx +85 -0
  207. package/carbon/src/client/components/ui/carousel.tsx +227 -0
  208. package/carbon/src/client/components/ui/chart.tsx +357 -0
  209. package/carbon/src/client/components/ui/checkbox.tsx +27 -0
  210. package/carbon/src/client/components/ui/collapsible.tsx +15 -0
  211. package/carbon/src/client/components/ui/command.tsx +178 -0
  212. package/carbon/src/client/components/ui/context-menu.tsx +233 -0
  213. package/carbon/src/client/components/ui/dialog.tsx +132 -0
  214. package/carbon/src/client/components/ui/drawer.tsx +118 -0
  215. package/carbon/src/client/components/ui/dropdown-menu.tsx +242 -0
  216. package/carbon/src/client/components/ui/empty.tsx +94 -0
  217. package/carbon/src/client/components/ui/field.tsx +226 -0
  218. package/carbon/src/client/components/ui/hover-card.tsx +44 -0
  219. package/carbon/src/client/components/ui/input-group.tsx +146 -0
  220. package/carbon/src/client/components/ui/input-otp.tsx +83 -0
  221. package/carbon/src/client/components/ui/input.tsx +20 -0
  222. package/carbon/src/client/components/ui/item.tsx +188 -0
  223. package/carbon/src/client/components/ui/kbd.tsx +26 -0
  224. package/carbon/src/client/components/ui/label.tsx +21 -0
  225. package/carbon/src/client/components/ui/menubar.tsx +250 -0
  226. package/carbon/src/client/components/ui/navigation-menu.tsx +155 -0
  227. package/carbon/src/client/components/ui/pagination.tsx +102 -0
  228. package/carbon/src/client/components/ui/popover.tsx +75 -0
  229. package/carbon/src/client/components/ui/progress.tsx +66 -0
  230. package/carbon/src/client/components/ui/radio-group.tsx +36 -0
  231. package/carbon/src/client/components/ui/resizable.tsx +46 -0
  232. package/carbon/src/client/components/ui/scroll-area.tsx +48 -0
  233. package/carbon/src/client/components/ui/select.tsx +186 -0
  234. package/carbon/src/client/components/ui/separator.tsx +21 -0
  235. package/carbon/src/client/components/ui/sheet.tsx +124 -0
  236. package/carbon/src/client/components/ui/sidebar.tsx +702 -0
  237. package/carbon/src/client/components/ui/skeleton.tsx +13 -0
  238. package/carbon/src/client/components/ui/slider.tsx +57 -0
  239. package/carbon/src/client/components/ui/sonner.tsx +45 -0
  240. package/carbon/src/client/components/ui/spinner.tsx +15 -0
  241. package/carbon/src/client/components/ui/switch.tsx +30 -0
  242. package/carbon/src/client/components/ui/table.tsx +89 -0
  243. package/carbon/src/client/components/ui/tabs.tsx +73 -0
  244. package/carbon/src/client/components/ui/textarea.tsx +18 -0
  245. package/carbon/src/client/components/ui/toggle-group.tsx +87 -0
  246. package/carbon/src/client/components/ui/toggle.tsx +44 -0
  247. package/carbon/src/client/components/ui/tooltip.tsx +56 -0
  248. package/carbon/src/client/hooks/api/index.ts +14 -0
  249. package/carbon/src/client/hooks/api/useAuthSettings.ts +80 -0
  250. package/carbon/src/client/hooks/api/useSubscription.ts +87 -0
  251. package/carbon/src/client/hooks/use-mobile.ts +21 -0
  252. package/carbon/src/client/hooks/useMousePosition.ts +91 -0
  253. package/carbon/src/client/hooks/useNotifications.tsx +124 -0
  254. package/carbon/src/client/hooks/useOrganizationMembers.ts +127 -0
  255. package/carbon/src/client/hooks/useOrganizations.tsx +230 -0
  256. package/carbon/src/client/hooks/usePackageManager.ts +69 -0
  257. package/carbon/src/client/hooks/useReducedMotion.ts +20 -0
  258. package/carbon/src/client/hooks/useRunningServices.ts +114 -0
  259. package/carbon/src/client/hooks/useScrollProgress.ts +56 -0
  260. package/carbon/src/client/index.css +467 -0
  261. package/carbon/src/client/index.html +56 -0
  262. package/carbon/src/client/lib/admin-services.ts +151 -0
  263. package/carbon/src/client/lib/api.ts +32 -0
  264. package/carbon/src/client/lib/blog.ts +35 -0
  265. package/carbon/src/client/lib/changelog.ts +33 -0
  266. package/carbon/src/client/lib/docs-search.ts +101 -0
  267. package/carbon/src/client/lib/docs.ts +37 -0
  268. package/carbon/src/client/lib/i18n.ts +32 -0
  269. package/carbon/src/client/lib/supabase.ts +72 -0
  270. package/carbon/src/client/lib/tailwind-colors.ts +357 -0
  271. package/carbon/src/client/lib/theme.ts +117 -0
  272. package/carbon/src/client/lib/utils.ts +22 -0
  273. package/carbon/src/client/locales/de.json +529 -0
  274. package/carbon/src/client/locales/en.json +461 -0
  275. package/carbon/src/client/locales/es.json +529 -0
  276. package/carbon/src/client/locales/fr.json +529 -0
  277. package/carbon/src/client/locales/pt.json +529 -0
  278. package/carbon/src/client/main.tsx +56 -0
  279. package/carbon/src/client/mdx.d.ts +13 -0
  280. package/carbon/src/client/pages/ApiDocs.tsx +76 -0
  281. package/carbon/src/client/pages/AuthCallback.tsx +34 -0
  282. package/carbon/src/client/pages/Blog.tsx +167 -0
  283. package/carbon/src/client/pages/Changelog.tsx +171 -0
  284. package/carbon/src/client/pages/Charts.tsx +388 -0
  285. package/carbon/src/client/pages/Checkout.tsx +227 -0
  286. package/carbon/src/client/pages/Contact.tsx +174 -0
  287. package/carbon/src/client/pages/Dashboard.tsx +368 -0
  288. package/carbon/src/client/pages/Docs.tsx +372 -0
  289. package/carbon/src/client/pages/ForgotPassword.tsx +111 -0
  290. package/carbon/src/client/pages/Home.tsx +187 -0
  291. package/carbon/src/client/pages/Legal.tsx +100 -0
  292. package/carbon/src/client/pages/Login.tsx +408 -0
  293. package/carbon/src/client/pages/MFAVerify.tsx +156 -0
  294. package/carbon/src/client/pages/NotFound.tsx +21 -0
  295. package/carbon/src/client/pages/Onboarding.tsx +246 -0
  296. package/carbon/src/client/pages/ResetPassword.tsx +200 -0
  297. package/carbon/src/client/pages/UIComponents.tsx +390 -0
  298. package/carbon/src/client/pages/admin/ContactSubmissions.tsx +220 -0
  299. package/carbon/src/client/pages/admin/Dashboard.tsx +24 -0
  300. package/carbon/src/client/pages/admin/Infrastructure.tsx +257 -0
  301. package/carbon/src/client/pages/admin/Jobs.tsx +225 -0
  302. package/carbon/src/client/pages/admin/Logs.tsx +18 -0
  303. package/carbon/src/client/pages/admin/Newsletter.tsx +300 -0
  304. package/carbon/src/client/pages/admin/Notifications.tsx +603 -0
  305. package/carbon/src/client/pages/admin/Organizations.tsx +306 -0
  306. package/carbon/src/client/pages/admin/Settings.tsx +314 -0
  307. package/carbon/src/client/pages/admin/Theme.tsx +465 -0
  308. package/carbon/src/client/pages/admin/Users.tsx +365 -0
  309. package/carbon/src/client/pages/api-docs.css +156 -0
  310. package/carbon/src/client/pages/organizations/Details.tsx +200 -0
  311. package/carbon/src/client/pages/organizations/Members.tsx +402 -0
  312. package/carbon/src/client/pages/settings/Billing.tsx +473 -0
  313. package/carbon/src/client/pages/settings/Profile.tsx +160 -0
  314. package/carbon/src/client/pages/settings/Security.tsx +341 -0
  315. package/carbon/src/client/public/favicon.svg +19 -0
  316. package/carbon/src/client/public/robots.txt +8 -0
  317. package/carbon/src/server/billing/index.ts +104 -0
  318. package/carbon/src/server/billing/provider.ts +81 -0
  319. package/carbon/src/server/billing/providers/paddle.ts +314 -0
  320. package/carbon/src/server/billing/providers/polar.ts +325 -0
  321. package/carbon/src/server/billing/providers/stripe.ts +233 -0
  322. package/carbon/src/server/emails/templates.ts +116 -0
  323. package/carbon/src/server/index.ts +554 -0
  324. package/carbon/src/server/lib/auth.ts +6 -0
  325. package/carbon/src/server/lib/email.ts +64 -0
  326. package/carbon/src/server/lib/env.ts +112 -0
  327. package/carbon/src/server/lib/errors.ts +21 -0
  328. package/carbon/src/server/lib/logger.ts +17 -0
  329. package/carbon/src/server/lib/rate-limiter.ts +288 -0
  330. package/carbon/src/server/lib/request.ts +34 -0
  331. package/carbon/src/server/lib/stripe.ts +42 -0
  332. package/carbon/src/server/lib/supabase.ts +65 -0
  333. package/carbon/src/server/middleware/requirePlan.ts +80 -0
  334. package/carbon/src/server/routes/_internal/services-status.ts +958 -0
  335. package/carbon/src/server/routes/_internal/verify-role.ts +185 -0
  336. package/carbon/src/server/routes/health.ts +48 -0
  337. package/carbon/src/server/routes/v1/admin/contact.ts +128 -0
  338. package/carbon/src/server/routes/v1/admin/jobs.ts +171 -0
  339. package/carbon/src/server/routes/v1/admin/newsletter.ts +237 -0
  340. package/carbon/src/server/routes/v1/auth.ts +390 -0
  341. package/carbon/src/server/routes/v1/billing.ts +718 -0
  342. package/carbon/src/server/routes/v1/contact.ts +93 -0
  343. package/carbon/src/server/routes/v1/index.ts +1333 -0
  344. package/carbon/src/server/routes/v1/newsletter.ts +181 -0
  345. package/carbon/src/server/routes/v1/performance.ts +157 -0
  346. package/carbon/src/server/routes/v1/stats.ts +170 -0
  347. package/carbon/src/server/routes/v1/theme.ts +106 -0
  348. package/carbon/src/server/routes/webhooks/billing.ts +376 -0
  349. package/carbon/src/server/routes/webhooks/stripe.ts +276 -0
  350. package/carbon/src/server/types.ts +11 -0
  351. package/carbon/src/shared/pricing.ts +155 -0
  352. package/carbon/src/shared/types.ts +338 -0
  353. package/carbon/supabase/migrations/00001_init.sql +717 -0
  354. package/carbon/supabase/migrations/00002_theme_settings.sql +13 -0
  355. package/carbon/supabase/migrations/00003_pg_cron.sql +121 -0
  356. package/carbon/supabase/migrations/00004_contact_newsletter.sql +81 -0
  357. package/carbon/supabase/migrations/00005_localization_languages.sql +22 -0
  358. package/carbon/supabase/seed.sql +16 -0
  359. package/carbon/tests/_helpers/app.ts +45 -0
  360. package/carbon/tests/_helpers/env.ts +37 -0
  361. package/carbon/tests/_helpers/factories.ts +69 -0
  362. package/carbon/tests/_helpers/jwt.ts +23 -0
  363. package/carbon/tests/_helpers/setup-integration.ts +20 -0
  364. package/carbon/tests/_helpers/setup-rtl.ts +12 -0
  365. package/carbon/tests/component/ErrorBoundary.test.tsx +53 -0
  366. package/carbon/tests/component/use-auth-settings.test.tsx +119 -0
  367. package/carbon/tests/integration/server/routes/contact.test.ts +162 -0
  368. package/carbon/tests/integration/server/routes/health.test.ts +61 -0
  369. package/carbon/tests/structural/i18n-parity.test.ts +42 -0
  370. package/carbon/tests/unit/client/utils.test.ts +49 -0
  371. package/carbon/tests/unit/shared/pricing.test.ts +93 -0
  372. package/carbon/tsconfig.json +27 -0
  373. package/carbon/tsconfig.server.json +27 -0
  374. package/carbon/tsconfig.test.json +9 -0
  375. package/carbon/vite.config.ts +110 -0
  376. package/carbon/vitest.config.ts +74 -0
  377. package/carbon/volumes/db/jwt.sql +57 -0
  378. package/carbon/volumes/db/metabase-init.sh +29 -0
  379. package/carbon/volumes/db/n8n-init.sh +25 -0
  380. package/carbon/volumes/db/realtime.sql +33 -0
  381. package/carbon/volumes/db/roles.sql +93 -0
  382. package/carbon/volumes/db/set-passwords.sh +12 -0
  383. package/carbon/volumes/db/super-admin.dev.sql +113 -0
  384. package/carbon/volumes/db/super-admin.generated.sql +113 -0
  385. package/carbon/volumes/db/super-admin.sql +114 -0
  386. package/carbon/volumes/grafana/dashboards/logs.json +179 -0
  387. package/carbon/volumes/grafana/dashboards/overview.json +523 -0
  388. package/carbon/volumes/grafana/dashboards/postgresql.json +337 -0
  389. package/carbon/volumes/grafana/dashboards.dev/logs.json +179 -0
  390. package/carbon/volumes/grafana/dashboards.dev/overview.json +156 -0
  391. package/carbon/volumes/grafana/dashboards.dev/postgresql.json +337 -0
  392. package/carbon/volumes/grafana/provisioning/dashboards/dashboards.dev.yml +16 -0
  393. package/carbon/volumes/grafana/provisioning/dashboards/dashboards.yml +16 -0
  394. package/carbon/volumes/grafana/provisioning/datasources/datasources.yml +43 -0
  395. package/carbon/volumes/kong/docker-entrypoint.sh +9 -0
  396. package/carbon/volumes/kong/kong.yml +208 -0
  397. package/carbon/volumes/loki/loki-config.yml +58 -0
  398. package/carbon/volumes/n8n/hooks.js +131 -0
  399. package/carbon/volumes/n8n/scripts/setup.sh +66 -0
  400. package/carbon/volumes/prometheus/prometheus.yml +43 -0
  401. package/carbon/volumes/promtail/promtail-config.yml +64 -0
  402. package/carbon/volumes/traefik/middlewares.dev.yml +83 -0
  403. package/carbon/volumes/traefik/middlewares.yml +95 -0
  404. package/carbon/volumes/traefik/vite-dev.yml +20 -0
  405. package/package.json +95 -0
  406. package/src/access.js +354 -0
  407. package/src/activate.js +187 -0
  408. package/src/add.js +718 -0
  409. package/src/backup.js +786 -0
  410. package/src/cli.js +350 -0
  411. package/src/configure.js +967 -0
  412. package/src/console.js +155 -0
  413. package/src/create.js +1499 -0
  414. package/src/deploy.js +311 -0
  415. package/src/destroy.js +2033 -0
  416. package/src/diagnose.js +735 -0
  417. package/src/down.js +80 -0
  418. package/src/failover.js +1032 -0
  419. package/src/lib/backup-s3.js +179 -0
  420. package/src/lib/build.js +33 -0
  421. package/src/lib/checksum.js +28 -0
  422. package/src/lib/ci-setup.js +666 -0
  423. package/src/lib/cli/help.js +129 -0
  424. package/src/lib/cli/parse-flags.js +160 -0
  425. package/src/lib/cli/select-action.js +65 -0
  426. package/src/lib/cli/select-environment.js +108 -0
  427. package/src/lib/cli/tty-guard.js +75 -0
  428. package/src/lib/cloudflare.js +447 -0
  429. package/src/lib/colors.js +52 -0
  430. package/src/lib/command.js +361 -0
  431. package/src/lib/config.js +359 -0
  432. package/src/lib/cost.js +103 -0
  433. package/src/lib/deploy/bundle.js +231 -0
  434. package/src/lib/deploy/compose/acme-verify.js +121 -0
  435. package/src/lib/deploy/compose/build-args.js +78 -0
  436. package/src/lib/deploy/compose/ha.js +1874 -0
  437. package/src/lib/deploy/compose/index.js +1294 -0
  438. package/src/lib/deploy/compose/reconcile.js +74 -0
  439. package/src/lib/deploy/github.js +382 -0
  440. package/src/lib/deploy/image.js +191 -0
  441. package/src/lib/deploy/index.js +119 -0
  442. package/src/lib/deploy/k8s/LICENSE +99 -0
  443. package/src/lib/deploy/k8s/gitops-deploy.js +298 -0
  444. package/src/lib/deploy/k8s/ha/index.js +1000 -0
  445. package/src/lib/deploy/k8s/index.js +62 -0
  446. package/src/lib/deploy/k8s/k3s.js +2515 -0
  447. package/src/lib/deploy/orchestrator.js +1401 -0
  448. package/src/lib/deploy/prompts.js +545 -0
  449. package/src/lib/deploy/remote-build.js +130 -0
  450. package/src/lib/deploy/state.js +120 -0
  451. package/src/lib/deploy/utils.js +328 -0
  452. package/src/lib/deploy-logger.js +93 -0
  453. package/src/lib/dns-propagation.js +48 -0
  454. package/src/lib/environment.js +58 -0
  455. package/src/lib/fetch-retry.js +103 -0
  456. package/src/lib/github-environments.js +335 -0
  457. package/src/lib/hetzner-dns.js +377 -0
  458. package/src/lib/hetzner-guided-setup.js +275 -0
  459. package/src/lib/host-keys.js +37 -0
  460. package/src/lib/iac/cloud-init.js +52 -0
  461. package/src/lib/iac/index.js +325 -0
  462. package/src/lib/iac/programs/hetzner-compose.js +130 -0
  463. package/src/lib/iac/programs/hetzner-k8s.js +320 -0
  464. package/src/lib/kubectl.js +81 -0
  465. package/src/lib/licensing/index.js +259 -0
  466. package/src/lib/licensing/tiers.js +181 -0
  467. package/src/lib/licensing/validator.js +171 -0
  468. package/src/lib/merge-package-json.js +90 -0
  469. package/src/lib/operator-ip.js +381 -0
  470. package/src/lib/package-manager.js +111 -0
  471. package/src/lib/perf.js +71 -0
  472. package/src/lib/project-guard.js +39 -0
  473. package/src/lib/project.js +334 -0
  474. package/src/lib/providers/base.js +276 -0
  475. package/src/lib/providers/hetzner-s3.js +656 -0
  476. package/src/lib/providers/hetzner.js +755 -0
  477. package/src/lib/providers/index.js +164 -0
  478. package/src/lib/s3.js +510 -0
  479. package/src/lib/secret-scan.js +583 -0
  480. package/src/lib/secrets.js +63 -0
  481. package/src/lib/server-types.js +195 -0
  482. package/src/lib/shell.js +91 -0
  483. package/src/lib/ssh.js +241 -0
  484. package/src/lib/tracker.js +242 -0
  485. package/src/lib/upgrade-policy.js +170 -0
  486. package/src/lib/validators.js +105 -0
  487. package/src/lib/version.js +5 -0
  488. package/src/remove.js +292 -0
  489. package/src/reset.js +97 -0
  490. package/src/restore.js +871 -0
  491. package/src/scale.js +1734 -0
  492. package/src/shell.js +222 -0
  493. package/src/status.js +981 -0
  494. package/src/up.js +264 -0
  495. package/src/upgrade.js +721 -0
package/README.md ADDED
@@ -0,0 +1,188 @@
1
+ <p align="center">
2
+ <img src="carbon/src/client/assets/vibecarbon-logo-dark.svg" alt="Vibecarbon" width="500" />
3
+ </p>
4
+
5
+ <p align="center"><strong>Professional Grade SaaS Architecture & Starter Kit</strong></p>
6
+
7
+
8
+ Full-stack, security-hardened, auto-everything apps in minutes.
9
+
10
+ ---
11
+
12
+ ## What is Vibecarbon?
13
+
14
+ Vibecarbon is a full-stack SaaS starter that combines React 19, Vite, Tailwind v4, Hono, and self-hosted Supabase — with automated DevOps built in.
15
+
16
+ Skip the choice between vendor lock-in and DIY infrastructure. Create web applications with authentication, billing, teams, email, blog, docs, i18n, and production deployment — without a dedicated DevOps engineer.
17
+
18
+ Includes Docker Compose, Kubernetes, High-Availability with replication and failover, auto-scaling, and automated backups.
19
+
20
+ ---
21
+
22
+ ## Quick Start
23
+
24
+ ```bash
25
+ # Create a new project
26
+ npx vibecarbon create my-app
27
+
28
+ # Start local development
29
+ cd my-app
30
+ npx vibecarbon up
31
+
32
+ # Deploy an environment
33
+ npx vibecarbon deploy
34
+
35
+ # Tear down an environment
36
+ npx vibecarbon destroy
37
+ ```
38
+
39
+ > **Create for free, always. Pay to deploy.** `create`, `up`, `down`, and all local development are free forever. `deploy`, `destroy`, `backup`, `restore`, `failover`, and `scale` require a Diamond or Fullerene license — a one-time payment, no subscriptions, your servers.
40
+
41
+ > Open source under AGPL v3. Generated project code is MIT — you own your app.
42
+
43
+ ---
44
+
45
+ ## Commands
46
+
47
+ ```text
48
+ USAGE
49
+ npx vibecarbon <command> [options]
50
+
51
+ DEV COMMANDS
52
+ create <project-name> Create a new Vibecarbon project
53
+ up Start local development environment
54
+ down Stop local development environment
55
+ status Show project and deployment status
56
+ reset Reset local environment (removes all data)
57
+ configure Configure external services (billing, OAuth, SMTP, etc.)
58
+ add <feature> Add features (observability, redis)
59
+ remove <feature> Remove features from a project
60
+ upgrade Upgrade infrastructure files to latest template
61
+
62
+ DEPLOY COMMANDS
63
+ deploy [environment] Deploy an environment (interactive picker for mode/region)
64
+ destroy [environment] Tear down cloud environment
65
+ backup [environment] Create, list, or download database backups
66
+ restore [environment] Restore database from backup
67
+ failover [environment] Initiate failover to standby region
68
+ scale [environment] Scale worker nodes and instance sizes
69
+
70
+ DEBUG COMMANDS
71
+ shell [environment] Interactive bash with KUBECONFIG + cloud creds exported
72
+ diagnose [environment] Dump full cluster state to ~/.vibecarbon/diag-*
73
+ console <node> Open Hetzner's web VNC console for a node
74
+ access [subcommand] Manage SSH + k8s-API operator-CIDR allowlist
75
+ ```
76
+
77
+ ---
78
+
79
+ ## Who It's For
80
+
81
+ **Indie Hackers & Solopreneurs** — Ship faster, spend less, own everything. Launch a production grade MVP this weekend.
82
+
83
+ **Startup Founders & Small Teams** — Enterprise architecture without the complexity. Multi-tenant organizations, auto-scaling, and high-availability when you need it.
84
+
85
+ **Agencies & Consultancies** — One stack for every client project. Consistent, production-ready foundation with easy handoff.
86
+
87
+ ---
88
+
89
+ ## Key Benefits
90
+
91
+ ### Application Layer
92
+ - Auth (email, OAuth, magic links, MFA) + brute force protection
93
+ - Multi-provider billing (Stripe, Paddle, Polar) with subscriptions, checkout, and plan gating
94
+ - Multi-tenant organizations with RBAC
95
+ - Guided onboarding flow
96
+ - Contact form with admin panel and email notifications
97
+ - Newsletter with double opt-in, admin compose/send, and CSV export
98
+ - File uploads via S3-backed storage (Hetzner Object Storage)
99
+ - Transactional email (SMTP)
100
+ - MDX blog, changelog, documentation, and legal pages (privacy policy, terms of service)
101
+ - Client-side docs search with Cmd+K shortcut
102
+ - Internationalization (i18n) with language switcher
103
+ - Background jobs via pg_cron (zero extra infrastructure)
104
+ - Product analytics (Plausible — cookie-free, GDPR-compliant)
105
+ - Admin panel with user impersonation, notifications, jobs, contact, newsletter, and infrastructure dashboard
106
+ - SEO (meta tags, sitemap, RSS feed)
107
+
108
+ ### Infrastructure
109
+ - New environments in minutes
110
+ - Security hardened from day one
111
+ - Automated deployments via CI/CD
112
+ - Auto-scaling (2-10+ replicas)
113
+ - Multi-region high availability
114
+ - VPS native (you own & control)
115
+ - Auto backup & restore
116
+ - Live monitoring & alerts (Grafana, Prometheus, Loki)
117
+ - Zero vendor lock-in
118
+ - Cost effective ($15-20/mo single region or compose HA, $30+/mo K8s multi-region HA)
119
+
120
+ ### Developer Experience
121
+ - AI-ready codebase (Claude Code, Cursor, Windsurf, Copilot rules included)
122
+ - 50+ Shadcn UI components
123
+ - Full TypeScript across client and server
124
+ - Biome linting/formatting, Vitest test suite
125
+
126
+ ---
127
+
128
+ ## Documentation
129
+
130
+ | Document | Description |
131
+ |----------|-------------|
132
+ | [Technical Guide](./docs/technical.md) | Architecture, code examples, API patterns, scripts |
133
+ | [Design Guide](./docs/design.md) | Brand identity, visual design, UX principles |
134
+ | [Test Suite](./docs/tests.md) | Test types, coverage, and how to run them |
135
+
136
+ ### Deployment Guides
137
+
138
+ | Guide | Best For |
139
+ |-------|----------|
140
+ | [Hetzner Cloud](./docs/deploy-hetzner.md) | Cost-effective VPS hosting (single-node + HA) |
141
+ | [Kubernetes README](./carbon/k8s/README.md) | K8s autoscaling, worker bounds configuration, HA cluster setup |
142
+
143
+ ### Integration Guides
144
+
145
+ | Guide | Description |
146
+ |-------|-------------|
147
+ | [n8n Integration](./docs/integrations/n8n.md) | Workflow automation |
148
+ | [Observability](./docs/integrations/observability.md) | Prometheus, Grafana, Loki |
149
+
150
+ ---
151
+
152
+ ## Performance
153
+
154
+ <!-- BEGIN:perf-table -->
155
+ <!-- Auto-generated by `pnpm test:e2e:batch` — do not edit by hand -->
156
+
157
+ | Scenario | Cold deploy | Warm deploy | Backup | Restore | Scale | Destroy |
158
+ | --- | ---: | ---: | ---: | ---: | ---: | ---: |
159
+ | compose | 4m 37s | 33.3s | 15.7s | 4m 12s | 6m 12s | 42.9s |
160
+ | compose-ha | 7m 44s | 3m 45s | 16.1s | 8m 15s | 9m 49s | 41.7s |
161
+ | k8s | 10m 24s | 2.3s | 15.9s | 12m 34s | 2m 57s | 3m 35s |
162
+ | k8s-ha | 15m 27s | 53.5s | 15.6s | 17m 37s | 9m 9s | 2m 22s |
163
+
164
+ _End-to-end wall-clock from the last fully-green e2e matrix run against real Hetzner Cloud infra · run `a2ec81a` on 2026-05-19 · methodology: [docs/tests.md](./docs/tests.md)._
165
+ <!-- END:perf-table -->
166
+
167
+ ---
168
+
169
+ ## License & Terms
170
+
171
+ The CLI is open source under the [GNU Affero General Public License v3.0](./LICENSE). **Building from source is free for any use, forever.**
172
+
173
+ Using the distributed `npx vibecarbon` package requires a license for deployment commands:
174
+
175
+ | Tier | Price | Who |
176
+ |------|-------|-----|
177
+ | **Graphite** | Free | Local dev — create, up, down, all add-ons |
178
+ | **Diamond** | $149 lifetime | Full automation for indie hackers & startups |
179
+ | **Fullerene** | $499 lifetime | Commercial license for agencies & enterprise |
180
+
181
+ See [TERMS.md](./TERMS.md) for full usage terms. Generated project code is [MIT](./carbon/LICENSE) — you own your app outright.
182
+
183
+ ---
184
+
185
+ ## Support
186
+
187
+ - GitHub Issues: [Report bugs or request features](https://github.com/hyperformant/vibecarbon/issues)
188
+ - GitHub: [github.com/hyperformant/vibecarbon](https://github.com/hyperformant/vibecarbon)
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bash
2
+ # Quality gate: runs tests when test-maintainer marks a task complete.
3
+ # Exit 0 = pass, exit 2 = block with feedback message.
4
+ set -euo pipefail
5
+
6
+ TEAMMATE=$(jq -r '.teammate_name // empty' 2>/dev/null || true)
7
+
8
+ case "$TEAMMATE" in
9
+ test-maintainer)
10
+ ;;
11
+ *)
12
+ exit 0
13
+ ;;
14
+ esac
15
+
16
+ if ! pnpm test 2>&1; then
17
+ echo "Tests are failing. Fix them before marking the task complete."
18
+ exit 2
19
+ fi
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env bash
2
+ # Quality gate: runs lint + typecheck when backend-engineer or frontend-engineer go idle.
3
+ # Exit 0 = pass, exit 2 = block with feedback message.
4
+ set -euo pipefail
5
+
6
+ TEAMMATE=$(jq -r '.teammate_name // empty' 2>/dev/null || true)
7
+
8
+ case "$TEAMMATE" in
9
+ backend-engineer|frontend-engineer)
10
+ ;;
11
+ *)
12
+ exit 0
13
+ ;;
14
+ esac
15
+
16
+ ERRORS=""
17
+
18
+ if ! pnpm lint 2>&1; then
19
+ ERRORS+="Lint errors found. Run 'pnpm lint' to see details.\n"
20
+ fi
21
+
22
+ if ! pnpm typecheck 2>&1; then
23
+ ERRORS+="Type errors found. Run 'pnpm typecheck' to see details.\n"
24
+ fi
25
+
26
+ if [ -n "$ERRORS" ]; then
27
+ echo -e "$ERRORS"
28
+ exit 2
29
+ fi
@@ -0,0 +1,29 @@
1
+ {
2
+ "env": {
3
+ "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
4
+ },
5
+ "hooks": {
6
+ "TeammateIdle": [
7
+ {
8
+ "matcher": "",
9
+ "hooks": [
10
+ {
11
+ "type": "command",
12
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/teammate-idle-gate.sh"
13
+ }
14
+ ]
15
+ }
16
+ ],
17
+ "TaskCompleted": [
18
+ {
19
+ "matcher": "",
20
+ "hooks": [
21
+ {
22
+ "type": "command",
23
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/task-completed-gate.sh"
24
+ }
25
+ ]
26
+ }
27
+ ]
28
+ }
29
+ }
@@ -0,0 +1,6 @@
1
+ ---
2
+ description: Development rules for this full-stack TypeScript application
3
+ globs: ["**/*.ts", "**/*.tsx", "**/*.sql"]
4
+ ---
5
+
6
+ See [AGENTS.md](../../AGENTS.md) at the project root for all guidance (tech stack, commands, architecture, key patterns, and mandatory security rules). Follow every rule in the **Security Rules (Mandatory)** section — violations introduce real vulnerabilities.
@@ -0,0 +1,57 @@
1
+ # Dependencies
2
+ node_modules
3
+ npm-debug.log*
4
+ pnpm-debug.log*
5
+
6
+ # Build output
7
+ dist
8
+
9
+ # Environment files
10
+ .env
11
+ .env.local
12
+ .env*.local
13
+
14
+ # IDE
15
+ .vscode
16
+ .idea
17
+ *.swp
18
+ *.swo
19
+
20
+ # OS
21
+ .DS_Store
22
+ Thumbs.db
23
+
24
+ # Git
25
+ .git
26
+ .gitignore
27
+
28
+ # Docker
29
+ Dockerfile*
30
+ docker-compose*.yml
31
+ .dockerignore
32
+
33
+ # Testing
34
+ coverage
35
+ tests
36
+ *.test.ts
37
+ *.spec.ts
38
+ __tests__
39
+
40
+ # Documentation
41
+ *.md
42
+ LICENSE
43
+
44
+ # Backup
45
+ backup
46
+
47
+ # Supabase volumes
48
+ volumes
49
+
50
+ # Infrastructure & tooling (not needed in app image)
51
+ k8s
52
+ supabase
53
+ .claude
54
+ .cursor
55
+ .github
56
+ .vibecarbon
57
+ .vibecarbon.json
@@ -0,0 +1,219 @@
1
+ # =============================================================================
2
+ # PROJECT CONFIGURATION
3
+ # =============================================================================
4
+
5
+ # Project name (used in Docker container names and network)
6
+ PROJECT_NAME="your-project-name"
7
+
8
+ # =============================================================================
9
+ # SUPABASE CONFIGURATION
10
+ # =============================================================================
11
+
12
+ # Supabase URLs (configured automatically by docker-compose)
13
+ SUPABASE_URL="http://localhost:8000"
14
+ VITE_SUPABASE_URL="http://localhost:8000"
15
+
16
+ # Supabase Keys (generated during bootstrap)
17
+ SUPABASE_ANON_KEY="your-anon-key-here"
18
+ VITE_SUPABASE_ANON_KEY="your-anon-key-here"
19
+ SUPABASE_SERVICE_ROLE_KEY="your-service-role-key-here"
20
+
21
+ # Site URL (your public domain)
22
+ SITE_URL="http://localhost:5173"
23
+
24
+ # =============================================================================
25
+ # ADMIN CREDENTIALS
26
+ # =============================================================================
27
+ # Admin user with dashboard access (Grafana, N8N, Metabase, etc.)
28
+ # Created during project setup via `vibecarbon create`
29
+ # Your actual credentials are in .env.local (gitignored)
30
+
31
+ ADMIN_EMAIL="admin@example.com"
32
+ ADMIN_PASSWORD="your-password-here"
33
+
34
+ # =============================================================================
35
+ # OAUTH PROVIDERS (optional)
36
+ # =============================================================================
37
+ # Configure these in Supabase Studio > Authentication > Providers
38
+
39
+ GOOGLE_ENABLED="false"
40
+ GOOGLE_CLIENT_ID=""
41
+ GOOGLE_CLIENT_SECRET=""
42
+
43
+ MICROSOFT_ENABLED="false"
44
+ MICROSOFT_CLIENT_ID=""
45
+ MICROSOFT_CLIENT_SECRET=""
46
+ MICROSOFT_TENANT_ID=""
47
+
48
+ # =============================================================================
49
+ # SMTP (optional - used by both Supabase Auth and the app)
50
+ # =============================================================================
51
+ # Get SMTP credentials from your email provider (e.g., Resend, Mailgun, AWS SES).
52
+ # These credentials are shared: Supabase Auth uses them for auth emails (password
53
+ # reset, verification) and the app uses them for transactional emails
54
+ # (welcome, invite, billing).
55
+
56
+ SMTP_HOST=""
57
+ SMTP_PORT="587"
58
+ SMTP_USER=""
59
+ SMTP_PASS=""
60
+ SMTP_ADMIN_EMAIL=""
61
+ SMTP_SENDER_NAME="Vibecarbon"
62
+
63
+ # =============================================================================
64
+ # EXTERNAL SERVICES (optional)
65
+ # =============================================================================
66
+
67
+ # Billing provider: "stripe" (default), "paddle", or "polar"
68
+ BILLING_PROVIDER="stripe"
69
+
70
+ # Stripe (default provider)
71
+ STRIPE_SECRET_KEY=""
72
+ STRIPE_WEBHOOK_SECRET=""
73
+ STRIPE_PRICE_STARTER=""
74
+ STRIPE_PRICE_PRO=""
75
+
76
+ # Paddle (alternative provider -- set BILLING_PROVIDER="paddle" to use)
77
+ # API key from Paddle dashboard > Developer Tools > Authentication
78
+ # Use sandbox for testing, production for live
79
+ PADDLE_API_KEY=""
80
+ PADDLE_WEBHOOK_SECRET=""
81
+ PADDLE_ENVIRONMENT="sandbox"
82
+ PADDLE_PRICE_STARTER=""
83
+ PADDLE_PRICE_PRO=""
84
+
85
+ # Polar (alternative provider -- set BILLING_PROVIDER="polar" to use)
86
+ # Access token from Polar dashboard > Settings > Developer
87
+ POLAR_ACCESS_TOKEN=""
88
+ POLAR_WEBHOOK_SECRET=""
89
+ POLAR_ORGANIZATION_ID=""
90
+ POLAR_PRICE_STARTER=""
91
+ POLAR_PRICE_PRO=""
92
+
93
+ # =============================================================================
94
+ # OBSERVABILITY (optional - enabled per-environment)
95
+ # =============================================================================
96
+ # Prometheus + Grafana + Loki stack
97
+ # Enable with: docker compose -f docker-compose.yml -f docker-compose.observability.yml up -d
98
+
99
+ GRAFANA_ADMIN_USER="admin"
100
+ GRAFANA_ADMIN_PASSWORD="your-grafana-password-here"
101
+ GRAFANA_URL="http://localhost:3002"
102
+
103
+ # =============================================================================
104
+ # OPTIONAL SERVICES (for admin dashboard visibility)
105
+ # =============================================================================
106
+ # These control which services appear in the admin dashboard
107
+ # Set automatically during project creation based on CLI flags
108
+
109
+ VITE_N8N_ENABLED="false"
110
+ VITE_METABASE_ENABLED="false"
111
+ VITE_OBSERVABILITY_ENABLED="false"
112
+
113
+ # =============================================================================
114
+ # N8N WORKFLOW AUTOMATION (optional)
115
+ # =============================================================================
116
+ # Enable with: docker compose -f docker-compose.yml -f docker-compose.n8n.yml up -d
117
+ # Access: http://n8n.localhost (requires super_admin role)
118
+
119
+ N8N_DB_PASSWORD="your-n8n-db-password-here"
120
+ N8N_ENCRYPTION_KEY="your-n8n-encryption-key-here"
121
+ N8N_HOST="n8n.localhost"
122
+ N8N_PROTOCOL="http"
123
+ N8N_WEBHOOK_URL="http://n8n.localhost/"
124
+ N8N_EDITOR_BASE_URL="http://n8n.localhost/"
125
+
126
+ # =============================================================================
127
+ # METABASE ANALYTICS (optional)
128
+ # =============================================================================
129
+ # Enable with: docker compose -f docker-compose.yml -f docker-compose.metabase.yml up -d
130
+ # Access: http://metabase.localhost (requires super_admin role)
131
+
132
+ METABASE_DB_PASSWORD="your-metabase-db-password-here"
133
+ METABASE_SITE_URL="http://metabase.localhost"
134
+
135
+ # =============================================================================
136
+ # S3 OBJECT STORAGE (required for production)
137
+ # =============================================================================
138
+ # Hetzner Object Storage for durable file storage and backups
139
+ # Create buckets and access keys at: https://console.hetzner.cloud/
140
+
141
+ # Primary region bucket (nbg1)
142
+ S3_PRIMARY_ENDPOINT="https://nbg1.your-objectstorage.com"
143
+ S3_PRIMARY_BUCKET="your-project-storage-nbg1"
144
+ S3_PRIMARY_REGION="nbg1"
145
+
146
+ # Standby region bucket (hel1)
147
+ S3_STANDBY_ENDPOINT="https://hel1.your-objectstorage.com"
148
+ S3_STANDBY_BUCKET="your-project-storage-hel1"
149
+ S3_STANDBY_REGION="hel1"
150
+
151
+ # Shared credentials (same access key works across regions in same project)
152
+ S3_ACCESS_KEY=""
153
+ S3_SECRET_KEY=""
154
+
155
+ # Sync interval in minutes (default: 5)
156
+ S3_SYNC_INTERVAL="5"
157
+
158
+ # =============================================================================
159
+ # PORT CONFIGURATION (for running multiple projects)
160
+ # =============================================================================
161
+ # Use DEV_PORT_OFFSET to shift all ports by a fixed amount when running
162
+ # multiple vibecarbon projects simultaneously on the same machine.
163
+ #
164
+ # Example: DEV_PORT_OFFSET=100 shifts ports:
165
+ # - Vite: 5173 → 5273
166
+ # - API: 3000 → 3100
167
+ # - DB: 5432 → 5532
168
+ # - Kong: 8000 → 8100
169
+ # - Traefik: 80 → 180
170
+ # - Grafana: 3002 → 3102
171
+ # - Prometheus: 9190 → 9290
172
+ # - Loki: 3100 → 3200
173
+
174
+ DEV_PORT_OFFSET="0"
175
+
176
+ # Override individual ports (takes precedence over offset):
177
+ # DEV_VITE_PORT="5173"
178
+ # DEV_API_PORT="3000"
179
+ # DEV_DB_PORT="5432"
180
+ # DEV_KONG_PORT="8000"
181
+ # DEV_TRAEFIK_PORT="80"
182
+ # DEV_GRAFANA_PORT="3002"
183
+ # DEV_PROMETHEUS_PORT="9190"
184
+ # DEV_LOKI_PORT="3100"
185
+
186
+ # =============================================================================
187
+ # INTERNATIONALIZATION
188
+ # =============================================================================
189
+ # Enabled languages live in app_settings.enabled_languages (admin Settings →
190
+ # Localization card), not in this env file. Translations live in
191
+ # src/client/locales/<code>.json. Built-in: en, es, fr, de, pt.
192
+
193
+ # =============================================================================
194
+ # ANALYTICS (optional - Plausible)
195
+ # =============================================================================
196
+ # Privacy-friendly analytics. Works with Plausible Cloud or self-hosted.
197
+ # Sign up at https://plausible.io or self-host: https://plausible.io/docs/self-hosting
198
+ #
199
+ # PLAUSIBLE_DOMAIN: your site's domain (e.g., "myapp.com")
200
+ # PLAUSIBLE_SCRIPT_URL: script URL (default: Plausible Cloud)
201
+ # - Cloud: https://plausible.io/js/script.js
202
+ # - Self-hosted: https://analytics.yourdomain.com/js/script.js
203
+
204
+ VITE_PLAUSIBLE_DOMAIN=""
205
+ VITE_PLAUSIBLE_SCRIPT_URL="https://plausible.io/js/script.js"
206
+
207
+ # =============================================================================
208
+ # ENVIRONMENT
209
+ # =============================================================================
210
+
211
+ NODE_ENV="development"
212
+ PORT="3000"
213
+
214
+ # Environment name shown in Super Admin (set automatically during deployment)
215
+ # Values: development, qa, staging, prod, etc.
216
+ VITE_ENVIRONMENT="development"
217
+
218
+ # App version shown in Super Admin (set automatically during deployment)
219
+ VITE_APP_VERSION="0.1.0"
@@ -0,0 +1,3 @@
1
+ # {{PROJECT_NAME}} Development Rules
2
+
3
+ See [AGENTS.md](../AGENTS.md) at the project root for all guidance (tech stack, commands, architecture, key patterns, and mandatory security rules). Follow every rule in the **Security Rules (Mandatory)** section — violations introduce real vulnerabilities.