vibecarbon 0.1.6 → 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.
- package/carbon/.env.example +3 -2
- package/carbon/DEVELOPMENT.md +18 -3
- package/carbon/PRODUCTION.md +1 -1
- package/carbon/content/docs/cli.mdx +3 -3
- package/carbon/content/docs/deployment.mdx +1 -1
- package/carbon/content/docs/development.mdx +1 -1
- package/carbon/content/docs/getting-started.mdx +0 -1
- package/carbon/docker-compose.prod.yml +11 -1
- package/carbon/scripts/dev-init.js +1 -1
- package/carbon/scripts/generate-dev-configs.sh +5 -7
- package/carbon/scripts/validate-dev-configs.sh +5 -7
- package/carbon/src/client/components/TechStackSection.tsx +0 -68
- package/carbon/src/client/index.css +0 -14
- package/carbon/src/client/locales/de.json +0 -18
- package/carbon/src/client/locales/en.json +86 -36
- package/carbon/src/client/locales/es.json +0 -18
- package/carbon/src/client/locales/fr.json +0 -18
- package/carbon/src/client/locales/pt.json +0 -18
- package/carbon/src/client/pages/Home.tsx +0 -3
- package/package.json +4 -2
- package/services/index.json +29 -0
- package/services/metabase/compose/docker-compose.override.yml +14 -0
- package/services/metabase/compose/docker-compose.prod.yml +29 -0
- package/services/metabase/compose/docker-compose.yml +68 -0
- package/services/metabase/db/init.sh +29 -0
- package/services/metabase/docs/integration.md +191 -0
- package/services/metabase/k8s/deployment.yaml +88 -0
- package/services/metabase/k8s/ingressroute.yaml +22 -0
- package/services/metabase/k8s/kustomization.yaml +9 -0
- package/services/metabase/k8s/network-policy.yaml +74 -0
- package/services/metabase/k8s/pvc.yaml +12 -0
- package/services/metabase/k8s/service.yaml +15 -0
- package/services/metabase/manifest.json +34 -0
- package/services/metabase/scripts/setup.sh +152 -0
- package/services/n8n/compose/docker-compose.override.yml +14 -0
- package/services/n8n/compose/docker-compose.prod.yml +32 -0
- package/services/n8n/compose/docker-compose.yml +99 -0
- package/services/n8n/db/init.sh +25 -0
- package/services/n8n/docs/SSO.md +124 -0
- package/services/n8n/docs/integration.md +155 -0
- package/services/n8n/hooks/hooks.js +131 -0
- package/services/n8n/k8s/deployment.yaml +116 -0
- package/services/n8n/k8s/ingressroute.yaml +24 -0
- package/services/n8n/k8s/kustomization.yaml +9 -0
- package/services/n8n/k8s/network-policy.yaml +82 -0
- package/services/n8n/k8s/pvc.yaml +14 -0
- package/services/n8n/k8s/service.yaml +14 -0
- package/services/n8n/manifest.json +36 -0
- package/services/n8n/scripts/setup.sh +42 -0
- package/{carbon/docker-compose.observability.prod.yml → services/observability/compose/docker-compose.prod.yml} +8 -0
- package/services/observability/docs/integration.md +31 -0
- package/services/observability/k8s/grafana-deployment.yaml +107 -0
- package/services/observability/k8s/grafana-provisioning-configmap.yaml +65 -0
- package/services/observability/k8s/grafana-pvc.yaml +14 -0
- package/services/observability/k8s/grafana-service.yaml +16 -0
- package/services/observability/k8s/ingressroute.yaml +22 -0
- package/services/observability/k8s/kustomization.yaml +24 -0
- package/services/observability/k8s/loki-configmap.yaml +74 -0
- package/services/observability/k8s/loki-deployment.yaml +72 -0
- package/services/observability/k8s/loki-pvc.yaml +14 -0
- package/services/observability/k8s/loki-service.yaml +16 -0
- package/services/observability/k8s/network-policy.yaml +141 -0
- package/services/observability/k8s/prometheus-configmap.yaml +80 -0
- package/services/observability/k8s/prometheus-deployment.yaml +78 -0
- package/services/observability/k8s/prometheus-pvc.yaml +14 -0
- package/services/observability/k8s/prometheus-rbac.yaml +55 -0
- package/services/observability/k8s/prometheus-service.yaml +16 -0
- package/services/observability/manifest.json +28 -0
- package/services/redis/compose/docker-compose.prod.yml +10 -0
- package/services/redis/compose/docker-compose.yml +24 -0
- package/services/redis/docs/integration.md +148 -0
- package/services/redis/k8s/deployment.yaml +70 -0
- package/services/redis/k8s/kustomization.yaml +8 -0
- package/services/redis/k8s/network-policy.yaml +20 -0
- package/services/redis/k8s/pvc.yaml +12 -0
- package/services/redis/k8s/service.yaml +15 -0
- package/services/redis/manifest.json +30 -0
- package/services/s3/compose/docker-compose.s3-ha.yml +86 -0
- package/services/s3/compose/docker-compose.s3.yml +35 -0
- package/services/s3/manifest.json +87 -0
- package/src/add.js +57 -89
- package/src/cli.js +1 -1
- package/src/create.js +3 -87
- package/src/lib/deploy/bundle.js +4 -2
- package/src/lib/deploy/compose/index.js +45 -17
- package/src/lib/deploy/orchestrator.js +13 -1
- package/src/remove.js +9 -6
- package/carbon/content/docs/optional-services.mdx +0 -160
- package/carbon/src/client/components/MetricsStrip.tsx +0 -48
- /package/{carbon/docker-compose.observability.override.yml → services/observability/compose/docker-compose.override.yml} +0 -0
- /package/{carbon/docker-compose.observability.yml → services/observability/compose/docker-compose.yml} +0 -0
- /package/{carbon → services/observability}/volumes/grafana/dashboards/logs.json +0 -0
- /package/{carbon → services/observability}/volumes/grafana/dashboards/overview.json +0 -0
- /package/{carbon → services/observability}/volumes/grafana/dashboards/postgresql.json +0 -0
- /package/{carbon → services/observability}/volumes/grafana/dashboards.dev/logs.json +0 -0
- /package/{carbon → services/observability}/volumes/grafana/dashboards.dev/overview.json +0 -0
- /package/{carbon → services/observability}/volumes/grafana/dashboards.dev/postgresql.json +0 -0
- /package/{carbon → services/observability}/volumes/grafana/provisioning/dashboards/dashboards.dev.yml +0 -0
- /package/{carbon → services/observability}/volumes/grafana/provisioning/dashboards/dashboards.yml +0 -0
- /package/{carbon → services/observability}/volumes/grafana/provisioning/datasources/datasources.yml +0 -0
- /package/{carbon → services/observability}/volumes/loki/loki-config.yml +0 -0
- /package/{carbon → services/observability}/volumes/prometheus/prometheus.yml +0 -0
- /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
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{carbon → services/observability}/volumes/grafana/provisioning/dashboards/dashboards.yml
RENAMED
|
File without changes
|
/package/{carbon → services/observability}/volumes/grafana/provisioning/datasources/datasources.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|