Files
metabuilder/codegen/deployment-config.json
johndoe6345789 a51130a127 feat: Add external low-code and postgres repositories
- codegen: Low-code React app with JSON-driven component system
- packagerepo: Schema-driven package repository with backend/frontend
- postgres: Next.js app with Drizzle ORM and PostgreSQL

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:48:52 +00:00

343 lines
8.8 KiB
JSON

{
"$schema": "./schemas/deployment-schema.json",
"version": "1.0.0",
"platforms": {
"caprover": {
"enabled": true,
"appName": "codeforge",
"containerHttpPort": 80,
"instanceCount": 1,
"captainDefinitionRelativePath": "./captain-definition.json",
"healthCheck": {
"enabled": true,
"path": "/health",
"interval": 30,
"timeout": 10,
"retries": 3,
"startPeriod": 10
},
"envVars": {
"NODE_ENV": "production",
"PORT": "80"
},
"buildOptimizations": {
"simplifiedChunks": true,
"aggressiveMinification": true,
"inlineSmallAssets": true,
"chunkSizeLimit": 2000,
"dropConsole": true,
"sourcemaps": false
},
"serverOptimizations": {
"startupDelay": 5000,
"healthCheckDelay": 10000,
"gracefulShutdownTimeout": 30000
},
"pwa": {
"clearCacheOnDeploy": true,
"serviceWorkerScope": "/",
"updateOnReload": true
},
"resources": {
"memory": "512M",
"cpuShares": 1024
},
"volumes": [],
"notes": [
"CapRover requires PORT environment variable",
"Health check endpoint must respond within timeout",
"Simplified chunking reduces asset loading issues",
"PWA cache is cleared on each deployment to prevent stale assets"
]
},
"docker-compose": {
"enabled": true,
"serviceName": "app",
"port": 3000,
"containerPort": 80,
"restart": "unless-stopped",
"healthCheck": {
"enabled": true,
"test": ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"],
"interval": "30s",
"timeout": "3s",
"retries": 3,
"startPeriod": "5s"
},
"labels": {
"traefik.enable": "true",
"traefik.http.routers.codeforge.rule": "Host(`codeforge.example.com`)",
"traefik.http.services.codeforge.loadbalancer.server.port": "80"
},
"networks": ["codeforge-network"],
"envVars": {
"NODE_ENV": "production"
}
},
"heroku": {
"enabled": false,
"appName": "codeforge-app",
"buildpack": "heroku/nodejs",
"stack": "heroku-22",
"region": "us",
"dynoType": "web",
"procfile": "web: npm run preview",
"envVars": {
"NODE_ENV": "production",
"NPM_CONFIG_PRODUCTION": "false"
},
"addons": [],
"notes": [
"Heroku uses PORT environment variable dynamically",
"Preview server automatically binds to Heroku's PORT"
]
},
"vercel": {
"enabled": false,
"framework": "vite",
"buildCommand": "npm run build",
"outputDirectory": "dist",
"installCommand": "npm ci",
"devCommand": "npm run dev",
"routes": [
{
"src": "/(.*)",
"dest": "/index.html"
}
],
"headers": [
{
"source": "/(.*)",
"headers": [
{
"key": "X-Content-Type-Options",
"value": "nosniff"
},
{
"key": "X-Frame-Options",
"value": "DENY"
},
{
"key": "X-XSS-Protection",
"value": "1; mode=block"
}
]
}
],
"envVars": {},
"notes": [
"Vercel automatically handles SPA routing",
"Static file serving optimized by CDN"
]
},
"netlify": {
"enabled": false,
"buildCommand": "npm run build",
"publishDirectory": "dist",
"functionsDirectory": "netlify/functions",
"redirects": [
{
"from": "/*",
"to": "/index.html",
"status": 200
}
],
"headers": [
{
"for": "/*",
"values": {
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "DENY",
"X-XSS-Protection": "1; mode=block"
}
}
],
"envVars": {},
"notes": [
"Netlify automatically handles SPA routing via _redirects",
"Edge functions available for serverless endpoints"
]
},
"aws-ecs": {
"enabled": false,
"taskDefinitionFamily": "codeforge",
"containerName": "codeforge-app",
"cpu": "256",
"memory": "512",
"port": 80,
"healthCheck": {
"command": ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost/health || exit 1"],
"interval": 30,
"timeout": 5,
"retries": 3,
"startPeriod": 10
},
"logging": {
"driver": "awslogs",
"options": {
"awslogs-group": "/ecs/codeforge",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
},
"envVars": {
"NODE_ENV": "production",
"PORT": "80"
}
},
"kubernetes": {
"enabled": false,
"deploymentName": "codeforge",
"namespace": "default",
"replicas": 2,
"containerPort": 80,
"servicePort": 80,
"serviceType": "ClusterIP",
"resources": {
"requests": {
"cpu": "100m",
"memory": "256Mi"
},
"limits": {
"cpu": "500m",
"memory": "512Mi"
}
},
"livenessProbe": {
"httpGet": {
"path": "/health",
"port": 80
},
"initialDelaySeconds": 10,
"periodSeconds": 30,
"timeoutSeconds": 5,
"successThreshold": 1,
"failureThreshold": 3
},
"readinessProbe": {
"httpGet": {
"path": "/health",
"port": 80
},
"initialDelaySeconds": 5,
"periodSeconds": 10,
"timeoutSeconds": 3,
"successThreshold": 1,
"failureThreshold": 3
},
"envVars": {
"NODE_ENV": "production",
"PORT": "80"
}
}
},
"commonOptimizations": {
"production": {
"minify": true,
"treeshake": true,
"splitChunks": "optimal",
"compression": "gzip",
"cache": true,
"sourcemaps": false
},
"staging": {
"minify": true,
"treeshake": true,
"splitChunks": "balanced",
"compression": "gzip",
"cache": true,
"sourcemaps": true
},
"development": {
"minify": false,
"treeshake": false,
"splitChunks": "minimal",
"compression": "none",
"cache": false,
"sourcemaps": true
}
},
"buildProfiles": {
"caprover-optimized": {
"description": "Optimized build for CapRover deployment with simplified chunking",
"platform": "caprover",
"chunks": {
"strategy": "simple",
"groups": {
"vendor": ["node_modules"],
"app": ["src"]
}
},
"minification": {
"enabled": true,
"options": {
"compress": {
"drop_console": true,
"drop_debugger": true,
"pure_funcs": ["console.log", "console.time", "console.timeEnd"]
}
}
},
"assets": {
"inlineLimit": 8192,
"assetsInlineLimit": 4096
}
},
"cdn-optimized": {
"description": "Optimized for CDN deployment with aggressive chunking",
"platform": ["vercel", "netlify"],
"chunks": {
"strategy": "granular",
"maxSize": 500000,
"groups": {
"react-vendor": ["react", "react-dom"],
"ui-core": ["@radix-ui"],
"code-editor": ["@monaco-editor"],
"data-viz": ["d3", "recharts"],
"icons": ["@phosphor-icons", "lucide-react"]
}
},
"minification": {
"enabled": true,
"options": {
"compress": {
"drop_console": true,
"drop_debugger": true
}
}
},
"assets": {
"inlineLimit": 4096,
"assetsInlineLimit": 2048
}
}
},
"monitoring": {
"enabled": false,
"healthCheckEndpoint": "/health",
"metricsEndpoint": "/metrics",
"readinessEndpoint": "/ready",
"livenessEndpoint": "/live"
},
"security": {
"headers": {
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "DENY",
"X-XSS-Protection": "1; mode=block",
"Referrer-Policy": "strict-origin-when-cross-origin",
"Permissions-Policy": "geolocation=(), microphone=(), camera=()"
},
"csp": {
"enabled": false,
"directives": {
"default-src": ["'self'"],
"script-src": ["'self'", "'unsafe-inline'"],
"style-src": ["'self'", "'unsafe-inline'", "https://fonts.googleapis.com"],
"font-src": ["'self'", "https://fonts.gstatic.com"],
"img-src": ["'self'", "data:", "https:"],
"connect-src": ["'self'"]
}
}
}
}