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.
- package/LICENSE +663 -0
- package/README.md +188 -0
- package/carbon/.claude/hooks/task-completed-gate.sh +19 -0
- package/carbon/.claude/hooks/teammate-idle-gate.sh +29 -0
- package/carbon/.claude/settings.json +29 -0
- package/carbon/.cursor/rules/vibecarbon.mdc +6 -0
- package/carbon/.dockerignore +57 -0
- package/carbon/.env.example +219 -0
- package/carbon/.github/copilot-instructions.md +3 -0
- package/carbon/.github/workflows/deploy.yml +346 -0
- package/carbon/.github/workflows/vibecarbon-build.yml +81 -0
- package/carbon/.windsurfrules +74 -0
- package/carbon/AGENTS.md +422 -0
- package/carbon/CLAUDE.md +3 -0
- package/carbon/DEVELOPMENT.md +187 -0
- package/carbon/Dockerfile +98 -0
- package/carbon/LICENSE +21 -0
- package/carbon/PRODUCTION.md +364 -0
- package/carbon/README.md +193 -0
- package/carbon/TESTING.md +138 -0
- package/carbon/backup/Dockerfile +75 -0
- package/carbon/backup/backup.sh +95 -0
- package/carbon/backup/compose-backup.sh +140 -0
- package/carbon/biome.json +83 -0
- package/carbon/cloud-init/docker-ce-setup.yaml +55 -0
- package/carbon/cloud-init/k3s/master-init.sh +215 -0
- package/carbon/cloud-init/k3s/supabase-init.sh +167 -0
- package/carbon/cloud-init/k3s/worker-init.sh +147 -0
- package/carbon/components.json +24 -0
- package/carbon/content/blog/authentication-guide.mdx +34 -0
- package/carbon/content/blog/getting-started.mdx +41 -0
- package/carbon/content/changelog/v0-1-0.mdx +40 -0
- package/carbon/content/docs/analytics.mdx +90 -0
- package/carbon/content/docs/authentication.mdx +231 -0
- package/carbon/content/docs/background-jobs.mdx +116 -0
- package/carbon/content/docs/cli.mdx +630 -0
- package/carbon/content/docs/database.mdx +236 -0
- package/carbon/content/docs/deployment.mdx +227 -0
- package/carbon/content/docs/development.mdx +238 -0
- package/carbon/content/docs/environments.mdx +84 -0
- package/carbon/content/docs/getting-started.mdx +112 -0
- package/carbon/content/docs/legal/privacy-policy.mdx +89 -0
- package/carbon/content/docs/legal/terms-of-service.mdx +99 -0
- package/carbon/content/docs/optional-services.mdx +160 -0
- package/carbon/db/Dockerfile +23 -0
- package/carbon/docker-compose.dev-init.yml +5 -0
- package/carbon/docker-compose.metabase.override.yml +14 -0
- package/carbon/docker-compose.metabase.prod.yml +28 -0
- package/carbon/docker-compose.metabase.yml +84 -0
- package/carbon/docker-compose.n8n.override.yml +14 -0
- package/carbon/docker-compose.n8n.prod.yml +31 -0
- package/carbon/docker-compose.n8n.yml +97 -0
- package/carbon/docker-compose.observability.override.yml +18 -0
- package/carbon/docker-compose.observability.prod.yml +28 -0
- package/carbon/docker-compose.observability.yml +125 -0
- package/carbon/docker-compose.override.yml +28 -0
- package/carbon/docker-compose.prod.yml +294 -0
- package/carbon/docker-compose.yml +508 -0
- package/carbon/docker-entrypoint.sh +12 -0
- package/carbon/ha/activate-standby.sh +52 -0
- package/carbon/ha/primary-init.sql +36 -0
- package/carbon/ha/standby-init.sh +74 -0
- package/carbon/k8s/LICENSE +99 -0
- package/carbon/k8s/README.md +272 -0
- package/carbon/k8s/base/app/deployment.yaml +130 -0
- package/carbon/k8s/base/app/hpa.yaml +44 -0
- package/carbon/k8s/base/app/kustomization.yaml +10 -0
- package/carbon/k8s/base/app/network-policy.yaml +124 -0
- package/carbon/k8s/base/app/pdb.yaml +14 -0
- package/carbon/k8s/base/app/rbac.yaml +36 -0
- package/carbon/k8s/base/app/service.yaml +16 -0
- package/carbon/k8s/base/backup/cronjob.yaml +120 -0
- package/carbon/k8s/base/backup/kustomization.yaml +7 -0
- package/carbon/k8s/base/backup/network-policy.yaml +31 -0
- package/carbon/k8s/base/backup/rbac.yaml +7 -0
- package/carbon/k8s/base/cluster-autoscaler/deployment.yaml +103 -0
- package/carbon/k8s/base/cluster-autoscaler/kustomization.yaml +17 -0
- package/carbon/k8s/base/cluster-autoscaler/rbac.yaml +109 -0
- package/carbon/k8s/base/config/configmap.yaml +48 -0
- package/carbon/k8s/base/config/kustomization.yaml +8 -0
- package/carbon/k8s/base/hetzner-ccm/kustomization.yaml +9 -0
- package/carbon/k8s/base/hetzner-csi/kustomization.yaml +9 -0
- package/carbon/k8s/base/kustomization.yaml +43 -0
- package/carbon/k8s/base/namespace.yaml +7 -0
- package/carbon/k8s/base/network-policies.yaml +95 -0
- package/carbon/k8s/base/registry/kustomization.yaml +5 -0
- package/carbon/k8s/base/registry/local-registry.yaml +193 -0
- package/carbon/k8s/base/traefik/certificate.yaml +21 -0
- package/carbon/k8s/base/traefik/configmap.yaml +13 -0
- package/carbon/k8s/base/traefik/deployment.yaml +165 -0
- package/carbon/k8s/base/traefik/ingressroute.yaml +141 -0
- package/carbon/k8s/base/traefik/kustomization.yaml +11 -0
- package/carbon/k8s/base/traefik/middleware.yaml +109 -0
- package/carbon/k8s/base/traefik/network-policy.yaml +92 -0
- package/carbon/k8s/base/traefik/service.yaml +38 -0
- package/carbon/k8s/flux/README.md +49 -0
- package/carbon/k8s/flux/clusters/primary/vibecarbon.yaml +128 -0
- package/carbon/k8s/flux/clusters/standby/vibecarbon.yaml +83 -0
- package/carbon/k8s/gitops/cert-manager-webhook-hetzner/helm-release.yaml +38 -0
- package/carbon/k8s/gitops/cert-manager-webhook-hetzner/helm-repository.yaml +16 -0
- package/carbon/k8s/gitops/cert-manager-webhook-hetzner/kustomization.yaml +10 -0
- package/carbon/k8s/gitops/supabase/helm-release.yaml +66 -0
- package/carbon/k8s/gitops/supabase/helm-repository.yaml +18 -0
- package/carbon/k8s/gitops/supabase/kustomization.yaml +33 -0
- package/carbon/k8s/infra/cert-manager-resources/cluster-issuers-cloudflare.yaml +51 -0
- package/carbon/k8s/infra/cert-manager-resources/cluster-issuers-hetzner.yaml +59 -0
- package/carbon/k8s/infra/cert-manager-resources/cluster-issuers-manual.yaml +43 -0
- package/carbon/k8s/infra/cert-manager-resources/kustomization.yaml +15 -0
- package/carbon/k8s/infra/kustomization.yaml +21 -0
- package/carbon/k8s/infra/traefik-crds/kustomization.yaml +10 -0
- package/carbon/k8s/overlays/local/configmap.yaml +23 -0
- package/carbon/k8s/overlays/local/ingressroute-studio.yaml +104 -0
- package/carbon/k8s/overlays/local/kustomization.yaml +215 -0
- package/carbon/k8s/overlays/local/namespace.yaml +8 -0
- package/carbon/k8s/overlays/local/secrets.yaml +32 -0
- package/carbon/k8s/overlays/production/kustomization.yaml +34 -0
- package/carbon/k8s/test-local.sh +318 -0
- package/carbon/k8s/values/supabase.values.yaml +133 -0
- package/carbon/package.json +154 -0
- package/carbon/runtime.Dockerfile +17 -0
- package/carbon/scripts/_dev-jwt.mjs +45 -0
- package/carbon/scripts/check-rls.ts +53 -0
- package/carbon/scripts/dev-init.js +191 -0
- package/carbon/scripts/dev.js +191 -0
- package/carbon/scripts/docker-down.js +63 -0
- package/carbon/scripts/docker-logs.js +59 -0
- package/carbon/scripts/docker-up.js +222 -0
- package/carbon/scripts/generate-dev-configs.sh +131 -0
- package/carbon/scripts/generate-rss.ts +116 -0
- package/carbon/scripts/generate-sitemap.ts +102 -0
- package/carbon/scripts/k8s-apply.js +71 -0
- package/carbon/scripts/k8s-delete.js +75 -0
- package/carbon/scripts/lib/manifest.js +176 -0
- package/carbon/scripts/secret-scan.mjs +278 -0
- package/carbon/scripts/validate-dev-configs.sh +101 -0
- package/carbon/src/client/App.tsx +202 -0
- package/carbon/src/client/assets/hyperformant-dark.svg +29 -0
- package/carbon/src/client/assets/hyperformant-light.svg +29 -0
- package/carbon/src/client/assets/logos/aider.svg +1 -0
- package/carbon/src/client/assets/logos/antigravity.svg +1 -0
- package/carbon/src/client/assets/logos/bolt.svg +1 -0
- package/carbon/src/client/assets/logos/claude-code.svg +1 -0
- package/carbon/src/client/assets/logos/copilot.svg +1 -0
- package/carbon/src/client/assets/logos/cursor.svg +1 -0
- package/carbon/src/client/assets/logos/gemini-cli.svg +1 -0
- package/carbon/src/client/assets/logos/lovable.svg +1 -0
- package/carbon/src/client/assets/logos/openai-codex.svg +1 -0
- package/carbon/src/client/assets/logos/v0.svg +1 -0
- package/carbon/src/client/assets/logos/windsurf.svg +1 -0
- package/carbon/src/client/assets/vibecarbon-icon.svg +19 -0
- package/carbon/src/client/assets/vibecarbon-logo-dark.svg +29 -0
- package/carbon/src/client/assets/vibecarbon-logo-light.svg +29 -0
- package/carbon/src/client/components/AIIntegrationSection.tsx +120 -0
- package/carbon/src/client/components/AppSidebar.tsx +760 -0
- package/carbon/src/client/components/ArchitectureSection.tsx +46 -0
- package/carbon/src/client/components/CTAFooter.tsx +59 -0
- package/carbon/src/client/components/ComparisonSection.tsx +132 -0
- package/carbon/src/client/components/ContentPanel.tsx +66 -0
- package/carbon/src/client/components/ContentSkeleton.tsx +21 -0
- package/carbon/src/client/components/ErrorBoundary.tsx +46 -0
- package/carbon/src/client/components/FAQSection.tsx +76 -0
- package/carbon/src/client/components/FileUpload.tsx +210 -0
- package/carbon/src/client/components/HeaderActions.tsx +17 -0
- package/carbon/src/client/components/Hero.tsx +608 -0
- package/carbon/src/client/components/ImpersonationBanner.tsx +31 -0
- package/carbon/src/client/components/LanguageSwitcher.tsx +67 -0
- package/carbon/src/client/components/Logo.tsx +87 -0
- package/carbon/src/client/components/LogoStrip.tsx +76 -0
- package/carbon/src/client/components/MetricsStrip.tsx +48 -0
- package/carbon/src/client/components/Nav.tsx +195 -0
- package/carbon/src/client/components/NewsletterSignup.tsx +147 -0
- package/carbon/src/client/components/NotificationDrawer.tsx +171 -0
- package/carbon/src/client/components/PageHeader.tsx +24 -0
- package/carbon/src/client/components/PlanGate.tsx +36 -0
- package/carbon/src/client/components/PricingSection.tsx +371 -0
- package/carbon/src/client/components/SEO.tsx +34 -0
- package/carbon/src/client/components/SmoothScroll.tsx +45 -0
- package/carbon/src/client/components/TechStackSection.tsx +165 -0
- package/carbon/src/client/components/WorkflowSection.tsx +604 -0
- package/carbon/src/client/components/admin/DockerLogs.tsx +276 -0
- package/carbon/src/client/components/admin/PerformanceMetrics.tsx +230 -0
- package/carbon/src/client/components/admin/ServiceCard.tsx +45 -0
- package/carbon/src/client/components/admin/ServicesStatus.tsx +296 -0
- package/carbon/src/client/components/architecture/ArchitectureDiagram.tsx +413 -0
- package/carbon/src/client/components/auth/AuthProvider.tsx +466 -0
- package/carbon/src/client/components/effects/FilmGrainOverlay.tsx +35 -0
- package/carbon/src/client/components/effects/FresnelEdge.tsx +49 -0
- package/carbon/src/client/components/effects/GlowTracker.tsx +46 -0
- package/carbon/src/client/components/effects/SparkBurst.tsx +145 -0
- package/carbon/src/client/components/effects/VGlowEffect.tsx +83 -0
- package/carbon/src/client/components/effects/index.ts +2 -0
- package/carbon/src/client/components/layouts/SidebarLayout.tsx +20 -0
- package/carbon/src/client/components/scroll/ScrollSection.tsx +76 -0
- package/carbon/src/client/components/scroll/ScrollytellingProvider.tsx +81 -0
- package/carbon/src/client/components/scroll/index.ts +2 -0
- package/carbon/src/client/components/ui/accordion.tsx +71 -0
- package/carbon/src/client/components/ui/alert-dialog.tsx +162 -0
- package/carbon/src/client/components/ui/alert.tsx +73 -0
- package/carbon/src/client/components/ui/aspect-ratio.tsx +22 -0
- package/carbon/src/client/components/ui/avatar.tsx +91 -0
- package/carbon/src/client/components/ui/badge.tsx +50 -0
- package/carbon/src/client/components/ui/breadcrumb.tsx +100 -0
- package/carbon/src/client/components/ui/button-group.tsx +78 -0
- package/carbon/src/client/components/ui/button.tsx +120 -0
- package/carbon/src/client/components/ui/calendar.tsx +182 -0
- package/carbon/src/client/components/ui/card.tsx +85 -0
- package/carbon/src/client/components/ui/carousel.tsx +227 -0
- package/carbon/src/client/components/ui/chart.tsx +357 -0
- package/carbon/src/client/components/ui/checkbox.tsx +27 -0
- package/carbon/src/client/components/ui/collapsible.tsx +15 -0
- package/carbon/src/client/components/ui/command.tsx +178 -0
- package/carbon/src/client/components/ui/context-menu.tsx +233 -0
- package/carbon/src/client/components/ui/dialog.tsx +132 -0
- package/carbon/src/client/components/ui/drawer.tsx +118 -0
- package/carbon/src/client/components/ui/dropdown-menu.tsx +242 -0
- package/carbon/src/client/components/ui/empty.tsx +94 -0
- package/carbon/src/client/components/ui/field.tsx +226 -0
- package/carbon/src/client/components/ui/hover-card.tsx +44 -0
- package/carbon/src/client/components/ui/input-group.tsx +146 -0
- package/carbon/src/client/components/ui/input-otp.tsx +83 -0
- package/carbon/src/client/components/ui/input.tsx +20 -0
- package/carbon/src/client/components/ui/item.tsx +188 -0
- package/carbon/src/client/components/ui/kbd.tsx +26 -0
- package/carbon/src/client/components/ui/label.tsx +21 -0
- package/carbon/src/client/components/ui/menubar.tsx +250 -0
- package/carbon/src/client/components/ui/navigation-menu.tsx +155 -0
- package/carbon/src/client/components/ui/pagination.tsx +102 -0
- package/carbon/src/client/components/ui/popover.tsx +75 -0
- package/carbon/src/client/components/ui/progress.tsx +66 -0
- package/carbon/src/client/components/ui/radio-group.tsx +36 -0
- package/carbon/src/client/components/ui/resizable.tsx +46 -0
- package/carbon/src/client/components/ui/scroll-area.tsx +48 -0
- package/carbon/src/client/components/ui/select.tsx +186 -0
- package/carbon/src/client/components/ui/separator.tsx +21 -0
- package/carbon/src/client/components/ui/sheet.tsx +124 -0
- package/carbon/src/client/components/ui/sidebar.tsx +702 -0
- package/carbon/src/client/components/ui/skeleton.tsx +13 -0
- package/carbon/src/client/components/ui/slider.tsx +57 -0
- package/carbon/src/client/components/ui/sonner.tsx +45 -0
- package/carbon/src/client/components/ui/spinner.tsx +15 -0
- package/carbon/src/client/components/ui/switch.tsx +30 -0
- package/carbon/src/client/components/ui/table.tsx +89 -0
- package/carbon/src/client/components/ui/tabs.tsx +73 -0
- package/carbon/src/client/components/ui/textarea.tsx +18 -0
- package/carbon/src/client/components/ui/toggle-group.tsx +87 -0
- package/carbon/src/client/components/ui/toggle.tsx +44 -0
- package/carbon/src/client/components/ui/tooltip.tsx +56 -0
- package/carbon/src/client/hooks/api/index.ts +14 -0
- package/carbon/src/client/hooks/api/useAuthSettings.ts +80 -0
- package/carbon/src/client/hooks/api/useSubscription.ts +87 -0
- package/carbon/src/client/hooks/use-mobile.ts +21 -0
- package/carbon/src/client/hooks/useMousePosition.ts +91 -0
- package/carbon/src/client/hooks/useNotifications.tsx +124 -0
- package/carbon/src/client/hooks/useOrganizationMembers.ts +127 -0
- package/carbon/src/client/hooks/useOrganizations.tsx +230 -0
- package/carbon/src/client/hooks/usePackageManager.ts +69 -0
- package/carbon/src/client/hooks/useReducedMotion.ts +20 -0
- package/carbon/src/client/hooks/useRunningServices.ts +114 -0
- package/carbon/src/client/hooks/useScrollProgress.ts +56 -0
- package/carbon/src/client/index.css +467 -0
- package/carbon/src/client/index.html +56 -0
- package/carbon/src/client/lib/admin-services.ts +151 -0
- package/carbon/src/client/lib/api.ts +32 -0
- package/carbon/src/client/lib/blog.ts +35 -0
- package/carbon/src/client/lib/changelog.ts +33 -0
- package/carbon/src/client/lib/docs-search.ts +101 -0
- package/carbon/src/client/lib/docs.ts +37 -0
- package/carbon/src/client/lib/i18n.ts +32 -0
- package/carbon/src/client/lib/supabase.ts +72 -0
- package/carbon/src/client/lib/tailwind-colors.ts +357 -0
- package/carbon/src/client/lib/theme.ts +117 -0
- package/carbon/src/client/lib/utils.ts +22 -0
- package/carbon/src/client/locales/de.json +529 -0
- package/carbon/src/client/locales/en.json +461 -0
- package/carbon/src/client/locales/es.json +529 -0
- package/carbon/src/client/locales/fr.json +529 -0
- package/carbon/src/client/locales/pt.json +529 -0
- package/carbon/src/client/main.tsx +56 -0
- package/carbon/src/client/mdx.d.ts +13 -0
- package/carbon/src/client/pages/ApiDocs.tsx +76 -0
- package/carbon/src/client/pages/AuthCallback.tsx +34 -0
- package/carbon/src/client/pages/Blog.tsx +167 -0
- package/carbon/src/client/pages/Changelog.tsx +171 -0
- package/carbon/src/client/pages/Charts.tsx +388 -0
- package/carbon/src/client/pages/Checkout.tsx +227 -0
- package/carbon/src/client/pages/Contact.tsx +174 -0
- package/carbon/src/client/pages/Dashboard.tsx +368 -0
- package/carbon/src/client/pages/Docs.tsx +372 -0
- package/carbon/src/client/pages/ForgotPassword.tsx +111 -0
- package/carbon/src/client/pages/Home.tsx +187 -0
- package/carbon/src/client/pages/Legal.tsx +100 -0
- package/carbon/src/client/pages/Login.tsx +408 -0
- package/carbon/src/client/pages/MFAVerify.tsx +156 -0
- package/carbon/src/client/pages/NotFound.tsx +21 -0
- package/carbon/src/client/pages/Onboarding.tsx +246 -0
- package/carbon/src/client/pages/ResetPassword.tsx +200 -0
- package/carbon/src/client/pages/UIComponents.tsx +390 -0
- package/carbon/src/client/pages/admin/ContactSubmissions.tsx +220 -0
- package/carbon/src/client/pages/admin/Dashboard.tsx +24 -0
- package/carbon/src/client/pages/admin/Infrastructure.tsx +257 -0
- package/carbon/src/client/pages/admin/Jobs.tsx +225 -0
- package/carbon/src/client/pages/admin/Logs.tsx +18 -0
- package/carbon/src/client/pages/admin/Newsletter.tsx +300 -0
- package/carbon/src/client/pages/admin/Notifications.tsx +603 -0
- package/carbon/src/client/pages/admin/Organizations.tsx +306 -0
- package/carbon/src/client/pages/admin/Settings.tsx +314 -0
- package/carbon/src/client/pages/admin/Theme.tsx +465 -0
- package/carbon/src/client/pages/admin/Users.tsx +365 -0
- package/carbon/src/client/pages/api-docs.css +156 -0
- package/carbon/src/client/pages/organizations/Details.tsx +200 -0
- package/carbon/src/client/pages/organizations/Members.tsx +402 -0
- package/carbon/src/client/pages/settings/Billing.tsx +473 -0
- package/carbon/src/client/pages/settings/Profile.tsx +160 -0
- package/carbon/src/client/pages/settings/Security.tsx +341 -0
- package/carbon/src/client/public/favicon.svg +19 -0
- package/carbon/src/client/public/robots.txt +8 -0
- package/carbon/src/server/billing/index.ts +104 -0
- package/carbon/src/server/billing/provider.ts +81 -0
- package/carbon/src/server/billing/providers/paddle.ts +314 -0
- package/carbon/src/server/billing/providers/polar.ts +325 -0
- package/carbon/src/server/billing/providers/stripe.ts +233 -0
- package/carbon/src/server/emails/templates.ts +116 -0
- package/carbon/src/server/index.ts +554 -0
- package/carbon/src/server/lib/auth.ts +6 -0
- package/carbon/src/server/lib/email.ts +64 -0
- package/carbon/src/server/lib/env.ts +112 -0
- package/carbon/src/server/lib/errors.ts +21 -0
- package/carbon/src/server/lib/logger.ts +17 -0
- package/carbon/src/server/lib/rate-limiter.ts +288 -0
- package/carbon/src/server/lib/request.ts +34 -0
- package/carbon/src/server/lib/stripe.ts +42 -0
- package/carbon/src/server/lib/supabase.ts +65 -0
- package/carbon/src/server/middleware/requirePlan.ts +80 -0
- package/carbon/src/server/routes/_internal/services-status.ts +958 -0
- package/carbon/src/server/routes/_internal/verify-role.ts +185 -0
- package/carbon/src/server/routes/health.ts +48 -0
- package/carbon/src/server/routes/v1/admin/contact.ts +128 -0
- package/carbon/src/server/routes/v1/admin/jobs.ts +171 -0
- package/carbon/src/server/routes/v1/admin/newsletter.ts +237 -0
- package/carbon/src/server/routes/v1/auth.ts +390 -0
- package/carbon/src/server/routes/v1/billing.ts +718 -0
- package/carbon/src/server/routes/v1/contact.ts +93 -0
- package/carbon/src/server/routes/v1/index.ts +1333 -0
- package/carbon/src/server/routes/v1/newsletter.ts +181 -0
- package/carbon/src/server/routes/v1/performance.ts +157 -0
- package/carbon/src/server/routes/v1/stats.ts +170 -0
- package/carbon/src/server/routes/v1/theme.ts +106 -0
- package/carbon/src/server/routes/webhooks/billing.ts +376 -0
- package/carbon/src/server/routes/webhooks/stripe.ts +276 -0
- package/carbon/src/server/types.ts +11 -0
- package/carbon/src/shared/pricing.ts +155 -0
- package/carbon/src/shared/types.ts +338 -0
- package/carbon/supabase/migrations/00001_init.sql +717 -0
- package/carbon/supabase/migrations/00002_theme_settings.sql +13 -0
- package/carbon/supabase/migrations/00003_pg_cron.sql +121 -0
- package/carbon/supabase/migrations/00004_contact_newsletter.sql +81 -0
- package/carbon/supabase/migrations/00005_localization_languages.sql +22 -0
- package/carbon/supabase/seed.sql +16 -0
- package/carbon/tests/_helpers/app.ts +45 -0
- package/carbon/tests/_helpers/env.ts +37 -0
- package/carbon/tests/_helpers/factories.ts +69 -0
- package/carbon/tests/_helpers/jwt.ts +23 -0
- package/carbon/tests/_helpers/setup-integration.ts +20 -0
- package/carbon/tests/_helpers/setup-rtl.ts +12 -0
- package/carbon/tests/component/ErrorBoundary.test.tsx +53 -0
- package/carbon/tests/component/use-auth-settings.test.tsx +119 -0
- package/carbon/tests/integration/server/routes/contact.test.ts +162 -0
- package/carbon/tests/integration/server/routes/health.test.ts +61 -0
- package/carbon/tests/structural/i18n-parity.test.ts +42 -0
- package/carbon/tests/unit/client/utils.test.ts +49 -0
- package/carbon/tests/unit/shared/pricing.test.ts +93 -0
- package/carbon/tsconfig.json +27 -0
- package/carbon/tsconfig.server.json +27 -0
- package/carbon/tsconfig.test.json +9 -0
- package/carbon/vite.config.ts +110 -0
- package/carbon/vitest.config.ts +74 -0
- package/carbon/volumes/db/jwt.sql +57 -0
- package/carbon/volumes/db/metabase-init.sh +29 -0
- package/carbon/volumes/db/n8n-init.sh +25 -0
- package/carbon/volumes/db/realtime.sql +33 -0
- package/carbon/volumes/db/roles.sql +93 -0
- package/carbon/volumes/db/set-passwords.sh +12 -0
- package/carbon/volumes/db/super-admin.dev.sql +113 -0
- package/carbon/volumes/db/super-admin.generated.sql +113 -0
- package/carbon/volumes/db/super-admin.sql +114 -0
- package/carbon/volumes/grafana/dashboards/logs.json +179 -0
- package/carbon/volumes/grafana/dashboards/overview.json +523 -0
- package/carbon/volumes/grafana/dashboards/postgresql.json +337 -0
- package/carbon/volumes/grafana/dashboards.dev/logs.json +179 -0
- package/carbon/volumes/grafana/dashboards.dev/overview.json +156 -0
- package/carbon/volumes/grafana/dashboards.dev/postgresql.json +337 -0
- package/carbon/volumes/grafana/provisioning/dashboards/dashboards.dev.yml +16 -0
- package/carbon/volumes/grafana/provisioning/dashboards/dashboards.yml +16 -0
- package/carbon/volumes/grafana/provisioning/datasources/datasources.yml +43 -0
- package/carbon/volumes/kong/docker-entrypoint.sh +9 -0
- package/carbon/volumes/kong/kong.yml +208 -0
- package/carbon/volumes/loki/loki-config.yml +58 -0
- package/carbon/volumes/n8n/hooks.js +131 -0
- package/carbon/volumes/n8n/scripts/setup.sh +66 -0
- package/carbon/volumes/prometheus/prometheus.yml +43 -0
- package/carbon/volumes/promtail/promtail-config.yml +64 -0
- package/carbon/volumes/traefik/middlewares.dev.yml +83 -0
- package/carbon/volumes/traefik/middlewares.yml +95 -0
- package/carbon/volumes/traefik/vite-dev.yml +20 -0
- package/package.json +95 -0
- package/src/access.js +354 -0
- package/src/activate.js +187 -0
- package/src/add.js +718 -0
- package/src/backup.js +786 -0
- package/src/cli.js +350 -0
- package/src/configure.js +967 -0
- package/src/console.js +155 -0
- package/src/create.js +1499 -0
- package/src/deploy.js +311 -0
- package/src/destroy.js +2033 -0
- package/src/diagnose.js +735 -0
- package/src/down.js +80 -0
- package/src/failover.js +1032 -0
- package/src/lib/backup-s3.js +179 -0
- package/src/lib/build.js +33 -0
- package/src/lib/checksum.js +28 -0
- package/src/lib/ci-setup.js +666 -0
- package/src/lib/cli/help.js +129 -0
- package/src/lib/cli/parse-flags.js +160 -0
- package/src/lib/cli/select-action.js +65 -0
- package/src/lib/cli/select-environment.js +108 -0
- package/src/lib/cli/tty-guard.js +75 -0
- package/src/lib/cloudflare.js +447 -0
- package/src/lib/colors.js +52 -0
- package/src/lib/command.js +361 -0
- package/src/lib/config.js +359 -0
- package/src/lib/cost.js +103 -0
- package/src/lib/deploy/bundle.js +231 -0
- package/src/lib/deploy/compose/acme-verify.js +121 -0
- package/src/lib/deploy/compose/build-args.js +78 -0
- package/src/lib/deploy/compose/ha.js +1874 -0
- package/src/lib/deploy/compose/index.js +1294 -0
- package/src/lib/deploy/compose/reconcile.js +74 -0
- package/src/lib/deploy/github.js +382 -0
- package/src/lib/deploy/image.js +191 -0
- package/src/lib/deploy/index.js +119 -0
- package/src/lib/deploy/k8s/LICENSE +99 -0
- package/src/lib/deploy/k8s/gitops-deploy.js +298 -0
- package/src/lib/deploy/k8s/ha/index.js +1000 -0
- package/src/lib/deploy/k8s/index.js +62 -0
- package/src/lib/deploy/k8s/k3s.js +2515 -0
- package/src/lib/deploy/orchestrator.js +1401 -0
- package/src/lib/deploy/prompts.js +545 -0
- package/src/lib/deploy/remote-build.js +130 -0
- package/src/lib/deploy/state.js +120 -0
- package/src/lib/deploy/utils.js +328 -0
- package/src/lib/deploy-logger.js +93 -0
- package/src/lib/dns-propagation.js +48 -0
- package/src/lib/environment.js +58 -0
- package/src/lib/fetch-retry.js +103 -0
- package/src/lib/github-environments.js +335 -0
- package/src/lib/hetzner-dns.js +377 -0
- package/src/lib/hetzner-guided-setup.js +275 -0
- package/src/lib/host-keys.js +37 -0
- package/src/lib/iac/cloud-init.js +52 -0
- package/src/lib/iac/index.js +325 -0
- package/src/lib/iac/programs/hetzner-compose.js +130 -0
- package/src/lib/iac/programs/hetzner-k8s.js +320 -0
- package/src/lib/kubectl.js +81 -0
- package/src/lib/licensing/index.js +259 -0
- package/src/lib/licensing/tiers.js +181 -0
- package/src/lib/licensing/validator.js +171 -0
- package/src/lib/merge-package-json.js +90 -0
- package/src/lib/operator-ip.js +381 -0
- package/src/lib/package-manager.js +111 -0
- package/src/lib/perf.js +71 -0
- package/src/lib/project-guard.js +39 -0
- package/src/lib/project.js +334 -0
- package/src/lib/providers/base.js +276 -0
- package/src/lib/providers/hetzner-s3.js +656 -0
- package/src/lib/providers/hetzner.js +755 -0
- package/src/lib/providers/index.js +164 -0
- package/src/lib/s3.js +510 -0
- package/src/lib/secret-scan.js +583 -0
- package/src/lib/secrets.js +63 -0
- package/src/lib/server-types.js +195 -0
- package/src/lib/shell.js +91 -0
- package/src/lib/ssh.js +241 -0
- package/src/lib/tracker.js +242 -0
- package/src/lib/upgrade-policy.js +170 -0
- package/src/lib/validators.js +105 -0
- package/src/lib/version.js +5 -0
- package/src/remove.js +292 -0
- package/src/reset.js +97 -0
- package/src/restore.js +871 -0
- package/src/scale.js +1734 -0
- package/src/shell.js +222 -0
- package/src/status.js +981 -0
- package/src/up.js +264 -0
- 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.
|