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
@@ -0,0 +1,529 @@
1
+ {
2
+ "common": {
3
+ "back": "Retour",
4
+ "cancel": "Annuler",
5
+ "continue": "Continuer",
6
+ "create": "Créer",
7
+ "creating": "Création...",
8
+ "delete": "Supprimer",
9
+ "loading": "Chargement...",
10
+ "save": "Enregistrer les modifications",
11
+ "settings": "Paramètres",
12
+ "signOut": "Se déconnecter",
13
+ "skipForNow": "Ignorer pour l'instant",
14
+ "toggleTheme": "Changer le thème",
15
+ "free": "Gratuit",
16
+ "popular": "Populaire",
17
+ "manage": "Gérer",
18
+ "update": "Mettre à jour",
19
+ "remove": "Supprimer"
20
+ },
21
+ "nav": {
22
+ "docs": "Documentation",
23
+ "apiDocs": "API Docs",
24
+ "dashboard": "Dashboard",
25
+ "logIn": "Se connecter",
26
+ "signUp": "S'inscrire"
27
+ },
28
+ "sidebar": {
29
+ "dashboard": "Dashboard",
30
+ "uiComponents": "Formulaires",
31
+ "charts": "Graphiques",
32
+ "menu": "Menu",
33
+ "selectOrganization": "Sélectionner une organisation",
34
+ "createOrganization": "Créer une organisation",
35
+ "userSettings": "Paramètres utilisateur",
36
+ "profile": "Profil",
37
+ "billing": "Facturation",
38
+ "security": "Sécurité",
39
+ "orgDetails": "Détails de l'org.",
40
+ "members": "Membres",
41
+ "superAdmin": "Super Admin",
42
+ "overview": "Vue d'ensemble",
43
+ "organizations": "Organisations",
44
+ "users": "Utilisateurs",
45
+ "notifications": "Notifications",
46
+ "logs": "Journaux",
47
+ "theme": "Thème",
48
+ "settings": "Paramètres"
49
+ },
50
+ "createOrg": {
51
+ "title": "Créer une organisation",
52
+ "description": "Ajoute une nouvelle organisation pour gérer ton équipe et tes projets.",
53
+ "nameLabel": "Nom de l'organisation",
54
+ "namePlaceholder": "Saisir le nom de l'organisation"
55
+ },
56
+ "auth": {
57
+ "checkYourEmail": "Vérifie ta messagerie",
58
+ "createAccount": "Créer un compte",
59
+ "signIn": "Se connecter",
60
+ "signUp": "S'inscrire",
61
+ "signInAction": "Se connecter",
62
+ "magicLinkSent": "Nous avons envoyé un lien de connexion à {{email}}",
63
+ "poweredBy": "Propulsé par Supabase Auth",
64
+ "magicLinkExpiry": "Clique sur le lien dans ta messagerie pour te connecter. Le lien expire dans 1 heure.",
65
+ "backToSignIn": "Retour à la connexion",
66
+ "passwordInstead": "Se connecter avec un mot de passe",
67
+ "namePlaceholder": "Nom",
68
+ "emailPlaceholder": "E-mail",
69
+ "passwordPlaceholder": "Mot de passe",
70
+ "sending": "Envoi en cours...",
71
+ "sendMagicLink": "Envoyer le magic link",
72
+ "signInWithMagicLink": "Se connecter avec le magic link",
73
+ "forgotPassword": "Mot de passe oublié ?",
74
+ "orContinueWith": "Ou continuer avec",
75
+ "alreadyHaveAccount": "Tu as déjà un compte ?",
76
+ "dontHaveAccount": "Tu n'as pas de compte ?",
77
+ "authFailed": "Échec de l'authentification",
78
+ "magicLinkFailed": "Échec de l'envoi du magic link",
79
+ "oauthFailed": "Échec OAuth"
80
+ },
81
+ "dashboard": {
82
+ "title": "Dashboard",
83
+ "welcomeBack": "Bon retour !",
84
+ "signedInAs": "Connecté en tant que",
85
+ "nextSteps": "Premiers pas",
86
+ "nextStepsDescription": "Configure les intégrations restantes de ton application.",
87
+ "exploreStudio": "Explorer Supabase Studio",
88
+ "configureOAuth": "Configurer les fournisseurs OAuth",
89
+ "setupStripe": "Configurer la facturation Stripe",
90
+ "deployProduction": "Déployer en production",
91
+ "totalUsers": "Utilisateurs totaux",
92
+ "newSignups": "Nouvelles inscriptions",
93
+ "activeUsers": "Utilisateurs actifs",
94
+ "organizations": "Organisations",
95
+ "vsLastMonth": "{{diff}} vs le mois dernier",
96
+ "newThisMonth": "+{{count}} nouveaux ce mois-ci",
97
+ "greeting": {
98
+ "morning": "Bonjour",
99
+ "afternoon": "Bon après-midi",
100
+ "evening": "Bonsoir"
101
+ }
102
+ },
103
+ "profile": {
104
+ "title": "Profil",
105
+ "description": "Gère tes informations personnelles",
106
+ "profileInfo": "Informations du profil",
107
+ "profileInfoDescription": "Mets à jour tes données personnelles et ta photo de profil.",
108
+ "fullName": "Nom complet",
109
+ "namePlaceholder": "Saisis ton nom",
110
+ "email": "E-mail",
111
+ "emailChangeHint": "Contacte le support pour modifier ton adresse e-mail.",
112
+ "account": "Compte",
113
+ "accountDescription": "Gère les paramètres de ton compte.",
114
+ "deleteAccount": "Supprimer le compte",
115
+ "deleteAccountDescription": "Supprime définitivement ton compte et toutes les données associées.",
116
+ "deleteAccountConfirmTitle": "Supprimer ton compte ?",
117
+ "deleteAccountConfirmDescription": "Cette action est irréversible. Ton compte, tes données de profil et toutes les informations associées seront supprimés définitivement.",
118
+ "deleteAccountConfirmButton": "Supprimer mon compte",
119
+ "superAdminCannotDelete": "Les comptes super administrateur ne peuvent pas être supprimés. Retire d'abord le rôle super_admin, puis réessaie."
120
+ },
121
+ "billing": {
122
+ "title": "Facturation",
123
+ "description": "Paramètres d'abonnement et de paiement",
124
+ "notConfigured": "La facturation n'est pas configurée. Définis <code>STRIPE_SECRET_KEY</code> et <code>STRIPE_WEBHOOK_SECRET</code> dans ton environnement pour l'activer.",
125
+ "currentPlan": "Abonnement actuel",
126
+ "onPlan": "Tu es sur le plan <strong>{{plan}}</strong>.",
127
+ "trial": "Essai",
128
+ "cancelsOn": "Annulation le {{date}}",
129
+ "subscriptionEndsOn": "Ton abonnement se terminera le ",
130
+ "nextBillingDate": "Prochaine date de facturation : ",
131
+ "changePlan": "Changer de plan",
132
+ "choosePlan": "Choisir un plan",
133
+ "changePlanDescription": "Passe à un autre plan via le portail client.",
134
+ "choosePlanDescription": "Sélectionne le plan qui te convient le mieux.",
135
+ "currentPlanButton": "Abonnement actuel",
136
+ "switchPlan": "Changer de plan",
137
+ "upgrade": "Mettre à niveau",
138
+ "paymentMethod": "Moyen de paiement",
139
+ "paymentMethodDescription": "Gère tes informations de paiement via le portail client.",
140
+ "paymentOnFile": "Moyen de paiement enregistré",
141
+ "manageInPortal": "Gérer dans le portail client",
142
+ "noPaymentMethod": "Aucun moyen de paiement",
143
+ "addCardDescription": "Ajoute une carte pour accélérer le paiement",
144
+ "addCard": "Ajouter une carte",
145
+ "billingHistory": "Historique de facturation",
146
+ "billingHistoryDescription": "Consulte et télécharge tes factures passées.",
147
+ "viewInPortal": "Consulte ton historique de facturation complet dans le portail client.",
148
+ "viewInvoices": "Voir les factures",
149
+ "noBillingHistory": "Aucun historique de facturation pour l'instant",
150
+ "invoicesAppearHere": "Tes factures apparaîtront ici une fois que tu auras mis à niveau ton abonnement."
151
+ },
152
+ "security": {
153
+ "title": "Sécurité",
154
+ "description": "Gestion du mot de passe, MFA et des sessions",
155
+ "mfaRequired": "Authentification à deux facteurs requise",
156
+ "mfaRequiredDescription": "Ton organisation exige l'authentification à deux facteurs. Configure-la pour continuer.",
157
+ "twoFactor": "Authentification à deux facteurs",
158
+ "twoFactorDescription": "Ajoute une couche de sécurité supplémentaire à ton compte en exigeant un code de vérification de ton application d'authentification.",
159
+ "mfaEnabled": "L'authentification à deux facteurs est activée",
160
+ "mfaEnabledDescription": "Ton compte est protégé par une application d'authentification.",
161
+ "enrolledAuthenticators": "Authentificateurs enregistrés",
162
+ "authenticatorApp": "Application d'authentification",
163
+ "mfaNotEnabled": "L'authentification à deux facteurs n'est pas activée",
164
+ "mfaNotEnabledDescription": "Active le 2FA pour ajouter une couche de sécurité supplémentaire à ton compte.",
165
+ "enableMfa": "Activer l'authentification à deux facteurs",
166
+ "settingUp": "Configuration...",
167
+ "mfaRequiredByOrg": "L'authentification à deux facteurs est requise par ton organisation.",
168
+ "setupMfa": "Configurer l'authentification à deux facteurs",
169
+ "setupMfaDescription": "Scanne le code QR avec ton application d'authentification, puis saisis le code de vérification.",
170
+ "cantScan": "Impossible de scanner ? Saisis ce code manuellement :",
171
+ "enterCode": "Saisir le code de vérification",
172
+ "verifying": "Vérification...",
173
+ "verifyAndEnable": "Vérifier et activer",
174
+ "disableMfa": "Désactiver l'authentification à deux facteurs ?",
175
+ "disableMfaDescription": "Cela supprimera l'authentificateur de ton compte. Tu pourras le reconfigurer à tout moment.",
176
+ "disableMfaWarning": "Avertissement : ton organisation exige l'authentification à deux facteurs. Tu devras la reconfigurer avant de pouvoir accéder à ton compte.",
177
+ "disabling": "Désactivation...",
178
+ "disable2fa": "Désactiver le 2FA"
179
+ },
180
+ "onboarding": {
181
+ "getStarted": "Commencer",
182
+ "steps": {
183
+ "profile": "Profil",
184
+ "organization": "Organisation",
185
+ "plan": "Plan",
186
+ "invite": "Inviter"
187
+ },
188
+ "profile": {
189
+ "title": "Bienvenue ! Comment t'appelles-tu ?",
190
+ "description": "Cela nous aide à personnaliser ton expérience.",
191
+ "fullName": "Nom complet",
192
+ "placeholder": "Jane Smith"
193
+ },
194
+ "org": {
195
+ "title": "Crée ton organisation",
196
+ "description": "Les organisations t'aident à gérer tes équipes et projets.",
197
+ "nameLabel": "Nom de l'organisation",
198
+ "placeholder": "Acme Inc",
199
+ "error": "Échec de la création de l'organisation"
200
+ },
201
+ "plan": {
202
+ "title": "Choisis ton plan",
203
+ "description": "Tu pourras toujours le modifier plus tard.",
204
+ "continueWithFree": "Continuer avec Gratuit",
205
+ "continueToCheckout": "Continuer vers le paiement",
206
+ "dayTrial": "Essai de {{days}} jours"
207
+ },
208
+ "invite": {
209
+ "title": "Invite ton équipe",
210
+ "description": "Ajoute des membres de l'équipe par e-mail. Tu peux aussi le faire plus tard.",
211
+ "emailLabel": "Adresses e-mail",
212
+ "placeholder": "alice@example.com, bob@example.com",
213
+ "hint": "Sépare plusieurs e-mails par des virgules.",
214
+ "finish": "Terminer la configuration"
215
+ }
216
+ },
217
+ "charts": {
218
+ "title": "Graphiques",
219
+ "revenue": "Revenus",
220
+ "revenueDescription": "Revenus mensuels, jan–juin",
221
+ "revenueSparkline": "$29.8k",
222
+ "newUsers": "Nouveaux utilisateurs",
223
+ "activeUsers": "Utilisateurs actifs",
224
+ "activeUsersDescription": "Inscriptions hebdomadaires — nouveaux vs. récurrents",
225
+ "mrr": "MRR",
226
+ "mrrGrowth": "Croissance MRR",
227
+ "mrrGrowthDescription": "Revenus mensuels récurrents cumulés",
228
+ "mrrSparkline": "$31k",
229
+ "grossMargin": "Marge brute",
230
+ "grossMarginSparkline": "53%",
231
+ "planDistribution": "Répartition des plans",
232
+ "planDistributionDescription": "Répartition par niveau d'abonnement",
233
+ "featureUsage": "Utilisation des fonctionnalités",
234
+ "featureUsageDescription": "Adoption sur 6 domaines du produit",
235
+ "revenueAndMargin": "Revenus et marge",
236
+ "revenueAndMarginDescription": "Revenus mensuels avec % de marge brute"
237
+ },
238
+ "theme": {
239
+ "title": "Thème",
240
+ "description": "Personnalise les couleurs de marque et l'apparence de l'app",
241
+ "lightMode": "Mode clair",
242
+ "darkMode": "Mode sombre",
243
+ "borderRadius": "Rayon de bordure",
244
+ "resetToDefaults": "Rétablir les valeurs par défaut",
245
+ "saveChanges": "Enregistrer les modifications",
246
+ "saved": "Thème enregistré",
247
+ "saveFailed": "Échec de l'enregistrement du thème",
248
+ "smoothScrolling": "Défilement fluide",
249
+ "smoothScrollEnabled": "Activer le défilement fluide",
250
+ "smoothScrollIntensity": "Intensité",
251
+ "smoothScrollDuration": "Durée de {{value}}s",
252
+ "colorSlots": {
253
+ "gradientStart": "Début du fond",
254
+ "gradientEnd": "Fin du fond",
255
+ "card": "Carte",
256
+ "primary": "Primaire",
257
+ "primaryDim": "Primaire atténué",
258
+ "primaryForeground": "Texte primaire",
259
+ "secondaryAccent": "Accent",
260
+ "secondaryAccentForeground": "Texte d'accent",
261
+ "destructive": "Destructif",
262
+ "warning": "Avertissement",
263
+ "success": "Succès"
264
+ }
265
+ },
266
+ "admin": {
267
+ "impersonating": "Vue en tant que {{email}}",
268
+ "stopImpersonating": "Arrêter",
269
+ "loginAsUser": "Se connecter en tant qu'utilisateur",
270
+ "impersonateConfirm": "Tu seras connecté en tant que cet utilisateur. Tu peux revenir à ton compte administrateur à tout moment.",
271
+ "cannotImpersonate": "Impossible d'usurper l'identité de cet utilisateur"
272
+ },
273
+ "landing": {
274
+ "hero": {
275
+ "badge": "Entièrement automatisé · Self-Hosted",
276
+ "headline1": "Qualité professionnelle",
277
+ "subheading": "Architecture sécurisée, évolutive et entièrement automatisée, et kit de démarrage SaaS méticuleusement conçu pour l'IA.",
278
+ "getUpdates": "Recevoir les mises à jour"
279
+ },
280
+ "metrics": {
281
+ "time": {
282
+ "value": "< 5 min",
283
+ "label": "De zéro à la production"
284
+ },
285
+ "services": {
286
+ "value": "12 services",
287
+ "label": "Provisionnés automatiquement"
288
+ },
289
+ "config": {
290
+ "value": "Zéro config",
291
+ "label": "Sécurité dès le départ"
292
+ },
293
+ "commands": {
294
+ "value": "3 commandes",
295
+ "label": "Créer · développer · déployer"
296
+ }
297
+ },
298
+ "logoStrip": {
299
+ "label": "Optimisé pour les outils que tu utilises"
300
+ },
301
+ "workflow": {
302
+ "headline": "Trois commandes pour aller en production",
303
+ "subheading": "De zéro à une infrastructure prête pour la production en minutes, pas en mois",
304
+ "create": {
305
+ "label": "Créer",
306
+ "description": "App full-stack avec auth, base de données, API et manifestes Kubernetes — prête à l'emploi."
307
+ },
308
+ "develop": {
309
+ "label": "Développer",
310
+ "description": "Lance tout ton environnement de développement : base de données, auth, API et frontend avec rechargement à chaud."
311
+ },
312
+ "deploy": {
313
+ "label": "Déployer",
314
+ "description": "Déploie en production avec mise à l'échelle automatique, haute disponibilité, monitoring, CI/CD et plus encore."
315
+ }
316
+ },
317
+ "techStack": {
318
+ "headline": "Construit sur une technologie qui",
319
+ "headlineHighlight": "tient la route",
320
+ "subheading": "Chaque couche du stack est éprouvée à grande échelle — de l'UI à l'orchestration.",
321
+ "addOnsLabel": "Modules complémentaires optionnels",
322
+ "items": {
323
+ "react": "UI ultra-rapide",
324
+ "typescript": "Typage de bout en bout",
325
+ "hono": "Framework serveur de 13KB",
326
+ "supabase": "Auth, DB & temps réel",
327
+ "tailwind": "Styles utilitaires",
328
+ "shadcn": "50+ composants prêts",
329
+ "tanstack": "Récupération de données intelligente",
330
+ "stripe": "Paiements et facturation",
331
+ "mdx": "Blog, docs & changelog",
332
+ "i18next": "Support multilingue",
333
+ "docker": "Déploiements conteneurisés",
334
+ "kubernetes": "Orchestration en production"
335
+ },
336
+ "addOns": {
337
+ "observability": {
338
+ "description": "Grafana, Prometheus & Loki — métriques, journaux et tableaux de bord préconfigurés."
339
+ },
340
+ "metabase": {
341
+ "description": "Business intelligence self-hosted avec accès direct à ta base de données."
342
+ },
343
+ "n8n": {
344
+ "description": "Automatisation visuelle des flux de travail pour les tâches en arrière-plan, les webhooks et les intégrations."
345
+ },
346
+ "redis": {
347
+ "description": "Cache en mémoire et files d'attente pour les charges de travail à haut débit."
348
+ }
349
+ }
350
+ },
351
+ "architecture": {
352
+ "badge": "Architecture",
353
+ "headline": "Stack complet, perfectionné.",
354
+ "subheading": "De React à PostgreSQL — configuré et connecté dès le départ."
355
+ },
356
+ "comparison": {
357
+ "headline": "Évolutif &",
358
+ "headlineHighlight": "sécurisé.",
359
+ "subheading": "Lance vite — sans tout faire exploser.",
360
+ "hacked": {
361
+ "risk": "Se faire pirater",
362
+ "protection": "Sécurité renforcée",
363
+ "how": "Proxy Traefik, règles de pare-feu, en-têtes CSP, limitation du débit"
364
+ },
365
+ "exposed": {
366
+ "risk": "Base de données exposée",
367
+ "protection": "Isolation de la base de données",
368
+ "how": "Base de données isolée en réseau, sécurité au niveau des lignes, identifiants à portée limitée"
369
+ },
370
+ "traffic": {
371
+ "risk": "Ne supporte pas le trafic",
372
+ "protection": "Mise à l'échelle automatique",
373
+ "how": "Kubernetes autoscaling sur les pods et les nœuds VPS"
374
+ },
375
+ "redundancy": {
376
+ "risk": "Zéro redondance",
377
+ "protection": "Haute disponibilité",
378
+ "how": "Multi-région avec surveillance de la santé & failover en une commande"
379
+ },
380
+ "visibility": {
381
+ "risk": "Aucune visibilité",
382
+ "protection": "Observabilité totale",
383
+ "how": "Grafana & Prometheus natifs, configurés par environnement"
384
+ },
385
+ "dataLoss": {
386
+ "risk": "Perte de données",
387
+ "protection": "Sauvegardes automatisées",
388
+ "how": "Sauvegardes S3 planifiées avec restauration en une commande"
389
+ }
390
+ },
391
+ "aiIntegration": {
392
+ "headline1": "Fonctionne avec",
393
+ "headlineHighlight": "n'importe quel outil IA",
394
+ "headline2": "que tu utilises",
395
+ "subheading": "Chaque projet est livré avec des fichiers d'instructions spécifiques à chaque outil et des garde-fous de sécurité intégrés. Ton IA écrit du code de qualité production qui suit tes politiques de sécurité dès le premier jour.",
396
+ "footer1": "Utilise n'importe quelle IA pour construire — Vibecarbon gère",
397
+ "footer2": "l'infrastructure et la sécurité",
398
+ "docs": {
399
+ "title": "Documentation native pour l'IA",
400
+ "description": "CLAUDE.md, AGENTS.md, .windsurfrules, instructions Copilot et règles Cursor sont livrés avec chaque projet — ton assistant IA obtient le contexte complet du code dès le premier prompt."
401
+ },
402
+ "guardrails": {
403
+ "title": "Garde-fous de sécurité intégrés",
404
+ "description": "AGENTS.md encode des règles obligatoires MUST/NEVER pour RLS, les vérifications d'auth, la sélection des clients et le renforcement de l'infrastructure — ainsi le code généré par l'IA suit tes politiques de sécurité par défaut."
405
+ },
406
+ "architecture": {
407
+ "title": "Architecture propre",
408
+ "description": "Séparation claire du code client, serveur et partagé avec des interfaces typées. Les agents IA peuvent naviguer, comprendre et étendre ton app sans halluciner la structure."
409
+ },
410
+ "patterns": {
411
+ "title": "Schémas prévisibles",
412
+ "description": "Chaque route valide avec Zod, chaque requête utilise le bon client Supabase, chaque table a RLS. Les agents IA reproduisent les mêmes schémas corrects à chaque fois."
413
+ }
414
+ },
415
+ "pricing": {
416
+ "headline1": "Du",
417
+ "headlineSketch": "brouillon",
418
+ "headline2": "à",
419
+ "headlineScale": "l'échelle.",
420
+ "subheading": "Même carbone, forme différente. Un seul paiement, accès à vie.",
421
+ "popular": "Le plus populaire",
422
+ "units": {
423
+ "forever": "toujours",
424
+ "oneTime": "paiement unique"
425
+ },
426
+ "graphite": {
427
+ "tagline": "Esquisse et conçois localement",
428
+ "cta": "Commencer à esquisser",
429
+ "features": {
430
+ "unlimitedProjects": "Projets illimités",
431
+ "localDev": "Environnement de développement local complet",
432
+ "addOns": "Tous les modules complémentaires inclus",
433
+ "supabase": "Stack Supabase complet",
434
+ "community": "Support communautaire",
435
+ "production": "Déploiement en production",
436
+ "ha": "Haute disponibilité",
437
+ "k8s": "Kubernetes autoscaling"
438
+ }
439
+ },
440
+ "diamond": {
441
+ "tagline": "Automatisation complète pour les indie hackers et startups.",
442
+ "cta": "Obtenir Diamond",
443
+ "features": {
444
+ "graphite": "Tout ce qu'inclut Graphite",
445
+ "deployModes": "Tous les modes de déploiement (Compose, HA, Kubernetes)",
446
+ "replication": "Réplication en streaming",
447
+ "healthChecks": "Vérifications de santé + failover en une commande",
448
+ "backups": "Sauvegardes S3 automatisées",
449
+ "cicd": "CI/CD via GitHub Actions",
450
+ "unlimited": "Serveurs et projets illimités",
451
+ "commercial": "Droits d'usage commercial"
452
+ }
453
+ },
454
+ "fullerene": {
455
+ "tagline": "Licence commerciale pour les Agences et l'Entreprise.",
456
+ "cta": "Passer à Fullerene",
457
+ "features": {
458
+ "diamond": "Tout ce qu'inclut Diamond",
459
+ "commercial": "Droits d'usage commercial (exception AGPL)",
460
+ "clients": "Déployez pour des clients et des organisations",
461
+ "corporate": "Équipes d'agence et d'entreprise",
462
+ "support": "Support e-mail prioritaire",
463
+ "lifetime": "Accès à vie"
464
+ }
465
+ }
466
+ },
467
+ "faq": {
468
+ "headline": "Questions fréquemment posées",
469
+ "subheading": "Tout ce que tu dois savoir avant de commencer.",
470
+ "q1": {
471
+ "question": "Qu'est-ce que j'obtiens dès le départ ?",
472
+ "answer": "Une app full-stack avec React 19, Hono API, Supabase self-hosted, auth, facturation, téléchargement de fichiers, blog, docs, i18n, manifestes Kubernetes et Docker Compose pour le développement local."
473
+ },
474
+ "q2": {
475
+ "question": "Puis-je tout modifier ou personnaliser ?",
476
+ "answer": "Oui. Tu possèdes 100% du code généré. Aucun enfermement propriétaire, aucune dépendance au moment de l'exécution sur Vibecarbon."
477
+ },
478
+ "q3": {
479
+ "question": "Quels fournisseurs cloud sont pris en charge ?",
480
+ "answer": "Hetzner Cloud (d'autres à venir), avec Docker Compose et des manifestes Kubernetes qui fonctionnent chez n'importe quel fournisseur — AWS, GCP, DigitalOcean et plus encore."
481
+ },
482
+ "q4": {
483
+ "question": "Comment fonctionne le déploiement ?",
484
+ "answer": "Lance \"npx vibecarbon deploy\" pour provisionner un VPS, installer k8s, configurer Traefik, déployer ton app avec HTTPS automatique et configurer les sauvegardes automatisées — tout en une seule commande."
485
+ },
486
+ "q5": {
487
+ "question": "Comment fonctionne la tarification ?",
488
+ "answer": "Graphite est gratuit pour toujours — crée des projets, développe localement et utilise tous les modules. Diamond (149 $ à vie) offre une automatisation complète pour les indie hackers et startups — tous les modes de déploiement, sauvegardes, CI/CD et mise à l'échelle. Fullerene (499 $ à vie) est la licence commerciale pour les agences et l'entreprise — déploie pour des clients et organisations sans restrictions AGPL. Paiement unique, sans abonnement."
489
+ },
490
+ "q6": {
491
+ "question": "Combien de projets puis-je créer avec une seule licence ?",
492
+ "answer": "Illimités. Une licence Diamond ou Fullerene couvre chaque projet que vous créez — pas de frais par projet. La licence est liée à vous ou à votre organisation."
493
+ },
494
+ "q7": {
495
+ "question": "Ai-je besoin de Fullerene pour facturer des utilisateurs ou exploiter un SaaS ?",
496
+ "answer": "Non. Diamond couvre le déploiement de votre propre produit — facturer les utilisateurs, exploiter un SaaS, créer une entreprise. Fullerene est la licence commerciale pour déployer pour le compte de quelqu'un d'autre : agences, entreprises et travaux pour clients. Le test : est-ce votre produit ? Diamond. Celui de quelqu'un d'autre ? Fullerene."
497
+ },
498
+ "q8": {
499
+ "question": "Que se passe-t-il si Vibecarbon ferme ses portes ?",
500
+ "answer": "Rien ne change pour votre application. Le code généré est sous licence MIT et n'a aucune dépendance d'exécution envers Vibecarbon — c'est simplement une base de code qui vous appartient entièrement. La CLI est open source sous AGPL, vous pouvez donc l'exécuter à partir des sources indéfiniment. Votre infrastructure tourne sur vos propres serveurs."
501
+ },
502
+ "q9": {
503
+ "question": "Faut-il avoir une expérience DevOps pour déployer ?",
504
+ "answer": "Non. La CLI gère le provisionnement, SSL, la mise à l'échelle, les sauvegardes et la supervision. Il vous faut un compte Hetzner, un domaine et des identifiants SMTP pour les e-mails — c'est tout. Tous les manifestes Kubernetes et les fichiers Docker Compose se trouvent dans votre projet si vous voulez comprendre ou personnaliser ce qui est configuré."
505
+ }
506
+ },
507
+ "newsletter": {
508
+ "placeholder": "Saisis ton e-mail",
509
+ "button": "S'abonner",
510
+ "success": "Vérifie ta messagerie pour confirmer ton abonnement.",
511
+ "errorEmpty": "Veuillez saisir votre adresse e-mail",
512
+ "errorInvalid": "Veuillez saisir une adresse e-mail valide"
513
+ },
514
+ "cta": {
515
+ "badge": "Sécurisé par conception",
516
+ "headline": "Prêt à lancer ta prochaine app ?",
517
+ "subheading": "Des apps IA incroyablement robustes en quelques minutes."
518
+ },
519
+ "footer": {
520
+ "userDocs": "Documentation",
521
+ "apiDocs": "API Docs",
522
+ "blog": "Blog",
523
+ "changelog": "Changelog",
524
+ "contact": "Contact",
525
+ "privacy": "Confidentialité",
526
+ "terms": "Conditions"
527
+ }
528
+ }
529
+ }