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
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// Default values mirroring index.css
|
|
2
|
+
export const DEFAULT_THEME = {
|
|
3
|
+
light: {
|
|
4
|
+
gradientStart: 'oklch(1 0 0)',
|
|
5
|
+
gradientEnd: 'oklch(0.98 0 0)',
|
|
6
|
+
card: 'oklch(1 0 0)',
|
|
7
|
+
primary: 'oklch(0.82 0.14 192)',
|
|
8
|
+
primaryDim: 'oklch(0.55 0.12 192)',
|
|
9
|
+
primaryForeground: 'oklch(0.98 0.01 181)',
|
|
10
|
+
secondaryAccent: 'oklch(0.45 0.2 350)',
|
|
11
|
+
secondaryAccentForeground: 'oklch(0.99 0 0)',
|
|
12
|
+
destructive: 'oklch(0.525 0.223 3.958)',
|
|
13
|
+
warning: 'oklch(0.769 0.188 70.08)',
|
|
14
|
+
success: 'oklch(0.704 0.14 181)',
|
|
15
|
+
},
|
|
16
|
+
dark: {
|
|
17
|
+
gradientStart: 'oklch(0.12 0.02 265)',
|
|
18
|
+
gradientEnd: 'oklch(0.17 0.03 260)',
|
|
19
|
+
card: 'oklch(0.28 0.04 255 / 0.5)',
|
|
20
|
+
primary: 'oklch(0.82 0.14 192)',
|
|
21
|
+
primaryDim: 'oklch(0.65 0.12 192)',
|
|
22
|
+
primaryForeground: 'oklch(0.08 0 0)',
|
|
23
|
+
secondaryAccent: 'oklch(0.65 0.26 350)',
|
|
24
|
+
secondaryAccentForeground: 'oklch(0.99 0 0)',
|
|
25
|
+
},
|
|
26
|
+
radius: '0.625rem',
|
|
27
|
+
smoothScrollEnabled: true,
|
|
28
|
+
smoothScrollIntensity: 60,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type ThemeConfig = typeof DEFAULT_THEME;
|
|
32
|
+
|
|
33
|
+
type SlotKey =
|
|
34
|
+
| 'gradientStart'
|
|
35
|
+
| 'gradientEnd'
|
|
36
|
+
| 'card'
|
|
37
|
+
| 'primary'
|
|
38
|
+
| 'primaryDim'
|
|
39
|
+
| 'primaryForeground'
|
|
40
|
+
| 'secondaryAccent'
|
|
41
|
+
| 'secondaryAccentForeground'
|
|
42
|
+
| 'destructive'
|
|
43
|
+
| 'warning'
|
|
44
|
+
| 'success';
|
|
45
|
+
|
|
46
|
+
const slotToCssVar: Record<SlotKey, string> = {
|
|
47
|
+
gradientStart: '--gradient-start',
|
|
48
|
+
gradientEnd: '--gradient-end',
|
|
49
|
+
card: '--card',
|
|
50
|
+
primary: '--primary',
|
|
51
|
+
primaryDim: '--primary-dim',
|
|
52
|
+
primaryForeground: '--primary-foreground',
|
|
53
|
+
secondaryAccent: '--secondary-accent',
|
|
54
|
+
secondaryAccentForeground: '--secondary-accent-foreground',
|
|
55
|
+
destructive: '--destructive',
|
|
56
|
+
warning: '--warning',
|
|
57
|
+
success: '--success',
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
function buildCssBlock(
|
|
61
|
+
selector: string,
|
|
62
|
+
slots: Partial<Record<SlotKey, string>>,
|
|
63
|
+
radius?: string
|
|
64
|
+
): string {
|
|
65
|
+
const declarations: string[] = [];
|
|
66
|
+
for (const [key, value] of Object.entries(slots)) {
|
|
67
|
+
const cssVar = slotToCssVar[key as SlotKey];
|
|
68
|
+
if (cssVar && value) {
|
|
69
|
+
declarations.push(` ${cssVar}: ${value};`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (radius) {
|
|
73
|
+
declarations.push(` --radius: ${radius};`);
|
|
74
|
+
}
|
|
75
|
+
if (declarations.length === 0) return '';
|
|
76
|
+
return `${selector} {\n${declarations.join('\n')}\n}`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Apply theme overrides by injecting/updating a <style> element in <head>.
|
|
81
|
+
* Merges the provided partial theme over DEFAULT_THEME before applying.
|
|
82
|
+
*/
|
|
83
|
+
export function applyTheme(theme: Partial<ThemeConfig>): void {
|
|
84
|
+
const light = { ...DEFAULT_THEME.light, ...theme.light };
|
|
85
|
+
const dark = { ...DEFAULT_THEME.dark, ...theme.dark };
|
|
86
|
+
const radius = theme.radius ?? DEFAULT_THEME.radius;
|
|
87
|
+
|
|
88
|
+
const rootBlock = buildCssBlock(':root', light, radius);
|
|
89
|
+
const darkBlock = buildCssBlock('.dark', dark);
|
|
90
|
+
|
|
91
|
+
const css = [rootBlock, darkBlock].filter(Boolean).join('\n');
|
|
92
|
+
|
|
93
|
+
let styleEl = document.getElementById('app-theme-overrides') as HTMLStyleElement | null;
|
|
94
|
+
if (!styleEl) {
|
|
95
|
+
styleEl = document.createElement('style');
|
|
96
|
+
styleEl.id = 'app-theme-overrides';
|
|
97
|
+
document.head.appendChild(styleEl);
|
|
98
|
+
}
|
|
99
|
+
styleEl.textContent = css;
|
|
100
|
+
|
|
101
|
+
// Notify SmoothScroll component of scroll settings changes
|
|
102
|
+
document.dispatchEvent(
|
|
103
|
+
new CustomEvent('theme:scroll-settings', {
|
|
104
|
+
detail: {
|
|
105
|
+
enabled: theme.smoothScrollEnabled ?? DEFAULT_THEME.smoothScrollEnabled,
|
|
106
|
+
intensity: theme.smoothScrollIntensity ?? DEFAULT_THEME.smoothScrollIntensity,
|
|
107
|
+
},
|
|
108
|
+
})
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Reset theme to defaults by applying DEFAULT_THEME.
|
|
114
|
+
*/
|
|
115
|
+
export function resetTheme(): void {
|
|
116
|
+
applyTheme(DEFAULT_THEME);
|
|
117
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ClassValue, clsx } from 'clsx';
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
|
|
4
|
+
export function cn(...inputs: ClassValue[]) {
|
|
5
|
+
return twMerge(clsx(inputs));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function getUserInitials(
|
|
9
|
+
user: { email?: string; user_metadata?: { full_name?: string } } | null
|
|
10
|
+
): string {
|
|
11
|
+
if (!user) return '?';
|
|
12
|
+
const name = user.user_metadata?.full_name;
|
|
13
|
+
if (name) {
|
|
14
|
+
return name
|
|
15
|
+
.split(' ')
|
|
16
|
+
.map((n) => n[0])
|
|
17
|
+
.join('')
|
|
18
|
+
.toUpperCase()
|
|
19
|
+
.slice(0, 2);
|
|
20
|
+
}
|
|
21
|
+
return user.email?.[0]?.toUpperCase() || '?';
|
|
22
|
+
}
|
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common": {
|
|
3
|
+
"back": "Zurück",
|
|
4
|
+
"cancel": "Abbrechen",
|
|
5
|
+
"continue": "Weiter",
|
|
6
|
+
"create": "Erstellen",
|
|
7
|
+
"creating": "Wird erstellt...",
|
|
8
|
+
"delete": "Löschen",
|
|
9
|
+
"loading": "Lädt...",
|
|
10
|
+
"save": "Speichern",
|
|
11
|
+
"settings": "Einstellungen",
|
|
12
|
+
"signOut": "Abmelden",
|
|
13
|
+
"skipForNow": "Überspringen",
|
|
14
|
+
"toggleTheme": "Design wechseln",
|
|
15
|
+
"free": "Kostenlos",
|
|
16
|
+
"popular": "Beliebt",
|
|
17
|
+
"manage": "Verwalten",
|
|
18
|
+
"update": "Aktualisieren",
|
|
19
|
+
"remove": "Entfernen"
|
|
20
|
+
},
|
|
21
|
+
"nav": {
|
|
22
|
+
"docs": "Dokumentation",
|
|
23
|
+
"apiDocs": "API-Docs",
|
|
24
|
+
"dashboard": "Dashboard",
|
|
25
|
+
"logIn": "Anmelden",
|
|
26
|
+
"signUp": "Registrieren"
|
|
27
|
+
},
|
|
28
|
+
"sidebar": {
|
|
29
|
+
"dashboard": "Dashboard",
|
|
30
|
+
"uiComponents": "Formulare",
|
|
31
|
+
"charts": "Diagramme",
|
|
32
|
+
"menu": "Menü",
|
|
33
|
+
"selectOrganization": "Organisation wählen",
|
|
34
|
+
"createOrganization": "Organisation erstellen",
|
|
35
|
+
"userSettings": "Benutzereinstellungen",
|
|
36
|
+
"profile": "Profil",
|
|
37
|
+
"billing": "Abrechnung",
|
|
38
|
+
"security": "Sicherheit",
|
|
39
|
+
"orgDetails": "Org-Details",
|
|
40
|
+
"members": "Mitglieder",
|
|
41
|
+
"superAdmin": "Super Admin",
|
|
42
|
+
"overview": "Übersicht",
|
|
43
|
+
"organizations": "Organisationen",
|
|
44
|
+
"users": "Benutzer",
|
|
45
|
+
"notifications": "Benachrichtigungen",
|
|
46
|
+
"logs": "Logs",
|
|
47
|
+
"theme": "Design",
|
|
48
|
+
"settings": "Einstellungen"
|
|
49
|
+
},
|
|
50
|
+
"createOrg": {
|
|
51
|
+
"title": "Organisation erstellen",
|
|
52
|
+
"description": "Füge eine neue Organisation hinzu, um dein Team und deine Projekte zu verwalten.",
|
|
53
|
+
"nameLabel": "Organisationsname",
|
|
54
|
+
"namePlaceholder": "Organisationsname eingeben"
|
|
55
|
+
},
|
|
56
|
+
"auth": {
|
|
57
|
+
"checkYourEmail": "E-Mail prüfen",
|
|
58
|
+
"createAccount": "Konto erstellen",
|
|
59
|
+
"signIn": "Anmelden",
|
|
60
|
+
"signUp": "Registrieren",
|
|
61
|
+
"signInAction": "Anmelden",
|
|
62
|
+
"magicLinkSent": "Wir haben einen Anmeldelink an {{email}} gesendet",
|
|
63
|
+
"poweredBy": "Powered by Supabase Auth",
|
|
64
|
+
"magicLinkExpiry": "Klicke auf den Link in deiner E-Mail. Der Link läuft in 1 Stunde ab.",
|
|
65
|
+
"backToSignIn": "Zurück zur Anmeldung",
|
|
66
|
+
"passwordInstead": "Mit Passwort anmelden",
|
|
67
|
+
"namePlaceholder": "Name",
|
|
68
|
+
"emailPlaceholder": "E-Mail",
|
|
69
|
+
"passwordPlaceholder": "Passwort",
|
|
70
|
+
"sending": "Wird gesendet...",
|
|
71
|
+
"sendMagicLink": "Magic Link senden",
|
|
72
|
+
"signInWithMagicLink": "Mit Magic Link anmelden",
|
|
73
|
+
"forgotPassword": "Passwort vergessen?",
|
|
74
|
+
"orContinueWith": "Oder weiter mit",
|
|
75
|
+
"alreadyHaveAccount": "Bereits ein Konto?",
|
|
76
|
+
"dontHaveAccount": "Noch kein Konto?",
|
|
77
|
+
"authFailed": "Anmeldung fehlgeschlagen",
|
|
78
|
+
"magicLinkFailed": "Magic Link konnte nicht gesendet werden",
|
|
79
|
+
"oauthFailed": "OAuth fehlgeschlagen"
|
|
80
|
+
},
|
|
81
|
+
"dashboard": {
|
|
82
|
+
"title": "Dashboard",
|
|
83
|
+
"welcomeBack": "Willkommen zurück!",
|
|
84
|
+
"signedInAs": "Angemeldet als",
|
|
85
|
+
"nextSteps": "Erste Schritte",
|
|
86
|
+
"nextStepsDescription": "Richte die verbleibenden Integrationen für deine App ein.",
|
|
87
|
+
"exploreStudio": "Supabase Studio erkunden",
|
|
88
|
+
"configureOAuth": "OAuth-Anbieter konfigurieren",
|
|
89
|
+
"setupStripe": "Stripe Billing einrichten",
|
|
90
|
+
"deployProduction": "In Produktion deployen",
|
|
91
|
+
"totalUsers": "Benutzer gesamt",
|
|
92
|
+
"newSignups": "Neue Registrierungen",
|
|
93
|
+
"activeUsers": "Aktive Benutzer",
|
|
94
|
+
"organizations": "Organisationen",
|
|
95
|
+
"vsLastMonth": "{{diff}} vs. letzten Monat",
|
|
96
|
+
"newThisMonth": "+{{count}} neu diesen Monat",
|
|
97
|
+
"greeting": {
|
|
98
|
+
"morning": "Guten Morgen",
|
|
99
|
+
"afternoon": "Guten Tag",
|
|
100
|
+
"evening": "Guten Abend"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"profile": {
|
|
104
|
+
"title": "Profil",
|
|
105
|
+
"description": "Persönliche Daten verwalten",
|
|
106
|
+
"profileInfo": "Profilinformationen",
|
|
107
|
+
"profileInfoDescription": "Aktualisiere deine persönlichen Daten und dein Profilbild.",
|
|
108
|
+
"fullName": "Vollständiger Name",
|
|
109
|
+
"namePlaceholder": "Namen eingeben",
|
|
110
|
+
"email": "E-Mail",
|
|
111
|
+
"emailChangeHint": "Wende dich an den Support, um deine E-Mail-Adresse zu ändern.",
|
|
112
|
+
"account": "Konto",
|
|
113
|
+
"accountDescription": "Kontoeinstellungen verwalten.",
|
|
114
|
+
"deleteAccount": "Konto löschen",
|
|
115
|
+
"deleteAccountDescription": "Lösche dein Konto und alle zugehörigen Daten dauerhaft.",
|
|
116
|
+
"deleteAccountConfirmTitle": "Konto löschen?",
|
|
117
|
+
"deleteAccountConfirmDescription": "Diese Aktion kann nicht rückgängig gemacht werden. Dein Konto, deine Profildaten und alle zugehörigen Informationen werden dauerhaft gelöscht.",
|
|
118
|
+
"deleteAccountConfirmButton": "Mein Konto löschen",
|
|
119
|
+
"superAdminCannotDelete": "Super-Admin-Konten können nicht gelöscht werden. Entferne zuerst die super_admin-Rolle und versuche es erneut."
|
|
120
|
+
},
|
|
121
|
+
"billing": {
|
|
122
|
+
"title": "Abrechnung",
|
|
123
|
+
"description": "Abo- und Zahlungseinstellungen",
|
|
124
|
+
"notConfigured": "Abrechnung ist nicht konfiguriert. Setze <code>STRIPE_SECRET_KEY</code> und <code>STRIPE_WEBHOOK_SECRET</code> in deiner Umgebung, um die Abrechnung zu aktivieren.",
|
|
125
|
+
"currentPlan": "Aktueller Plan",
|
|
126
|
+
"onPlan": "Du nutzt den Plan <strong>{{plan}}</strong>.",
|
|
127
|
+
"trial": "Testphase",
|
|
128
|
+
"cancelsOn": "Endet am {{date}}",
|
|
129
|
+
"subscriptionEndsOn": "Dein Abo endet am ",
|
|
130
|
+
"nextBillingDate": "Nächste Abrechnung: ",
|
|
131
|
+
"changePlan": "Plan wechseln",
|
|
132
|
+
"choosePlan": "Plan wählen",
|
|
133
|
+
"changePlanDescription": "Wechsle über das Kundenportal zu einem anderen Plan.",
|
|
134
|
+
"choosePlanDescription": "Wähle den passenden Plan.",
|
|
135
|
+
"currentPlanButton": "Aktueller Plan",
|
|
136
|
+
"switchPlan": "Plan wechseln",
|
|
137
|
+
"upgrade": "Upgraden",
|
|
138
|
+
"paymentMethod": "Zahlungsmethode",
|
|
139
|
+
"paymentMethodDescription": "Verwalte deine Zahlungsdaten im Kundenportal.",
|
|
140
|
+
"paymentOnFile": "Zahlungsmethode hinterlegt",
|
|
141
|
+
"manageInPortal": "Im Kundenportal verwalten",
|
|
142
|
+
"noPaymentMethod": "Keine Zahlungsmethode",
|
|
143
|
+
"addCardDescription": "Karte hinzufügen für schnelleres Bezahlen",
|
|
144
|
+
"addCard": "Karte hinzufügen",
|
|
145
|
+
"billingHistory": "Rechnungshistorie",
|
|
146
|
+
"billingHistoryDescription": "Vergangene Rechnungen ansehen und herunterladen.",
|
|
147
|
+
"viewInPortal": "Vollständige Rechnungshistorie im Kundenportal ansehen.",
|
|
148
|
+
"viewInvoices": "Rechnungen anzeigen",
|
|
149
|
+
"noBillingHistory": "Noch keine Rechnungen",
|
|
150
|
+
"invoicesAppearHere": "Rechnungen erscheinen hier nach deinem Upgrade."
|
|
151
|
+
},
|
|
152
|
+
"security": {
|
|
153
|
+
"title": "Sicherheit",
|
|
154
|
+
"description": "Passwort, MFA und Sitzungen",
|
|
155
|
+
"mfaRequired": "Zwei-Faktor-Authentifizierung erforderlich",
|
|
156
|
+
"mfaRequiredDescription": "Deine Organisation erfordert Zwei-Faktor-Authentifizierung. Richte sie ein, um fortzufahren.",
|
|
157
|
+
"twoFactor": "Zwei-Faktor-Authentifizierung",
|
|
158
|
+
"twoFactorDescription": "Schütze dein Konto mit einem zusätzlichen Verifizierungscode aus deiner Authenticator-App.",
|
|
159
|
+
"mfaEnabled": "Zwei-Faktor-Authentifizierung ist aktiv",
|
|
160
|
+
"mfaEnabledDescription": "Dein Konto ist mit einer Authenticator-App geschützt.",
|
|
161
|
+
"enrolledAuthenticators": "Registrierte Authentifikatoren",
|
|
162
|
+
"authenticatorApp": "Authenticator-App",
|
|
163
|
+
"mfaNotEnabled": "Zwei-Faktor-Authentifizierung ist inaktiv",
|
|
164
|
+
"mfaNotEnabledDescription": "Aktiviere 2FA für zusätzlichen Schutz deines Kontos.",
|
|
165
|
+
"enableMfa": "2FA aktivieren",
|
|
166
|
+
"settingUp": "Wird eingerichtet...",
|
|
167
|
+
"mfaRequiredByOrg": "Deine Organisation erfordert Zwei-Faktor-Authentifizierung.",
|
|
168
|
+
"setupMfa": "2FA einrichten",
|
|
169
|
+
"setupMfaDescription": "Scanne den QR-Code mit deiner Authenticator-App und gib dann den Verifizierungscode ein.",
|
|
170
|
+
"cantScan": "Scannen nicht möglich? Code manuell eingeben:",
|
|
171
|
+
"enterCode": "Verifizierungscode eingeben",
|
|
172
|
+
"verifying": "Wird verifiziert...",
|
|
173
|
+
"verifyAndEnable": "Verifizieren & aktivieren",
|
|
174
|
+
"disableMfa": "2FA deaktivieren?",
|
|
175
|
+
"disableMfaDescription": "Dies entfernt den Authenticator von deinem Konto. Du kannst ihn jederzeit erneut einrichten.",
|
|
176
|
+
"disableMfaWarning": "Warnung: Deine Organisation erfordert 2FA. Du musst es erneut einrichten, bevor du auf dein Konto zugreifen kannst.",
|
|
177
|
+
"disabling": "Wird deaktiviert...",
|
|
178
|
+
"disable2fa": "2FA deaktivieren"
|
|
179
|
+
},
|
|
180
|
+
"onboarding": {
|
|
181
|
+
"getStarted": "Loslegen",
|
|
182
|
+
"steps": {
|
|
183
|
+
"profile": "Profil",
|
|
184
|
+
"organization": "Organisation",
|
|
185
|
+
"plan": "Plan",
|
|
186
|
+
"invite": "Einladen"
|
|
187
|
+
},
|
|
188
|
+
"profile": {
|
|
189
|
+
"title": "Willkommen! Wie sollen wir dich nennen?",
|
|
190
|
+
"description": "Das hilft uns, deine Erfahrung zu personalisieren.",
|
|
191
|
+
"fullName": "Vollständiger Name",
|
|
192
|
+
"placeholder": "Jane Smith"
|
|
193
|
+
},
|
|
194
|
+
"org": {
|
|
195
|
+
"title": "Organisation erstellen",
|
|
196
|
+
"description": "Organisationen helfen dir, Teams und Projekte zu verwalten.",
|
|
197
|
+
"nameLabel": "Organisationsname",
|
|
198
|
+
"placeholder": "Acme Inc",
|
|
199
|
+
"error": "Organisation konnte nicht erstellt werden"
|
|
200
|
+
},
|
|
201
|
+
"plan": {
|
|
202
|
+
"title": "Plan wählen",
|
|
203
|
+
"description": "Du kannst das jederzeit ändern.",
|
|
204
|
+
"continueWithFree": "Kostenlos starten",
|
|
205
|
+
"continueToCheckout": "Zur Kasse",
|
|
206
|
+
"dayTrial": "{{days}}-Tage-Testphase"
|
|
207
|
+
},
|
|
208
|
+
"invite": {
|
|
209
|
+
"title": "Team einladen",
|
|
210
|
+
"description": "Füge Teammitglieder per E-Mail hinzu. Das kannst du auch später tun.",
|
|
211
|
+
"emailLabel": "E-Mail-Adressen",
|
|
212
|
+
"placeholder": "alice@example.com, bob@example.com",
|
|
213
|
+
"hint": "Mehrere E-Mails mit Komma trennen.",
|
|
214
|
+
"finish": "Einrichtung abschließen"
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"charts": {
|
|
218
|
+
"title": "Diagramme",
|
|
219
|
+
"revenue": "Umsatz",
|
|
220
|
+
"revenueDescription": "Monatlicher Umsatz, Jan–Jun",
|
|
221
|
+
"revenueSparkline": "$29,8k",
|
|
222
|
+
"newUsers": "Neue Benutzer",
|
|
223
|
+
"activeUsers": "Aktive Benutzer",
|
|
224
|
+
"activeUsersDescription": "Wöchentliche Anmeldungen — neu vs. wiederkehrend",
|
|
225
|
+
"mrr": "MRR",
|
|
226
|
+
"mrrGrowth": "MRR-Wachstum",
|
|
227
|
+
"mrrGrowthDescription": "Kumulierter monatlich wiederkehrender Umsatz",
|
|
228
|
+
"mrrSparkline": "$31k",
|
|
229
|
+
"grossMargin": "Bruttomarge",
|
|
230
|
+
"grossMarginSparkline": "53%",
|
|
231
|
+
"planDistribution": "Planverteilung",
|
|
232
|
+
"planDistributionDescription": "Aufschlüsselung nach Abo-Stufe",
|
|
233
|
+
"featureUsage": "Feature-Nutzung",
|
|
234
|
+
"featureUsageDescription": "Nutzung in 6 Produktbereichen",
|
|
235
|
+
"revenueAndMargin": "Umsatz & Marge",
|
|
236
|
+
"revenueAndMarginDescription": "Monatlicher Umsatz mit Bruttomarge %"
|
|
237
|
+
},
|
|
238
|
+
"theme": {
|
|
239
|
+
"title": "Design",
|
|
240
|
+
"description": "Markenfarben und Erscheinungsbild anpassen",
|
|
241
|
+
"lightMode": "Heller Modus",
|
|
242
|
+
"darkMode": "Dunkler Modus",
|
|
243
|
+
"borderRadius": "Eckenradius",
|
|
244
|
+
"resetToDefaults": "Zurücksetzen",
|
|
245
|
+
"saveChanges": "Speichern",
|
|
246
|
+
"saved": "Design gespeichert",
|
|
247
|
+
"saveFailed": "Speichern fehlgeschlagen",
|
|
248
|
+
"smoothScrolling": "Sanftes Scrollen",
|
|
249
|
+
"smoothScrollEnabled": "Sanftes Scrollen aktivieren",
|
|
250
|
+
"smoothScrollIntensity": "Intensität",
|
|
251
|
+
"smoothScrollDuration": "{{value}}s Dauer",
|
|
252
|
+
"colorSlots": {
|
|
253
|
+
"gradientStart": "Hintergrund Anfang",
|
|
254
|
+
"gradientEnd": "Hintergrund Ende",
|
|
255
|
+
"card": "Karte",
|
|
256
|
+
"primary": "Primär",
|
|
257
|
+
"primaryDim": "Primär gedimmt",
|
|
258
|
+
"primaryForeground": "Primärtext",
|
|
259
|
+
"secondaryAccent": "Akzent",
|
|
260
|
+
"secondaryAccentForeground": "Akzenttext",
|
|
261
|
+
"destructive": "Destruktiv",
|
|
262
|
+
"warning": "Warnung",
|
|
263
|
+
"success": "Erfolg"
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"admin": {
|
|
267
|
+
"impersonating": "Ansicht als {{email}}",
|
|
268
|
+
"stopImpersonating": "Beenden",
|
|
269
|
+
"loginAsUser": "Als Benutzer anmelden",
|
|
270
|
+
"impersonateConfirm": "Du wirst als dieser Benutzer angemeldet. Du kannst jederzeit zu deinem Admin-Konto zurückkehren.",
|
|
271
|
+
"cannotImpersonate": "Dieser Benutzer kann nicht imitiert werden"
|
|
272
|
+
},
|
|
273
|
+
"landing": {
|
|
274
|
+
"hero": {
|
|
275
|
+
"badge": "Vollautomatisch · Self-Hosted",
|
|
276
|
+
"headline1": "Professionelle Qualität",
|
|
277
|
+
"subheading": "Sichere, skalierbare, vollautomatische Architektur und SaaS-Starter-Kit — präzise für KI entwickelt.",
|
|
278
|
+
"getUpdates": "Updates erhalten"
|
|
279
|
+
},
|
|
280
|
+
"metrics": {
|
|
281
|
+
"time": {
|
|
282
|
+
"value": "< 5 Min.",
|
|
283
|
+
"label": "Von null zu Produktion"
|
|
284
|
+
},
|
|
285
|
+
"services": {
|
|
286
|
+
"value": "12 Services",
|
|
287
|
+
"label": "Automatisch bereitgestellt"
|
|
288
|
+
},
|
|
289
|
+
"config": {
|
|
290
|
+
"value": "Zero Config",
|
|
291
|
+
"label": "Sicherheit von Anfang an"
|
|
292
|
+
},
|
|
293
|
+
"commands": {
|
|
294
|
+
"value": "3 Befehle",
|
|
295
|
+
"label": "Erstellen · entwickeln · deployen"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"logoStrip": {
|
|
299
|
+
"label": "Optimiert für deine Tools"
|
|
300
|
+
},
|
|
301
|
+
"workflow": {
|
|
302
|
+
"headline": "Drei Befehle bis zur Produktion",
|
|
303
|
+
"subheading": "Von null zu produktionsreifer Infrastruktur in Minuten, nicht Monaten",
|
|
304
|
+
"create": {
|
|
305
|
+
"label": "Erstellen",
|
|
306
|
+
"description": "Full-Stack-App mit Auth, Datenbank, API und Kubernetes-Manifesten — sofort einsatzbereit."
|
|
307
|
+
},
|
|
308
|
+
"develop": {
|
|
309
|
+
"label": "Entwickeln",
|
|
310
|
+
"description": "Starte deine gesamte Dev-Umgebung: Datenbank, Auth, API und Hot-Reloading-Frontend."
|
|
311
|
+
},
|
|
312
|
+
"deploy": {
|
|
313
|
+
"label": "Deployen",
|
|
314
|
+
"description": "In Produktion pushen mit Auto-Scaling, Hochverfügbarkeit, Monitoring, CI/CD und mehr."
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
"techStack": {
|
|
318
|
+
"headline": "Gebaut auf Technologien, die",
|
|
319
|
+
"headlineHighlight": "liefern",
|
|
320
|
+
"subheading": "Jede Ebene des Stacks ist im großen Maßstab erprobt — von der UI bis zur Orchestrierung.",
|
|
321
|
+
"addOnsLabel": "Optionale Erweiterungen",
|
|
322
|
+
"items": {
|
|
323
|
+
"react": "Blitzschnelle UI",
|
|
324
|
+
"typescript": "Durchgängige Typsicherheit",
|
|
325
|
+
"hono": "13KB-Server-Framework",
|
|
326
|
+
"supabase": "Auth, DB & Realtime",
|
|
327
|
+
"tailwind": "Utility-first-Styling",
|
|
328
|
+
"shadcn": "50+ fertige Komponenten",
|
|
329
|
+
"tanstack": "Intelligentes Datenabrufen",
|
|
330
|
+
"stripe": "Zahlungen & Abrechnung",
|
|
331
|
+
"mdx": "Blog, Docs & Changelog",
|
|
332
|
+
"i18next": "Mehrsprachigkeit",
|
|
333
|
+
"docker": "Container-Deployments",
|
|
334
|
+
"kubernetes": "Produktions-Orchestrierung"
|
|
335
|
+
},
|
|
336
|
+
"addOns": {
|
|
337
|
+
"observability": {
|
|
338
|
+
"description": "Grafana, Prometheus & Loki — Metriken, Logs und Dashboards vorkonfiguriert."
|
|
339
|
+
},
|
|
340
|
+
"metabase": {
|
|
341
|
+
"description": "Self-hosted Business Intelligence mit direktem Zugriff auf deine Datenbank."
|
|
342
|
+
},
|
|
343
|
+
"n8n": {
|
|
344
|
+
"description": "Visuelle Workflow-Automatisierung für Hintergrundaufgaben, Webhooks und Integrationen."
|
|
345
|
+
},
|
|
346
|
+
"redis": {
|
|
347
|
+
"description": "In-Memory-Caching und Queues für hochfrequente Workloads."
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
"architecture": {
|
|
352
|
+
"badge": "Architektur",
|
|
353
|
+
"headline": "Full Stack, perfektioniert.",
|
|
354
|
+
"subheading": "Von React bis PostgreSQL — konfiguriert und verbunden, direkt einsatzbereit."
|
|
355
|
+
},
|
|
356
|
+
"comparison": {
|
|
357
|
+
"headline": "Skalierbar &",
|
|
358
|
+
"headlineHighlight": "Sicher.",
|
|
359
|
+
"subheading": "Schnell liefern — ohne in Flammen aufzugehen.",
|
|
360
|
+
"hacked": {
|
|
361
|
+
"risk": "Gehackt werden",
|
|
362
|
+
"protection": "Sicherheitsgehärtet",
|
|
363
|
+
"how": "Traefik-Proxy, Firewall-Regeln, CSP-Header, Rate Limiting"
|
|
364
|
+
},
|
|
365
|
+
"exposed": {
|
|
366
|
+
"risk": "Datenbank exponiert",
|
|
367
|
+
"protection": "Datenbank-Isolation",
|
|
368
|
+
"how": "Netzwerkisolierte Datenbank, Row-Level Security, begrenzte Zugangsdaten"
|
|
369
|
+
},
|
|
370
|
+
"traffic": {
|
|
371
|
+
"risk": "Traffic überlastet",
|
|
372
|
+
"protection": "Auto-Scaling",
|
|
373
|
+
"how": "Kubernetes-Autoscaling über Pods und VPS-Knoten"
|
|
374
|
+
},
|
|
375
|
+
"redundancy": {
|
|
376
|
+
"risk": "Keine Redundanz",
|
|
377
|
+
"protection": "Hochverfügbarkeit",
|
|
378
|
+
"how": "Multi-Region mit Health-Monitoring & Ein-Befehl-Failover"
|
|
379
|
+
},
|
|
380
|
+
"visibility": {
|
|
381
|
+
"risk": "Keine Transparenz",
|
|
382
|
+
"protection": "Volle Observability",
|
|
383
|
+
"how": "Native Grafana & Prometheus, je Umgebung konfiguriert"
|
|
384
|
+
},
|
|
385
|
+
"dataLoss": {
|
|
386
|
+
"risk": "Datenverlust",
|
|
387
|
+
"protection": "Automatische Backups",
|
|
388
|
+
"how": "Geplante S3-Backups mit Ein-Befehl-Wiederherstellung"
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
"aiIntegration": {
|
|
392
|
+
"headline1": "Funktioniert mit",
|
|
393
|
+
"headlineHighlight": "jedem KI-Tool",
|
|
394
|
+
"headline2": "das du nutzt",
|
|
395
|
+
"subheading": "Jedes Projekt wird mit tool-spezifischen Instruktionsdateien und integrierten Sicherheitsleitplanken geliefert. Deine KI schreibt produktionsreifen Code, der deine Sicherheitsrichtlinien von Anfang an einhält.",
|
|
396
|
+
"footer1": "Nutze jede KI zum Bauen — Vibecarbon kümmert sich um",
|
|
397
|
+
"footer2": "Infrastruktur und Sicherheit",
|
|
398
|
+
"docs": {
|
|
399
|
+
"title": "KI-native Dokumentation",
|
|
400
|
+
"description": "CLAUDE.md, AGENTS.md, .windsurfrules, Copilot-Anweisungen und Cursor-Regeln werden mit jedem Projekt geliefert — dein KI-Assistent erhält vollständigen Codebase-Kontext ab dem ersten Prompt."
|
|
401
|
+
},
|
|
402
|
+
"guardrails": {
|
|
403
|
+
"title": "Integrierte Sicherheitsleitplanken",
|
|
404
|
+
"description": "AGENTS.md kodiert verbindliche MUSS/NIEMALS-Regeln für RLS, Auth-Prüfungen, Client-Auswahl und Infrastruktur-Härtung — damit KI-generierter Code standardmäßig deinen Sicherheitsrichtlinien folgt."
|
|
405
|
+
},
|
|
406
|
+
"architecture": {
|
|
407
|
+
"title": "Saubere Architektur",
|
|
408
|
+
"description": "Klare Trennung von Client-, Server- und gemeinsamem Code mit typisierten Schnittstellen. KI-Agenten können deine App navigieren, verstehen und erweitern, ohne Strukturen zu halluzinieren."
|
|
409
|
+
},
|
|
410
|
+
"patterns": {
|
|
411
|
+
"title": "Vorhersagbare Muster",
|
|
412
|
+
"description": "Jede Route validiert mit Zod, jede Abfrage nutzt den richtigen Supabase-Client, jede Tabelle hat RLS. KI-Agenten replizieren jedes Mal dieselben korrekten Muster."
|
|
413
|
+
}
|
|
414
|
+
},
|
|
415
|
+
"pricing": {
|
|
416
|
+
"headline1": "Von der",
|
|
417
|
+
"headlineSketch": "Idee",
|
|
418
|
+
"headline2": "zur",
|
|
419
|
+
"headlineScale": "Skalierung.",
|
|
420
|
+
"subheading": "Gleiches Carbon, andere Form. Einmalige Zahlung, lebenslanger Zugang.",
|
|
421
|
+
"popular": "Am beliebtesten",
|
|
422
|
+
"units": {
|
|
423
|
+
"forever": "für immer",
|
|
424
|
+
"oneTime": "Einmalzahlung"
|
|
425
|
+
},
|
|
426
|
+
"graphite": {
|
|
427
|
+
"tagline": "Lokal skizzieren und entwickeln",
|
|
428
|
+
"cta": "Jetzt starten",
|
|
429
|
+
"features": {
|
|
430
|
+
"unlimitedProjects": "Unbegrenzte Projekte",
|
|
431
|
+
"localDev": "Vollständige lokale Dev-Umgebung",
|
|
432
|
+
"addOns": "Alle Erweiterungen enthalten",
|
|
433
|
+
"supabase": "Vollständiger Supabase-Stack",
|
|
434
|
+
"community": "Community-Support",
|
|
435
|
+
"production": "Produktions-Deployment",
|
|
436
|
+
"ha": "Hochverfügbarkeit",
|
|
437
|
+
"k8s": "Kubernetes-Autoscaling"
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
"diamond": {
|
|
441
|
+
"tagline": "Volle Automatisierung für Indie-Entwickler und Startups.",
|
|
442
|
+
"cta": "Diamond kaufen",
|
|
443
|
+
"features": {
|
|
444
|
+
"graphite": "Alles in Graphite",
|
|
445
|
+
"deployModes": "Alle Bereitstellungsmodi (Compose, HA, Kubernetes)",
|
|
446
|
+
"replication": "Streaming-Replikation",
|
|
447
|
+
"healthChecks": "Health Checks + Ein-Befehl-Failover",
|
|
448
|
+
"backups": "Automatische S3-Backups",
|
|
449
|
+
"cicd": "CI/CD via GitHub Actions",
|
|
450
|
+
"unlimited": "Unbegrenzte Server & Projekte",
|
|
451
|
+
"commercial": "Kommerzielle Nutzungsrechte"
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
"fullerene": {
|
|
455
|
+
"tagline": "Kommerzielle Lizenz für Agenturen und Unternehmen.",
|
|
456
|
+
"cta": "Fullerene kaufen",
|
|
457
|
+
"features": {
|
|
458
|
+
"diamond": "Alles in Diamond",
|
|
459
|
+
"commercial": "Kommerzielle Nutzungsrechte (AGPL-Ausnahme)",
|
|
460
|
+
"clients": "Bereitstellung für Kunden & Organisationen",
|
|
461
|
+
"corporate": "Agenturen & Enterprise-Teams",
|
|
462
|
+
"support": "Prioritäts-E-Mail-Support",
|
|
463
|
+
"lifetime": "Lebenslanger Zugang"
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
},
|
|
467
|
+
"faq": {
|
|
468
|
+
"headline": "Häufig gestellte Fragen",
|
|
469
|
+
"subheading": "Alles, was du wissen musst, bevor du anfängst.",
|
|
470
|
+
"q1": {
|
|
471
|
+
"question": "Was bekomme ich direkt out of the box?",
|
|
472
|
+
"answer": "Eine Full-Stack-App mit React 19, Hono-API, self-hosted Supabase, Auth, Abrechnung, Datei-Uploads, Blog, Docs, i18n, Kubernetes-Manifesten und Docker Compose für lokale Entwicklung."
|
|
473
|
+
},
|
|
474
|
+
"q2": {
|
|
475
|
+
"question": "Kann ich alles anpassen und modifizieren?",
|
|
476
|
+
"answer": "Ja. Du besitzt 100 % des generierten Codes. Kein Vendor-Lock-in, keine Laufzeitabhängigkeit von Vibecarbon."
|
|
477
|
+
},
|
|
478
|
+
"q3": {
|
|
479
|
+
"question": "Welche Cloud-Anbieter werden unterstützt?",
|
|
480
|
+
"answer": "Hetzner Cloud (weitere folgen bald), mit Docker Compose und Kubernetes-Manifesten, die auf jedem Anbieter funktionieren — AWS, GCP, DigitalOcean und mehr."
|
|
481
|
+
},
|
|
482
|
+
"q4": {
|
|
483
|
+
"question": "Wie funktioniert das Deployment?",
|
|
484
|
+
"answer": "Führe \"npx vibecarbon deploy\" aus, um einen VPS bereitzustellen, k8s zu installieren, Traefik zu konfigurieren, deine App mit Auto-HTTPS zu deployen und automatische Backups einzurichten — alles in einem Befehl."
|
|
485
|
+
},
|
|
486
|
+
"q5": {
|
|
487
|
+
"question": "Wie funktioniert die Preisgestaltung?",
|
|
488
|
+
"answer": "Graphite ist dauerhaft kostenlos — Projekte erstellen, lokal entwickeln, alle Add-ons nutzen. Diamond (149 $ einmalig) bietet volle Automatisierung für Indie-Entwickler und Startups — alle Deployment-Modi, Backups, CI/CD und Skalierung. Fullerene (499 $ einmalig) ist die kommerzielle Lizenz für Agenturen und Unternehmen — für Kunden deployen, ohne AGPL-Auflagen. Einmalige Zahlung, kein Abo."
|
|
489
|
+
},
|
|
490
|
+
"q6": {
|
|
491
|
+
"question": "Wie viele Projekte kann ich mit einer Lizenz erstellen?",
|
|
492
|
+
"answer": "Unbegrenzt. Eine Diamond- oder Fullerene-Lizenz deckt jedes Projekt ab, das du erstellst — keine Gebühr pro Projekt. Die Lizenz ist an dich oder deine Organisation gebunden."
|
|
493
|
+
},
|
|
494
|
+
"q7": {
|
|
495
|
+
"question": "Brauche ich Fullerene, um Nutzer abzurechnen oder ein SaaS zu betreiben?",
|
|
496
|
+
"answer": "Nein. Diamond deckt das Bereitstellen deines eigenen Produkts ab — Nutzer abrechnen, ein SaaS betreiben, ein Geschäft aufbauen. Fullerene ist die kommerzielle Lizenz für die Bereitstellung im Auftrag anderer: Agenturen, Enterprise und Kundenprojekte. Der Test: Ist es dein Produkt? Diamond. Das von jemand anderem? Fullerene."
|
|
497
|
+
},
|
|
498
|
+
"q8": {
|
|
499
|
+
"question": "Was passiert, wenn Vibecarbon eingestellt wird?",
|
|
500
|
+
"answer": "Für deine App ändert sich nichts. Der generierte Code steht unter MIT-Lizenz ohne jegliche Laufzeitabhängigkeit von Vibecarbon — es ist einfach eine Codebasis, die dir vollständig gehört. Die CLI ist Open Source unter AGPL, du kannst sie also dauerhaft aus dem Quellcode ausführen. Deine Infrastruktur läuft auf deinen eigenen Servern."
|
|
501
|
+
},
|
|
502
|
+
"q9": {
|
|
503
|
+
"question": "Brauche ich DevOps-Erfahrung, um bereitzustellen?",
|
|
504
|
+
"answer": "Nein. Die CLI übernimmt Provisioning, SSL, Skalierung, Backups und Monitoring. Du brauchst einen Hetzner-Account, eine Domain und SMTP-Zugangsdaten für E-Mails — das ist alles. Alle Kubernetes-Manifeste und Docker-Compose-Dateien liegen in deinem Projekt, falls du verstehen oder anpassen möchtest, was eingerichtet wird."
|
|
505
|
+
}
|
|
506
|
+
},
|
|
507
|
+
"newsletter": {
|
|
508
|
+
"placeholder": "E-Mail-Adresse eingeben",
|
|
509
|
+
"button": "Abonnieren",
|
|
510
|
+
"success": "Prüfe deine E-Mail, um dein Abonnement zu bestätigen.",
|
|
511
|
+
"errorEmpty": "Bitte E-Mail-Adresse eingeben",
|
|
512
|
+
"errorInvalid": "Bitte gültige E-Mail-Adresse eingeben"
|
|
513
|
+
},
|
|
514
|
+
"cta": {
|
|
515
|
+
"badge": "Sicherheit by Design",
|
|
516
|
+
"headline": "Bereit, deine nächste App zu liefern?",
|
|
517
|
+
"subheading": "Unglaublich robuste KI-Apps in Minuten."
|
|
518
|
+
},
|
|
519
|
+
"footer": {
|
|
520
|
+
"userDocs": "Dokumentation",
|
|
521
|
+
"apiDocs": "API-Docs",
|
|
522
|
+
"blog": "Blog",
|
|
523
|
+
"changelog": "Changelog",
|
|
524
|
+
"contact": "Kontakt",
|
|
525
|
+
"privacy": "Datenschutz",
|
|
526
|
+
"terms": "AGB"
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|