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,529 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common": {
|
|
3
|
+
"back": "Voltar",
|
|
4
|
+
"cancel": "Cancelar",
|
|
5
|
+
"continue": "Continuar",
|
|
6
|
+
"create": "Criar",
|
|
7
|
+
"creating": "A criar...",
|
|
8
|
+
"delete": "Eliminar",
|
|
9
|
+
"loading": "A carregar...",
|
|
10
|
+
"save": "Guardar",
|
|
11
|
+
"settings": "Definições",
|
|
12
|
+
"signOut": "Terminar sessão",
|
|
13
|
+
"skipForNow": "Saltar por agora",
|
|
14
|
+
"toggleTheme": "Alternar tema",
|
|
15
|
+
"free": "Gratuito",
|
|
16
|
+
"popular": "Popular",
|
|
17
|
+
"manage": "Gerir",
|
|
18
|
+
"update": "Atualizar",
|
|
19
|
+
"remove": "Remover"
|
|
20
|
+
},
|
|
21
|
+
"nav": {
|
|
22
|
+
"docs": "Documentação",
|
|
23
|
+
"apiDocs": "Docs API",
|
|
24
|
+
"dashboard": "Dashboard",
|
|
25
|
+
"logIn": "Iniciar sessão",
|
|
26
|
+
"signUp": "Criar conta"
|
|
27
|
+
},
|
|
28
|
+
"sidebar": {
|
|
29
|
+
"dashboard": "Dashboard",
|
|
30
|
+
"uiComponents": "Formulários",
|
|
31
|
+
"charts": "Gráficos",
|
|
32
|
+
"menu": "Menu",
|
|
33
|
+
"selectOrganization": "Selecionar organização",
|
|
34
|
+
"createOrganization": "Criar organização",
|
|
35
|
+
"userSettings": "Definições do utilizador",
|
|
36
|
+
"profile": "Perfil",
|
|
37
|
+
"billing": "Faturação",
|
|
38
|
+
"security": "Segurança",
|
|
39
|
+
"orgDetails": "Detalhes da org.",
|
|
40
|
+
"members": "Membros",
|
|
41
|
+
"superAdmin": "Super Admin",
|
|
42
|
+
"overview": "Visão geral",
|
|
43
|
+
"organizations": "Organizações",
|
|
44
|
+
"users": "Utilizadores",
|
|
45
|
+
"notifications": "Notificações",
|
|
46
|
+
"logs": "Logs",
|
|
47
|
+
"theme": "Tema",
|
|
48
|
+
"settings": "Definições"
|
|
49
|
+
},
|
|
50
|
+
"createOrg": {
|
|
51
|
+
"title": "Criar organização",
|
|
52
|
+
"description": "Adiciona uma nova organização para gerir a tua equipa e projetos.",
|
|
53
|
+
"nameLabel": "Nome da organização",
|
|
54
|
+
"namePlaceholder": "Introduz o nome da organização"
|
|
55
|
+
},
|
|
56
|
+
"auth": {
|
|
57
|
+
"checkYourEmail": "Verifica o teu e-mail",
|
|
58
|
+
"createAccount": "Criar conta",
|
|
59
|
+
"signIn": "Iniciar sessão",
|
|
60
|
+
"signUp": "Criar conta",
|
|
61
|
+
"signInAction": "Iniciar sessão",
|
|
62
|
+
"magicLinkSent": "Enviámos uma ligação de acesso para {{email}}",
|
|
63
|
+
"poweredBy": "Powered by Supabase Auth",
|
|
64
|
+
"magicLinkExpiry": "Clica na ligação no teu e-mail para iniciar sessão. A ligação expira em 1 hora.",
|
|
65
|
+
"backToSignIn": "Voltar ao início de sessão",
|
|
66
|
+
"passwordInstead": "Iniciar sessão com palavra-passe",
|
|
67
|
+
"namePlaceholder": "Nome",
|
|
68
|
+
"emailPlaceholder": "E-mail",
|
|
69
|
+
"passwordPlaceholder": "Palavra-passe",
|
|
70
|
+
"sending": "A enviar...",
|
|
71
|
+
"sendMagicLink": "Enviar magic link",
|
|
72
|
+
"signInWithMagicLink": "Iniciar sessão com magic link",
|
|
73
|
+
"forgotPassword": "Esqueceste a palavra-passe?",
|
|
74
|
+
"orContinueWith": "Ou continuar com",
|
|
75
|
+
"alreadyHaveAccount": "Já tens uma conta?",
|
|
76
|
+
"dontHaveAccount": "Ainda não tens conta?",
|
|
77
|
+
"authFailed": "Autenticação falhada",
|
|
78
|
+
"magicLinkFailed": "Não foi possível enviar o magic link",
|
|
79
|
+
"oauthFailed": "OAuth falhou"
|
|
80
|
+
},
|
|
81
|
+
"dashboard": {
|
|
82
|
+
"title": "Dashboard",
|
|
83
|
+
"welcomeBack": "Bem-vindo de volta!",
|
|
84
|
+
"signedInAs": "Sessão iniciada como",
|
|
85
|
+
"nextSteps": "Primeiros passos",
|
|
86
|
+
"nextStepsDescription": "Configura as integrações restantes para a tua aplicação.",
|
|
87
|
+
"exploreStudio": "Explorar Supabase Studio",
|
|
88
|
+
"configureOAuth": "Configurar fornecedores OAuth",
|
|
89
|
+
"setupStripe": "Configurar Stripe Billing",
|
|
90
|
+
"deployProduction": "Colocar em produção",
|
|
91
|
+
"totalUsers": "Total de utilizadores",
|
|
92
|
+
"newSignups": "Novos registos",
|
|
93
|
+
"activeUsers": "Utilizadores ativos",
|
|
94
|
+
"organizations": "Organizações",
|
|
95
|
+
"vsLastMonth": "{{diff}} vs. mês anterior",
|
|
96
|
+
"newThisMonth": "+{{count}} novos este mês",
|
|
97
|
+
"greeting": {
|
|
98
|
+
"morning": "Bom dia",
|
|
99
|
+
"afternoon": "Boa tarde",
|
|
100
|
+
"evening": "Boa noite"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"profile": {
|
|
104
|
+
"title": "Perfil",
|
|
105
|
+
"description": "Gerir as tuas informações pessoais",
|
|
106
|
+
"profileInfo": "Informações do perfil",
|
|
107
|
+
"profileInfoDescription": "Atualiza os teus dados pessoais e fotografia de perfil.",
|
|
108
|
+
"fullName": "Nome completo",
|
|
109
|
+
"namePlaceholder": "Introduz o teu nome",
|
|
110
|
+
"email": "E-mail",
|
|
111
|
+
"emailChangeHint": "Contacta o suporte para alterar o teu endereço de e-mail.",
|
|
112
|
+
"account": "Conta",
|
|
113
|
+
"accountDescription": "Gerir as definições da tua conta.",
|
|
114
|
+
"deleteAccount": "Eliminar conta",
|
|
115
|
+
"deleteAccountDescription": "Elimina permanentemente a tua conta e todos os dados associados.",
|
|
116
|
+
"deleteAccountConfirmTitle": "Eliminar a tua conta?",
|
|
117
|
+
"deleteAccountConfirmDescription": "Esta ação não pode ser desfeita. A tua conta, dados de perfil e todas as informações associadas serão eliminados permanentemente.",
|
|
118
|
+
"deleteAccountConfirmButton": "Eliminar a minha conta",
|
|
119
|
+
"superAdminCannotDelete": "As contas de super administrador não podem ser eliminadas. Remove primeiro o papel super_admin e tenta novamente."
|
|
120
|
+
},
|
|
121
|
+
"billing": {
|
|
122
|
+
"title": "Faturação",
|
|
123
|
+
"description": "Definições de subscrição e pagamento",
|
|
124
|
+
"notConfigured": "A faturação não está configurada. Define <code>STRIPE_SECRET_KEY</code> e <code>STRIPE_WEBHOOK_SECRET</code> no teu ambiente para ativar a faturação.",
|
|
125
|
+
"currentPlan": "Plano atual",
|
|
126
|
+
"onPlan": "Estás no plano <strong>{{plan}}</strong>.",
|
|
127
|
+
"trial": "Período de experiência",
|
|
128
|
+
"cancelsOn": "Cancela em {{date}}",
|
|
129
|
+
"subscriptionEndsOn": "A tua subscrição termina em ",
|
|
130
|
+
"nextBillingDate": "Próxima data de faturação: ",
|
|
131
|
+
"changePlan": "Mudar de plano",
|
|
132
|
+
"choosePlan": "Escolher um plano",
|
|
133
|
+
"changePlanDescription": "Muda para um plano diferente através do portal do cliente.",
|
|
134
|
+
"choosePlanDescription": "Seleciona o plano que melhor te convém.",
|
|
135
|
+
"currentPlanButton": "Plano atual",
|
|
136
|
+
"switchPlan": "Mudar de plano",
|
|
137
|
+
"upgrade": "Atualizar",
|
|
138
|
+
"paymentMethod": "Método de pagamento",
|
|
139
|
+
"paymentMethodDescription": "Gere as tuas informações de pagamento através do portal do cliente.",
|
|
140
|
+
"paymentOnFile": "Método de pagamento registado",
|
|
141
|
+
"manageInPortal": "Gerir no portal do cliente",
|
|
142
|
+
"noPaymentMethod": "Sem método de pagamento",
|
|
143
|
+
"addCardDescription": "Adiciona um cartão para pagamentos mais rápidos",
|
|
144
|
+
"addCard": "Adicionar cartão",
|
|
145
|
+
"billingHistory": "Histórico de faturação",
|
|
146
|
+
"billingHistoryDescription": "Consulta e descarrega as tuas faturas anteriores.",
|
|
147
|
+
"viewInPortal": "Consulta o teu histórico de faturação completo no portal do cliente.",
|
|
148
|
+
"viewInvoices": "Ver faturas",
|
|
149
|
+
"noBillingHistory": "Sem histórico de faturação",
|
|
150
|
+
"invoicesAppearHere": "As tuas faturas aparecerão aqui após atualizares o plano."
|
|
151
|
+
},
|
|
152
|
+
"security": {
|
|
153
|
+
"title": "Segurança",
|
|
154
|
+
"description": "Palavra-passe, MFA e gestão de sessões",
|
|
155
|
+
"mfaRequired": "Autenticação de dois fatores obrigatória",
|
|
156
|
+
"mfaRequiredDescription": "A tua organização requer autenticação de dois fatores. Configura-a para continuar.",
|
|
157
|
+
"twoFactor": "Autenticação de dois fatores",
|
|
158
|
+
"twoFactorDescription": "Adiciona uma camada extra de segurança à tua conta com um código de verificação da tua aplicação autenticadora.",
|
|
159
|
+
"mfaEnabled": "A autenticação de dois fatores está ativa",
|
|
160
|
+
"mfaEnabledDescription": "A tua conta está protegida com uma aplicação autenticadora.",
|
|
161
|
+
"enrolledAuthenticators": "Autenticadores registados",
|
|
162
|
+
"authenticatorApp": "Aplicação autenticadora",
|
|
163
|
+
"mfaNotEnabled": "A autenticação de dois fatores não está ativa",
|
|
164
|
+
"mfaNotEnabledDescription": "Ativa o 2FA para protegeres melhor a tua conta.",
|
|
165
|
+
"enableMfa": "Ativar autenticação de dois fatores",
|
|
166
|
+
"settingUp": "A configurar...",
|
|
167
|
+
"mfaRequiredByOrg": "A autenticação de dois fatores é obrigatória pela tua organização.",
|
|
168
|
+
"setupMfa": "Configurar autenticação de dois fatores",
|
|
169
|
+
"setupMfaDescription": "Lê o código QR com a tua aplicação autenticadora e introduz o código de verificação.",
|
|
170
|
+
"cantScan": "Não consegues ler? Introduz este código manualmente:",
|
|
171
|
+
"enterCode": "Introduzir código de verificação",
|
|
172
|
+
"verifying": "A verificar...",
|
|
173
|
+
"verifyAndEnable": "Verificar e ativar",
|
|
174
|
+
"disableMfa": "Desativar autenticação de dois fatores?",
|
|
175
|
+
"disableMfaDescription": "Isto removerá o autenticador da tua conta. Podes configurá-lo novamente a qualquer momento.",
|
|
176
|
+
"disableMfaWarning": "Aviso: A tua organização requer autenticação de dois fatores. Terás de a configurar novamente antes de poderes aceder à tua conta.",
|
|
177
|
+
"disabling": "A desativar...",
|
|
178
|
+
"disable2fa": "Desativar 2FA"
|
|
179
|
+
},
|
|
180
|
+
"onboarding": {
|
|
181
|
+
"getStarted": "Começar",
|
|
182
|
+
"steps": {
|
|
183
|
+
"profile": "Perfil",
|
|
184
|
+
"organization": "Organização",
|
|
185
|
+
"plan": "Plano",
|
|
186
|
+
"invite": "Convidar"
|
|
187
|
+
},
|
|
188
|
+
"profile": {
|
|
189
|
+
"title": "Bem-vindo! Como te devemos chamar?",
|
|
190
|
+
"description": "Isto ajuda a personalizar a tua experiência.",
|
|
191
|
+
"fullName": "Nome completo",
|
|
192
|
+
"placeholder": "Jane Smith"
|
|
193
|
+
},
|
|
194
|
+
"org": {
|
|
195
|
+
"title": "Criar a tua organização",
|
|
196
|
+
"description": "As organizações ajudam-te a gerir equipas e projetos.",
|
|
197
|
+
"nameLabel": "Nome da organização",
|
|
198
|
+
"placeholder": "Acme Inc",
|
|
199
|
+
"error": "Não foi possível criar a organização"
|
|
200
|
+
},
|
|
201
|
+
"plan": {
|
|
202
|
+
"title": "Escolhe o teu plano",
|
|
203
|
+
"description": "Podes sempre alterar isto mais tarde.",
|
|
204
|
+
"continueWithFree": "Continuar com o gratuito",
|
|
205
|
+
"continueToCheckout": "Ir para o pagamento",
|
|
206
|
+
"dayTrial": "Período de experiência de {{days}} dias"
|
|
207
|
+
},
|
|
208
|
+
"invite": {
|
|
209
|
+
"title": "Convida a tua equipa",
|
|
210
|
+
"description": "Adiciona membros da equipa por e-mail. Podes fazê-lo mais tarde também.",
|
|
211
|
+
"emailLabel": "Endereços de e-mail",
|
|
212
|
+
"placeholder": "alice@example.com, bob@example.com",
|
|
213
|
+
"hint": "Separa vários e-mails com vírgulas.",
|
|
214
|
+
"finish": "Concluir configuração"
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"charts": {
|
|
218
|
+
"title": "Gráficos",
|
|
219
|
+
"revenue": "Receita",
|
|
220
|
+
"revenueDescription": "Receita mensal, jan.–jun.",
|
|
221
|
+
"revenueSparkline": "$29,8k",
|
|
222
|
+
"newUsers": "Novos utilizadores",
|
|
223
|
+
"activeUsers": "Utilizadores ativos",
|
|
224
|
+
"activeUsersDescription": "Registos semanais — novos vs. recorrentes",
|
|
225
|
+
"mrr": "MRR",
|
|
226
|
+
"mrrGrowth": "Crescimento do MRR",
|
|
227
|
+
"mrrGrowthDescription": "Receita recorrente mensal acumulada",
|
|
228
|
+
"mrrSparkline": "$31k",
|
|
229
|
+
"grossMargin": "Margem bruta",
|
|
230
|
+
"grossMarginSparkline": "53%",
|
|
231
|
+
"planDistribution": "Distribuição de planos",
|
|
232
|
+
"planDistributionDescription": "Divisão por nível de subscrição",
|
|
233
|
+
"featureUsage": "Utilização de funcionalidades",
|
|
234
|
+
"featureUsageDescription": "Adoção em 6 áreas do produto",
|
|
235
|
+
"revenueAndMargin": "Receita e margem",
|
|
236
|
+
"revenueAndMarginDescription": "Receita mensal com margem bruta %"
|
|
237
|
+
},
|
|
238
|
+
"theme": {
|
|
239
|
+
"title": "Tema",
|
|
240
|
+
"description": "Personaliza as cores e aparência da aplicação",
|
|
241
|
+
"lightMode": "Modo claro",
|
|
242
|
+
"darkMode": "Modo escuro",
|
|
243
|
+
"borderRadius": "Raio do canto",
|
|
244
|
+
"resetToDefaults": "Repor predefinições",
|
|
245
|
+
"saveChanges": "Guardar alterações",
|
|
246
|
+
"saved": "Tema guardado",
|
|
247
|
+
"saveFailed": "Não foi possível guardar o tema",
|
|
248
|
+
"smoothScrolling": "Deslocação suave",
|
|
249
|
+
"smoothScrollEnabled": "Ativar deslocação suave",
|
|
250
|
+
"smoothScrollIntensity": "Intensidade",
|
|
251
|
+
"smoothScrollDuration": "Duração de {{value}}s",
|
|
252
|
+
"colorSlots": {
|
|
253
|
+
"gradientStart": "Início do fundo",
|
|
254
|
+
"gradientEnd": "Fim do fundo",
|
|
255
|
+
"card": "Cartão",
|
|
256
|
+
"primary": "Primário",
|
|
257
|
+
"primaryDim": "Primário suave",
|
|
258
|
+
"primaryForeground": "Texto primário",
|
|
259
|
+
"secondaryAccent": "Destaque",
|
|
260
|
+
"secondaryAccentForeground": "Texto de destaque",
|
|
261
|
+
"destructive": "Destrutivo",
|
|
262
|
+
"warning": "Aviso",
|
|
263
|
+
"success": "Sucesso"
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"admin": {
|
|
267
|
+
"impersonating": "A ver como {{email}}",
|
|
268
|
+
"stopImpersonating": "Parar",
|
|
269
|
+
"loginAsUser": "Iniciar sessão como utilizador",
|
|
270
|
+
"impersonateConfirm": "Irás iniciar sessão como este utilizador. Podes regressar à tua conta de administrador a qualquer momento.",
|
|
271
|
+
"cannotImpersonate": "Não é possível personificar este utilizador"
|
|
272
|
+
},
|
|
273
|
+
"landing": {
|
|
274
|
+
"hero": {
|
|
275
|
+
"badge": "Totalmente automatizado · Self-Hosted",
|
|
276
|
+
"headline1": "Qualidade profissional",
|
|
277
|
+
"subheading": "Arquitetura segura, escalável e totalmente automatizada, e SaaS Starter Kit meticulosamente desenvolvido para IA.",
|
|
278
|
+
"getUpdates": "Receber atualizações"
|
|
279
|
+
},
|
|
280
|
+
"metrics": {
|
|
281
|
+
"time": {
|
|
282
|
+
"value": "< 5 min",
|
|
283
|
+
"label": "Do zero à produção"
|
|
284
|
+
},
|
|
285
|
+
"services": {
|
|
286
|
+
"value": "12 serviços",
|
|
287
|
+
"label": "Aprovisionados automaticamente"
|
|
288
|
+
},
|
|
289
|
+
"config": {
|
|
290
|
+
"value": "Zero config",
|
|
291
|
+
"label": "Segurança pronta a usar"
|
|
292
|
+
},
|
|
293
|
+
"commands": {
|
|
294
|
+
"value": "3 comandos",
|
|
295
|
+
"label": "Criar · desenvolver · publicar"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"logoStrip": {
|
|
299
|
+
"label": "Otimizado para as ferramentas que usas"
|
|
300
|
+
},
|
|
301
|
+
"workflow": {
|
|
302
|
+
"headline": "Três comandos até à produção",
|
|
303
|
+
"subheading": "Do zero a infraestrutura pronta para produção em minutos, não meses",
|
|
304
|
+
"create": {
|
|
305
|
+
"label": "Criar",
|
|
306
|
+
"description": "Aplicação full-stack com autenticação, base de dados, API e manifestos Kubernetes — pronta a usar."
|
|
307
|
+
},
|
|
308
|
+
"develop": {
|
|
309
|
+
"label": "Desenvolver",
|
|
310
|
+
"description": "Inicia todo o teu ambiente de desenvolvimento: base de dados, autenticação, API e frontend com hot-reloading."
|
|
311
|
+
},
|
|
312
|
+
"deploy": {
|
|
313
|
+
"label": "Publicar",
|
|
314
|
+
"description": "Publica em produção com auto-scaling, alta disponibilidade, monitorização, CI/CD e muito mais."
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
"techStack": {
|
|
318
|
+
"headline": "Construído com tecnologia que",
|
|
319
|
+
"headlineHighlight": "funciona",
|
|
320
|
+
"subheading": "Cada camada da stack é comprovada em escala — da interface à orquestração.",
|
|
321
|
+
"addOnsLabel": "Módulos opcionais",
|
|
322
|
+
"items": {
|
|
323
|
+
"react": "Interface ultrarrápida",
|
|
324
|
+
"typescript": "Segurança de tipos de ponta a ponta",
|
|
325
|
+
"hono": "Framework de servidor de 13KB",
|
|
326
|
+
"supabase": "Auth, BD e tempo real",
|
|
327
|
+
"tailwind": "Estilização utility-first",
|
|
328
|
+
"shadcn": "50+ componentes prontos",
|
|
329
|
+
"tanstack": "Obtenção de dados inteligente",
|
|
330
|
+
"stripe": "Pagamentos e faturação",
|
|
331
|
+
"mdx": "Blog, docs e changelog",
|
|
332
|
+
"i18next": "Suporte multilingue",
|
|
333
|
+
"docker": "Deployments em contentores",
|
|
334
|
+
"kubernetes": "Orquestração em produção"
|
|
335
|
+
},
|
|
336
|
+
"addOns": {
|
|
337
|
+
"observability": {
|
|
338
|
+
"description": "Grafana, Prometheus & Loki — métricas, logs e dashboards pré-configurados."
|
|
339
|
+
},
|
|
340
|
+
"metabase": {
|
|
341
|
+
"description": "Business intelligence self-hosted com acesso direto à tua base de dados."
|
|
342
|
+
},
|
|
343
|
+
"n8n": {
|
|
344
|
+
"description": "Automação visual de fluxos de trabalho para tarefas em segundo plano, webhooks e integrações."
|
|
345
|
+
},
|
|
346
|
+
"redis": {
|
|
347
|
+
"description": "Cache em memória e filas para cargas de trabalho de alto rendimento."
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
"architecture": {
|
|
352
|
+
"badge": "Arquitetura",
|
|
353
|
+
"headline": "Full stack, aperfeiçoado.",
|
|
354
|
+
"subheading": "De React a PostgreSQL — configurado e ligado pronto a usar."
|
|
355
|
+
},
|
|
356
|
+
"comparison": {
|
|
357
|
+
"headline": "Escalável e",
|
|
358
|
+
"headlineHighlight": "seguro.",
|
|
359
|
+
"subheading": "Publica rapidamente — sem tudo ir pelos ares.",
|
|
360
|
+
"hacked": {
|
|
361
|
+
"risk": "Ser atacado",
|
|
362
|
+
"protection": "Segurança reforçada",
|
|
363
|
+
"how": "Proxy Traefik, regras de firewall, cabeçalhos CSP, limitação de pedidos"
|
|
364
|
+
},
|
|
365
|
+
"exposed": {
|
|
366
|
+
"risk": "Base de dados exposta",
|
|
367
|
+
"protection": "Isolamento da base de dados",
|
|
368
|
+
"how": "Base de dados isolada em rede, row-level security, credenciais limitadas"
|
|
369
|
+
},
|
|
370
|
+
"traffic": {
|
|
371
|
+
"risk": "Incapaz de escalar",
|
|
372
|
+
"protection": "Auto-scaling",
|
|
373
|
+
"how": "Auto-scaling Kubernetes em pods e nós VPS"
|
|
374
|
+
},
|
|
375
|
+
"redundancy": {
|
|
376
|
+
"risk": "Sem redundância",
|
|
377
|
+
"protection": "Alta disponibilidade",
|
|
378
|
+
"how": "Multi-região com monitorização de saúde e failover com um único comando"
|
|
379
|
+
},
|
|
380
|
+
"visibility": {
|
|
381
|
+
"risk": "Sem visibilidade",
|
|
382
|
+
"protection": "Observabilidade total",
|
|
383
|
+
"how": "Grafana & Prometheus nativos, configurados por ambiente"
|
|
384
|
+
},
|
|
385
|
+
"dataLoss": {
|
|
386
|
+
"risk": "Perda de dados",
|
|
387
|
+
"protection": "Backups automáticos",
|
|
388
|
+
"how": "Backups S3 agendados com restauro com um único comando"
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
"aiIntegration": {
|
|
392
|
+
"headline1": "Funciona com",
|
|
393
|
+
"headlineHighlight": "qualquer ferramenta de IA",
|
|
394
|
+
"headline2": "que uses",
|
|
395
|
+
"subheading": "Cada projeto inclui ficheiros de instruções específicos para cada ferramenta e proteções de segurança integradas. A tua IA escreve código de qualidade produtiva que segue as tuas políticas de segurança desde o primeiro dia.",
|
|
396
|
+
"footer1": "Usa qualquer IA para construir — o Vibecarbon trata da",
|
|
397
|
+
"footer2": "infraestrutura e segurança",
|
|
398
|
+
"docs": {
|
|
399
|
+
"title": "Documentação nativa para IA",
|
|
400
|
+
"description": "CLAUDE.md, AGENTS.md, .windsurfrules, instruções Copilot e regras Cursor são incluídos em cada projeto — o teu assistente de IA obtém contexto completo da codebase desde o primeiro prompt."
|
|
401
|
+
},
|
|
402
|
+
"guardrails": {
|
|
403
|
+
"title": "Proteções de segurança integradas",
|
|
404
|
+
"description": "O AGENTS.md codifica regras obrigatórias DEVE/NUNCA para RLS, verificações de autenticação, seleção de cliente e reforço de infraestrutura — para que o código gerado por IA siga as tuas políticas de segurança por predefinição."
|
|
405
|
+
},
|
|
406
|
+
"architecture": {
|
|
407
|
+
"title": "Arquitetura limpa",
|
|
408
|
+
"description": "Separação clara entre código de cliente, servidor e partilhado com interfaces tipadas. Os agentes de IA podem navegar, compreender e expandir a tua aplicação sem alucinar estrutura."
|
|
409
|
+
},
|
|
410
|
+
"patterns": {
|
|
411
|
+
"title": "Padrões previsíveis",
|
|
412
|
+
"description": "Cada rota valida com Zod, cada consulta usa o cliente Supabase correto, cada tabela tem RLS. Os agentes de IA replicam sempre os mesmos padrões corretos."
|
|
413
|
+
}
|
|
414
|
+
},
|
|
415
|
+
"pricing": {
|
|
416
|
+
"headline1": "Do",
|
|
417
|
+
"headlineSketch": "esboço",
|
|
418
|
+
"headline2": "à",
|
|
419
|
+
"headlineScale": "escala.",
|
|
420
|
+
"subheading": "Mesmo carbono, forma diferente. Um pagamento, acesso vitalício.",
|
|
421
|
+
"popular": "Mais popular",
|
|
422
|
+
"units": {
|
|
423
|
+
"forever": "para sempre",
|
|
424
|
+
"oneTime": "pagamento único"
|
|
425
|
+
},
|
|
426
|
+
"graphite": {
|
|
427
|
+
"tagline": "Esboça e desenvolve localmente",
|
|
428
|
+
"cta": "Começar a esboçar",
|
|
429
|
+
"features": {
|
|
430
|
+
"unlimitedProjects": "Projetos ilimitados",
|
|
431
|
+
"localDev": "Ambiente de desenvolvimento local completo",
|
|
432
|
+
"addOns": "Todos os módulos incluídos",
|
|
433
|
+
"supabase": "Stack Supabase completa",
|
|
434
|
+
"community": "Suporte da comunidade",
|
|
435
|
+
"production": "Deployment em produção",
|
|
436
|
+
"ha": "Alta disponibilidade",
|
|
437
|
+
"k8s": "Auto-scaling Kubernetes"
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
"diamond": {
|
|
441
|
+
"tagline": "Automatização completa para indie hackers e startups.",
|
|
442
|
+
"cta": "Obter Diamond",
|
|
443
|
+
"features": {
|
|
444
|
+
"graphite": "Tudo do Graphite",
|
|
445
|
+
"deployModes": "Todos os modos de implantação (Compose, HA, Kubernetes)",
|
|
446
|
+
"replication": "Replicação em streaming",
|
|
447
|
+
"healthChecks": "Verificações de saúde + failover com um comando",
|
|
448
|
+
"backups": "Backups S3 automáticos",
|
|
449
|
+
"cicd": "CI/CD via GitHub Actions",
|
|
450
|
+
"unlimited": "Servidores e projetos ilimitados",
|
|
451
|
+
"commercial": "Direitos de uso comercial"
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
"fullerene": {
|
|
455
|
+
"tagline": "Licença comercial para Agências e Empresas.",
|
|
456
|
+
"cta": "Ir para Fullerene",
|
|
457
|
+
"features": {
|
|
458
|
+
"diamond": "Tudo do Diamond",
|
|
459
|
+
"commercial": "Direitos de uso comercial (exceção AGPL)",
|
|
460
|
+
"clients": "Implante para clientes e organizações",
|
|
461
|
+
"corporate": "Equipas de agência e empresas",
|
|
462
|
+
"support": "Suporte prioritário por e-mail",
|
|
463
|
+
"lifetime": "Acesso vitalício"
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
},
|
|
467
|
+
"faq": {
|
|
468
|
+
"headline": "Perguntas frequentes",
|
|
469
|
+
"subheading": "Tudo o que precisas de saber antes de começar.",
|
|
470
|
+
"q1": {
|
|
471
|
+
"question": "O que obtenho de imediato?",
|
|
472
|
+
"answer": "Uma aplicação full-stack com React 19, API Hono, Supabase self-hosted, autenticação, faturação, envio de ficheiros, blog, docs, i18n, manifestos Kubernetes e Docker Compose para desenvolvimento local."
|
|
473
|
+
},
|
|
474
|
+
"q2": {
|
|
475
|
+
"question": "Posso modificar ou personalizar tudo?",
|
|
476
|
+
"answer": "Sim. És dono de 100% do código gerado. Sem dependência de fornecedor, sem dependência em tempo de execução do Vibecarbon."
|
|
477
|
+
},
|
|
478
|
+
"q3": {
|
|
479
|
+
"question": "Que fornecedores de cloud são suportados?",
|
|
480
|
+
"answer": "Hetzner Cloud (mais a chegar brevemente), com manifestos Docker Compose e Kubernetes que funcionam em qualquer fornecedor — AWS, GCP, DigitalOcean e outros."
|
|
481
|
+
},
|
|
482
|
+
"q4": {
|
|
483
|
+
"question": "Como funciona o deployment?",
|
|
484
|
+
"answer": "Executa \"npx vibecarbon deploy\" para aprovisionar um VPS, instalar k8s, configurar Traefik, fazer o deployment da tua aplicação com HTTPS automático e configurar backups automáticos — tudo num único comando."
|
|
485
|
+
},
|
|
486
|
+
"q5": {
|
|
487
|
+
"question": "Como funciona o modelo de preços?",
|
|
488
|
+
"answer": "O Graphite é gratuito para sempre — cria projetos, desenvolve localmente e usa todos os add-ons. O Diamond (149 $ vitalício) é automatização completa para indie hackers e startups — todos os modos de deployment, backups, CI/CD e escalamento. O Fullerene (499 $ vitalício) é a licença comercial para agências e empresas — faz deployment para clientes e organizações sem restrições AGPL. Pagamento único, sem subscrições."
|
|
489
|
+
},
|
|
490
|
+
"q6": {
|
|
491
|
+
"question": "Quantos projetos posso criar com uma licença?",
|
|
492
|
+
"answer": "Ilimitados. Uma licença Diamond ou Fullerene cobre cada projeto que cria — sem taxa por projeto. A licença está vinculada a si ou à sua organização."
|
|
493
|
+
},
|
|
494
|
+
"q7": {
|
|
495
|
+
"question": "Preciso de Fullerene para cobrar utilizadores ou gerir um SaaS?",
|
|
496
|
+
"answer": "Não. O Diamond cobre a implantação do seu próprio produto — cobrar utilizadores, gerir um SaaS, criar um negócio. O Fullerene é a licença comercial para implantar em nome de outra pessoa: agências, empresas e trabalho para clientes. O teste: é o seu produto? Diamond. De outra pessoa? Fullerene."
|
|
497
|
+
},
|
|
498
|
+
"q8": {
|
|
499
|
+
"question": "O que acontece se o Vibecarbon encerrar?",
|
|
500
|
+
"answer": "Nada muda para a sua aplicação. O código gerado tem licença MIT sem qualquer dependência em tempo de execução do Vibecarbon — é apenas uma base de código que lhe pertence por completo. A CLI é open source sob AGPL, por isso pode executá-la a partir do código-fonte indefinidamente. A sua infraestrutura corre nos seus próprios servidores."
|
|
501
|
+
},
|
|
502
|
+
"q9": {
|
|
503
|
+
"question": "Preciso de experiência em DevOps para implantar?",
|
|
504
|
+
"answer": "Não. A CLI trata do aprovisionamento, SSL, escalonamento, cópias de segurança e monitorização. Precisa de uma conta Hetzner, um domínio e credenciais SMTP para email — só isso. Todos os manifestos Kubernetes e ficheiros Docker Compose ficam no seu projeto se quiser entender ou personalizar o que está a ser configurado."
|
|
505
|
+
}
|
|
506
|
+
},
|
|
507
|
+
"newsletter": {
|
|
508
|
+
"placeholder": "Introduz o teu e-mail",
|
|
509
|
+
"button": "Subscrever",
|
|
510
|
+
"success": "Verifica o teu e-mail para confirmar a subscrição.",
|
|
511
|
+
"errorEmpty": "Por favor, introduz o teu endereço de e-mail",
|
|
512
|
+
"errorInvalid": "Por favor, introduz um endereço de e-mail válido"
|
|
513
|
+
},
|
|
514
|
+
"cta": {
|
|
515
|
+
"badge": "Seguro por design",
|
|
516
|
+
"headline": "Pronto para publicar a tua próxima aplicação?",
|
|
517
|
+
"subheading": "Aplicações de IA incrivelmente robustas em minutos."
|
|
518
|
+
},
|
|
519
|
+
"footer": {
|
|
520
|
+
"userDocs": "Documentação",
|
|
521
|
+
"apiDocs": "Docs API",
|
|
522
|
+
"blog": "Blog",
|
|
523
|
+
"changelog": "Changelog",
|
|
524
|
+
"contact": "Contacto",
|
|
525
|
+
"privacy": "Privacidade",
|
|
526
|
+
"terms": "Termos"
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
2
|
+
import { ThemeProvider } from 'next-themes';
|
|
3
|
+
import { StrictMode } from 'react';
|
|
4
|
+
import { createRoot } from 'react-dom/client';
|
|
5
|
+
import { BrowserRouter } from 'react-router-dom';
|
|
6
|
+
import App from './App';
|
|
7
|
+
import { AuthProvider } from './components/auth/AuthProvider';
|
|
8
|
+
import { ErrorBoundary } from './components/ErrorBoundary';
|
|
9
|
+
import { ImpersonationBanner } from './components/ImpersonationBanner';
|
|
10
|
+
import { NotificationBar } from './components/NotificationDrawer';
|
|
11
|
+
import { SmoothScroll } from './components/SmoothScroll';
|
|
12
|
+
import { NotificationProvider } from './hooks/useNotifications';
|
|
13
|
+
import { OrganizationsProvider } from './hooks/useOrganizations';
|
|
14
|
+
import './lib/i18n';
|
|
15
|
+
import 'lenis/dist/lenis.css';
|
|
16
|
+
import './index.css';
|
|
17
|
+
|
|
18
|
+
const queryClient = new QueryClient({
|
|
19
|
+
defaultOptions: {
|
|
20
|
+
queries: {
|
|
21
|
+
staleTime: 1000 * 60 * 5, // 5 minutes
|
|
22
|
+
retry: 1,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const rootElement = document.getElementById('root');
|
|
28
|
+
if (!rootElement) throw new Error('Root element not found');
|
|
29
|
+
|
|
30
|
+
createRoot(rootElement).render(
|
|
31
|
+
<StrictMode>
|
|
32
|
+
<QueryClientProvider client={queryClient}>
|
|
33
|
+
<BrowserRouter>
|
|
34
|
+
<ThemeProvider attribute="class" defaultTheme="dark" enableSystem>
|
|
35
|
+
<ErrorBoundary>
|
|
36
|
+
<AuthProvider>
|
|
37
|
+
<OrganizationsProvider>
|
|
38
|
+
<NotificationProvider>
|
|
39
|
+
<SmoothScroll>
|
|
40
|
+
<div className="flex min-h-screen flex-col">
|
|
41
|
+
<ImpersonationBanner />
|
|
42
|
+
<NotificationBar />
|
|
43
|
+
<div className="flex-1">
|
|
44
|
+
<App />
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</SmoothScroll>
|
|
48
|
+
</NotificationProvider>
|
|
49
|
+
</OrganizationsProvider>
|
|
50
|
+
</AuthProvider>
|
|
51
|
+
</ErrorBoundary>
|
|
52
|
+
</ThemeProvider>
|
|
53
|
+
</BrowserRouter>
|
|
54
|
+
</QueryClientProvider>
|
|
55
|
+
</StrictMode>
|
|
56
|
+
);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare module '*.mdx' {
|
|
2
|
+
import type { ComponentType } from 'react';
|
|
3
|
+
|
|
4
|
+
export const frontmatter: {
|
|
5
|
+
title: string;
|
|
6
|
+
description: string;
|
|
7
|
+
date: string;
|
|
8
|
+
author?: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const MDXComponent: ComponentType;
|
|
12
|
+
export default MDXComponent;
|
|
13
|
+
}
|