vibecarbon 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/carbon/.env.example +3 -2
  2. package/carbon/DEVELOPMENT.md +18 -3
  3. package/carbon/PRODUCTION.md +1 -1
  4. package/carbon/content/docs/cli.mdx +3 -3
  5. package/carbon/content/docs/deployment.mdx +1 -1
  6. package/carbon/content/docs/development.mdx +1 -1
  7. package/carbon/content/docs/getting-started.mdx +0 -1
  8. package/carbon/scripts/dev-init.js +1 -1
  9. package/carbon/scripts/generate-dev-configs.sh +5 -7
  10. package/carbon/scripts/validate-dev-configs.sh +5 -7
  11. package/carbon/src/client/components/TechStackSection.tsx +0 -68
  12. package/carbon/src/client/index.css +0 -14
  13. package/carbon/src/client/locales/de.json +0 -18
  14. package/carbon/src/client/locales/en.json +86 -36
  15. package/carbon/src/client/locales/es.json +0 -18
  16. package/carbon/src/client/locales/fr.json +0 -18
  17. package/carbon/src/client/locales/pt.json +0 -18
  18. package/carbon/src/client/pages/Home.tsx +0 -3
  19. package/package.json +4 -2
  20. package/services/index.json +29 -0
  21. package/services/metabase/compose/docker-compose.override.yml +14 -0
  22. package/services/metabase/compose/docker-compose.prod.yml +29 -0
  23. package/services/metabase/compose/docker-compose.yml +68 -0
  24. package/services/metabase/db/init.sh +29 -0
  25. package/services/metabase/docs/integration.md +191 -0
  26. package/services/metabase/k8s/deployment.yaml +88 -0
  27. package/services/metabase/k8s/ingressroute.yaml +22 -0
  28. package/services/metabase/k8s/kustomization.yaml +9 -0
  29. package/services/metabase/k8s/network-policy.yaml +74 -0
  30. package/services/metabase/k8s/pvc.yaml +12 -0
  31. package/services/metabase/k8s/service.yaml +15 -0
  32. package/services/metabase/manifest.json +34 -0
  33. package/services/metabase/scripts/setup.sh +152 -0
  34. package/services/n8n/compose/docker-compose.override.yml +14 -0
  35. package/services/n8n/compose/docker-compose.prod.yml +32 -0
  36. package/services/n8n/compose/docker-compose.yml +99 -0
  37. package/services/n8n/db/init.sh +25 -0
  38. package/services/n8n/docs/SSO.md +124 -0
  39. package/services/n8n/docs/integration.md +155 -0
  40. package/services/n8n/hooks/hooks.js +131 -0
  41. package/services/n8n/k8s/deployment.yaml +116 -0
  42. package/services/n8n/k8s/ingressroute.yaml +24 -0
  43. package/services/n8n/k8s/kustomization.yaml +9 -0
  44. package/services/n8n/k8s/network-policy.yaml +82 -0
  45. package/services/n8n/k8s/pvc.yaml +14 -0
  46. package/services/n8n/k8s/service.yaml +14 -0
  47. package/services/n8n/manifest.json +36 -0
  48. package/services/n8n/scripts/setup.sh +42 -0
  49. package/{carbon/docker-compose.observability.prod.yml → services/observability/compose/docker-compose.prod.yml} +8 -0
  50. package/services/observability/docs/integration.md +31 -0
  51. package/services/observability/k8s/grafana-deployment.yaml +107 -0
  52. package/services/observability/k8s/grafana-provisioning-configmap.yaml +65 -0
  53. package/services/observability/k8s/grafana-pvc.yaml +14 -0
  54. package/services/observability/k8s/grafana-service.yaml +16 -0
  55. package/services/observability/k8s/ingressroute.yaml +22 -0
  56. package/services/observability/k8s/kustomization.yaml +24 -0
  57. package/services/observability/k8s/loki-configmap.yaml +74 -0
  58. package/services/observability/k8s/loki-deployment.yaml +72 -0
  59. package/services/observability/k8s/loki-pvc.yaml +14 -0
  60. package/services/observability/k8s/loki-service.yaml +16 -0
  61. package/services/observability/k8s/network-policy.yaml +141 -0
  62. package/services/observability/k8s/prometheus-configmap.yaml +80 -0
  63. package/services/observability/k8s/prometheus-deployment.yaml +78 -0
  64. package/services/observability/k8s/prometheus-pvc.yaml +14 -0
  65. package/services/observability/k8s/prometheus-rbac.yaml +55 -0
  66. package/services/observability/k8s/prometheus-service.yaml +16 -0
  67. package/services/observability/manifest.json +28 -0
  68. package/services/redis/compose/docker-compose.prod.yml +10 -0
  69. package/services/redis/compose/docker-compose.yml +24 -0
  70. package/services/redis/docs/integration.md +148 -0
  71. package/services/redis/k8s/deployment.yaml +70 -0
  72. package/services/redis/k8s/kustomization.yaml +8 -0
  73. package/services/redis/k8s/network-policy.yaml +20 -0
  74. package/services/redis/k8s/pvc.yaml +12 -0
  75. package/services/redis/k8s/service.yaml +15 -0
  76. package/services/redis/manifest.json +30 -0
  77. package/services/s3/compose/docker-compose.s3-ha.yml +86 -0
  78. package/services/s3/compose/docker-compose.s3.yml +35 -0
  79. package/services/s3/manifest.json +87 -0
  80. package/src/add.js +57 -89
  81. package/src/cli.js +1 -1
  82. package/src/create.js +3 -87
  83. package/src/lib/deploy/bundle.js +4 -2
  84. package/src/lib/deploy/compose/index.js +45 -17
  85. package/src/lib/deploy/orchestrator.js +13 -1
  86. package/src/remove.js +9 -6
  87. package/carbon/content/docs/optional-services.mdx +0 -160
  88. package/carbon/src/client/components/MetricsStrip.tsx +0 -48
  89. /package/{carbon/docker-compose.observability.override.yml → services/observability/compose/docker-compose.override.yml} +0 -0
  90. /package/{carbon/docker-compose.observability.yml → services/observability/compose/docker-compose.yml} +0 -0
  91. /package/{carbon → services/observability}/volumes/grafana/dashboards/logs.json +0 -0
  92. /package/{carbon → services/observability}/volumes/grafana/dashboards/overview.json +0 -0
  93. /package/{carbon → services/observability}/volumes/grafana/dashboards/postgresql.json +0 -0
  94. /package/{carbon → services/observability}/volumes/grafana/dashboards.dev/logs.json +0 -0
  95. /package/{carbon → services/observability}/volumes/grafana/dashboards.dev/overview.json +0 -0
  96. /package/{carbon → services/observability}/volumes/grafana/dashboards.dev/postgresql.json +0 -0
  97. /package/{carbon → services/observability}/volumes/grafana/provisioning/dashboards/dashboards.dev.yml +0 -0
  98. /package/{carbon → services/observability}/volumes/grafana/provisioning/dashboards/dashboards.yml +0 -0
  99. /package/{carbon → services/observability}/volumes/grafana/provisioning/datasources/datasources.yml +0 -0
  100. /package/{carbon → services/observability}/volumes/loki/loki-config.yml +0 -0
  101. /package/{carbon → services/observability}/volumes/prometheus/prometheus.yml +0 -0
  102. /package/{carbon → services/observability}/volumes/promtail/promtail-config.yml +0 -0
@@ -1,160 +0,0 @@
1
- ---
2
- title: "Optional Services"
3
- description: "Add workflow automation, analytics, caching, monitoring, and CI/CD to your project."
4
- order: 10
5
- ---
6
-
7
- ## Overview
8
-
9
- Vibecarbon ships with a core stack (Supabase, Traefik, Hono API, React SPA). You can extend it with optional services using the CLI:
10
-
11
- ```bash
12
- # Interactive — prompts for which service to add
13
- npx vibecarbon add
14
-
15
- # Or seed the service name to skip the prompt
16
- npx vibecarbon add <service>
17
- ```
18
-
19
- Each service adds Docker Compose files, Kubernetes manifests, environment variables, and feature flags to your project. Running the command multiple times is safe — it won't duplicate anything.
20
-
21
- ```bash
22
- # See available services in the interactive prompt body
23
- npx vibecarbon add
24
-
25
- # Remove a previously added service
26
- npx vibecarbon remove <service>
27
- ```
28
-
29
- ## n8n — Workflow Automation
30
-
31
- A self-hosted workflow automation platform for building integrations, scheduled jobs, and webhook-driven pipelines.
32
-
33
- ```bash
34
- npx vibecarbon add n8n
35
- ```
36
-
37
- **What gets added:**
38
- - `docker-compose.n8n.yml` — n8n container with PostgreSQL backend
39
- - `k8s/base/n8n/` — Kubernetes manifests
40
- - `volumes/db/n8n-init.sh` — Database initialization script
41
- - Environment variables: `N8N_WEBHOOK_URL`, `N8N_API_KEY`
42
- - Feature flags: `VITE_N8N_ENABLED`, `N8N_ENABLED`
43
-
44
- | Setting | Value |
45
- |---------|-------|
46
- | Dev URL | http://n8n.localhost |
47
- | Port | 5678 |
48
- | Production auth | Traefik ForwardAuth (`super_admin` role) |
49
-
50
- ## Metabase — Business Intelligence
51
-
52
- A self-hosted analytics dashboard that connects directly to your Supabase PostgreSQL database.
53
-
54
- ```bash
55
- npx vibecarbon add metabase
56
- ```
57
-
58
- **What gets added:**
59
- - `docker-compose.metabase.yml` — Metabase container
60
- - `k8s/base/metabase/` — Kubernetes manifests
61
- - `volumes/db/metabase-init.sh` — Database initialization script
62
- - Environment variables: `METABASE_ADMIN_EMAIL`, `METABASE_ADMIN_PASSWORD`
63
- - Feature flags: `VITE_METABASE_ENABLED`, `METABASE_ENABLED`
64
-
65
- | Setting | Value |
66
- |---------|-------|
67
- | Dev URL | http://metabase.localhost |
68
- | Port | 3001 |
69
- | Production auth | Traefik ForwardAuth (`super_admin` role) |
70
-
71
- ## Redis — Caching & Sessions
72
-
73
- An in-memory data store for server-side caching, rate limiting, and session storage.
74
-
75
- ```bash
76
- npx vibecarbon add redis
77
- ```
78
-
79
- **What gets added:**
80
- - `docker-compose.redis.yml` — Redis container
81
- - `k8s/base/redis/` — Kubernetes manifests
82
- - Environment variables: `REDIS_PASSWORD` (auto-generated)
83
- - Feature flags: `VITE_REDIS_ENABLED`, `REDIS_ENABLED`
84
-
85
- | Setting | Value |
86
- |---------|-------|
87
- | Host | localhost:6379 |
88
- | Credentials | Stored in `.env.local` (`REDIS_PASSWORD`) |
89
-
90
- When `REDIS_URL` is set, the built-in rate limiter automatically uses Redis for distributed limiting across multiple replicas. Without Redis, it falls back to an in-memory store — this works for single-instance deployments but does not share state across replicas.
91
-
92
- ## Observability — Monitoring Stack
93
-
94
- Enables the built-in Prometheus, Grafana, and Loki stack for metrics, dashboards, and log aggregation.
95
-
96
- ```bash
97
- npx vibecarbon add observability
98
- ```
99
-
100
- **What gets added:**
101
- - Enables `docker-compose.observability.yml` (already bundled in your project)
102
- - Feature flags: `VITE_OBSERVABILITY_ENABLED`, `OBSERVABILITY_ENABLED`
103
-
104
- | Setting | Value |
105
- |---------|-------|
106
- | Grafana URL | http://grafana.localhost |
107
- | Prometheus Port | 9190 |
108
- | Loki Port | 3100 |
109
- | Production auth | Traefik ForwardAuth (`super_admin` role) |
110
-
111
- ## GitHub — Repository & CI/CD
112
-
113
- CI/CD lives in `vibecarbon configure`, not `vibecarbon add`. It creates the GitHub repository (if missing), installs the canonical build + deploy workflows under `.github/workflows/`, rewrites image references to `ghcr.io/<owner>/<project>`, and flips `cicdEnabled: true` in `vibecarbon.json`.
114
-
115
- ```bash
116
- npx vibecarbon configure
117
- ```
118
-
119
- Pick **CI/CD** from the feature list. The wizard handles repo creation, image-ref rewriting, and workflow installation in one pass.
120
-
121
- **Prerequisites:** The [GitHub CLI](https://cli.github.com/) (`gh`) must be installed and authenticated.
122
-
123
- **What gets added:**
124
- - `.github/workflows/vibecarbon-build.yml` — image build pipeline
125
- - `.github/workflows/deploy.yml` — k8s push-deploy pipeline
126
- - Container image + Flux GitRepository references updated to `<owner>/<project>`
127
-
128
- ## Production Auth for Admin Services
129
-
130
- In development, n8n, Metabase, and Grafana are accessible without authentication. In production, they are protected by Traefik ForwardAuth — only users with the `super_admin` role can access them.
131
-
132
- The dev override compose files disable this requirement locally. When adding a new service that needs protection, follow the same pattern:
133
-
134
- 1. Add `traefik.http.routers.<name>.middlewares=super-admin-auth@file` in the service compose file
135
- 2. Create a dev override that sets the middleware to empty
136
-
137
- ## Feature Flags
138
-
139
- Each service sets client and server feature flags in `.env.local`:
140
-
141
- | Service | Client Flag | Server Flag |
142
- |---------|------------|-------------|
143
- | n8n | `VITE_N8N_ENABLED` | `N8N_ENABLED` |
144
- | Metabase | `VITE_METABASE_ENABLED` | `METABASE_ENABLED` |
145
- | Redis | `VITE_REDIS_ENABLED` | `REDIS_ENABLED` |
146
- | Observability | `VITE_OBSERVABILITY_ENABLED` | `OBSERVABILITY_ENABLED` |
147
-
148
- Use these flags to conditionally render UI elements or enable server-side integrations:
149
-
150
- ```typescript
151
- // Client-side
152
- if (import.meta.env.VITE_N8N_ENABLED === 'true') {
153
- // Show n8n link in admin sidebar
154
- }
155
-
156
- // Server-side
157
- if (process.env.REDIS_ENABLED === 'true') {
158
- // Use Redis for caching
159
- }
160
- ```
@@ -1,48 +0,0 @@
1
- import { motion, useInView } from 'framer-motion';
2
- import { useRef } from 'react';
3
- import { useTranslation } from 'react-i18next';
4
-
5
- export function MetricsStrip() {
6
- const { t } = useTranslation();
7
- const ref = useRef<HTMLElement>(null);
8
- const isInView = useInView(ref, { once: true, margin: '-50px' });
9
-
10
- const METRICS = [
11
- { value: t('landing.metrics.time.value'), label: t('landing.metrics.time.label') },
12
- { value: t('landing.metrics.services.value'), label: t('landing.metrics.services.label') },
13
- { value: t('landing.metrics.config.value'), label: t('landing.metrics.config.label') },
14
- { value: t('landing.metrics.commands.value'), label: t('landing.metrics.commands.label') },
15
- ];
16
-
17
- return (
18
- <section ref={ref} className="relative overflow-hidden border-y border-border/30">
19
- <div className="absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent" />
20
- <div className="absolute inset-x-0 bottom-0 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent" />
21
-
22
- {/* Horizontal gradient band behind */}
23
- <div className="absolute inset-0 bg-gradient-to-r from-transparent via-primary/5 to-transparent" />
24
- <div className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[300px] rounded-full bg-primary/6 blur-[120px] pointer-events-none" />
25
-
26
- <div className="relative mx-auto max-w-7xl px-6 py-16">
27
- <div className="grid grid-cols-2 md:grid-cols-4 divide-x divide-border/30">
28
- {METRICS.map((metric, i) => (
29
- <motion.div
30
- key={metric.label}
31
- initial={{ opacity: 0, y: 20 }}
32
- animate={isInView ? { opacity: 1, y: 0 } : {}}
33
- transition={{ duration: 0.5, delay: i * 0.1 }}
34
- className="px-6 py-4 text-center hover:bg-primary/[0.03] transition-colors duration-300"
35
- >
36
- <div className="metric-value text-2xl sm:text-3xl md:text-4xl font-black tracking-tight mb-2">
37
- {metric.value}
38
- </div>
39
- <div className="text-xs sm:text-sm text-muted-foreground uppercase tracking-widest">
40
- {metric.label}
41
- </div>
42
- </motion.div>
43
- ))}
44
- </div>
45
- </div>
46
- </section>
47
- );
48
- }