{
  "manifest_version": "1.0.0",
  "template": {
    "id": "0753b476-5efb-4317-a293-7570aa6ce861",
    "slug": "learnhouse",
    "name": "LearnHouse",
    "description": "Deploy LearnHouse with PostgreSQL, Redis, and durable S3 media storage.",
    "url": "https://railway.com/deploy/learnhouse",
    "upstream": {
      "image": "ghcr.io/learnhouse/app:1.3.5@sha256:674fe2ca1f19861c39c5240d8ef4d4beabe98a8141759832d05ac7935a4ec5ba"
    }
  },
  "services": [
    {
      "name": "learnhouse",
      "source": {
        "image": "ghcr.io/learnhouse/app:1.3.5@sha256:674fe2ca1f19861c39c5240d8ef4d4beabe98a8141759832d05ac7935a4ec5ba"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "postgres",
      "source": {
        "image": "pgvector/pgvector:0.8.0-pg16@sha256:a132765ec351c65111b5b675928a3a0515a466a40f97277329db8b8209ad8bc9"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "redis",
      "source": {
        "repo": "https://github.com/monotykamary/railway-template-learnhouse"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "learnhouse",
      "description": "Internal Next.js listener port used by the bundled reverse proxy.",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "HOSTNAME",
      "service": "learnhouse",
      "description": "Bind the LearnHouse web process on every container interface.",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "HTTP_PORT",
      "service": "learnhouse",
      "description": "Public HTTP listener for the bundled reverse proxy.",
      "secret": false,
      "strategy": "default",
      "default": "80"
    },
    {
      "key": "AWS_REGION",
      "service": "learnhouse",
      "description": "AWS SDK region used with the Railway Bucket S3 API.",
      "secret": false,
      "strategy": "default",
      "default": "auto"
    },
    {
      "key": "NEXTAUTH_URL",
      "service": "learnhouse",
      "description": "Canonical public origin used by NextAuth.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LEARNHOUSE_ENV",
      "service": "learnhouse",
      "description": "Run LearnHouse with production settings.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "LEARNHOUSE_SSL",
      "service": "learnhouse",
      "description": "Tell LearnHouse that its public origin uses HTTPS.",
      "secret": false,
      "strategy": "default",
      "default": "True"
    },
    {
      "key": "LEARNHOUSE_PORT",
      "service": "learnhouse",
      "description": "Internal FastAPI listener port.",
      "secret": false,
      "strategy": "default",
      "default": "9000"
    },
    {
      "key": "NEXTAUTH_SECRET",
      "service": "learnhouse",
      "description": "Generated signing secret for NextAuth sessions.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "learnhouse",
      "description": "Access key generated by the uploads Railway Bucket.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "LEARNHOUSE_DOMAIN",
      "service": "learnhouse",
      "description": "Public LearnHouse hostname without a scheme.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "AWS_DEFAULT_REGION",
      "service": "learnhouse",
      "description": "Default AWS SDK region used with the Railway Bucket.",
      "secret": false,
      "strategy": "default",
      "default": "auto"
    },
    {
      "key": "COLLAB_TRUST_PROXY",
      "service": "learnhouse",
      "description": "Trust Railway proxy forwarding data for collaboration rate limiting.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "LEARNHOUSE_API_URL",
      "service": "learnhouse",
      "description": "Container-local API origin used by the collaboration server.",
      "secret": false,
      "strategy": "default",
      "default": "http://localhost:9000"
    },
    {
      "key": "LEARNHOUSE_TENANCY",
      "service": "learnhouse",
      "description": "Run the Community edition in single-tenant mode.",
      "secret": false,
      "strategy": "default",
      "default": "single"
    },
    {
      "key": "COLLAB_INTERNAL_KEY",
      "service": "learnhouse",
      "description": "Generated shared key for private collaboration-to-API persistence calls.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "LEARNHOUSE_REDIS_URL",
      "service": "learnhouse",
      "description": "Authenticated Redis URL used by the collaboration server.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "learnhouse",
      "description": "Secret key generated by the uploads Railway Bucket.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEXT_PUBLIC_COLLAB_URL",
      "service": "learnhouse",
      "description": "Public same-origin WebSocket endpoint for real-time collaboration.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LEARNHOUSE_IS_AI_ENABLED",
      "service": "learnhouse",
      "description": "Keep optional AI features disabled until provider credentials are configured.",
      "secret": false,
      "strategy": "default",
      "default": "False"
    },
    {
      "key": "LEARNHOUSE_S3_API_REGION",
      "service": "learnhouse",
      "description": "S3-compatible region accepted by Railway Buckets.",
      "secret": false,
      "strategy": "default",
      "default": "auto"
    },
    {
      "key": "LEARNHOUSE_ALLOWED_ORIGINS",
      "service": "learnhouse",
      "description": "Allowed browser origin for the API CORS policy.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LEARNHOUSE_FRONTEND_DOMAIN",
      "service": "learnhouse",
      "description": "Public frontend hostname without a scheme.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LEARNHOUSE_LOGFIRE_ENABLED",
      "service": "learnhouse",
      "description": "Keep optional Logfire telemetry disabled by default.",
      "secret": false,
      "strategy": "default",
      "default": "False"
    },
    {
      "key": "LEARNHOUSE_DEVELOPMENT_MODE",
      "service": "learnhouse",
      "description": "Disable development-only LearnHouse behavior.",
      "secret": false,
      "strategy": "default",
      "default": "False"
    },
    {
      "key": "LEARNHOUSE_INITIAL_ORG_NAME",
      "service": "learnhouse",
      "description": "Name of the organization created on first boot.",
      "secret": false,
      "strategy": "default",
      "default": "Railway Learning"
    },
    {
      "key": "LEARNHOUSE_INITIAL_ORG_SLUG",
      "service": "learnhouse",
      "description": "URL slug of the organization created on first boot.",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "NEXT_PUBLIC_LEARNHOUSE_HTTPS",
      "service": "learnhouse",
      "description": "Generate HTTPS browser URLs.",
      "secret": false,
      "strategy": "default",
      "default": "True"
    },
    {
      "key": "LEARNHOUSE_S3_API_BUCKET_NAME",
      "service": "learnhouse",
      "description": "Bucket name generated by the uploads Railway Bucket.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEXT_PUBLIC_LEARNHOUSE_DOMAIN",
      "service": "learnhouse",
      "description": "Public LearnHouse hostname exposed to the browser.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LEARNHOUSE_AUTH_JWT_SECRET_KEY",
      "service": "learnhouse",
      "description": "Generated HS256 signing secret shared by the API and collaboration server.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "LEARNHOUSE_INITIAL_ADMIN_EMAIL",
      "service": "learnhouse",
      "description": "Email address for the administrator created on first boot.",
      "secret": false,
      "strategy": "default",
      "default": "admin@example.com"
    },
    {
      "key": "LEARNHOUSE_S3_API_ENDPOINT_URL",
      "service": "learnhouse",
      "description": "S3-compatible endpoint generated by the uploads Railway Bucket.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEXT_PUBLIC_LEARNHOUSE_API_URL",
      "service": "learnhouse",
      "description": "Public API base URL exposed to the browser.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LEARNHOUSE_CONTENT_DELIVERY_TYPE",
      "service": "learnhouse",
      "description": "Store uploaded course media in the Railway Bucket.",
      "secret": false,
      "strategy": "default",
      "default": "s3api"
    },
    {
      "key": "LEARNHOUSE_SQL_CONNECTION_STRING",
      "service": "learnhouse",
      "description": "Private PostgreSQL connection used by LearnHouse.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "NEXT_PUBLIC_LEARNHOUSE_MULTI_ORG",
      "service": "learnhouse",
      "description": "Expose the single-organization Community experience.",
      "secret": false,
      "strategy": "default",
      "default": "False"
    },
    {
      "key": "LEARNHOUSE_INITIAL_ADMIN_PASSWORD",
      "service": "learnhouse",
      "description": "Generated initial administrator password; rotate it after first login.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "NEXT_PUBLIC_LEARNHOUSE_TOP_DOMAIN",
      "service": "learnhouse",
      "description": "Top-level public hostname used by the frontend.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "LEARNHOUSE_REDIS_CONNECTION_STRING",
      "service": "learnhouse",
      "description": "Authenticated private Redis connection used by the API.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "NEXT_PUBLIC_LEARNHOUSE_BACKEND_URL",
      "service": "learnhouse",
      "description": "Public backend origin exposed to the browser.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "NEXT_PUBLIC_LEARNHOUSE_DEFAULT_ORG",
      "service": "learnhouse",
      "description": "Default organization slug opened by the frontend.",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "PGDATA",
      "service": "postgres",
      "description": "Use a writable child directory inside the persistent PostgreSQL volume.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "POSTGRES_DB",
      "service": "postgres",
      "description": "Database created for LearnHouse.",
      "secret": false,
      "strategy": "default",
      "default": "learnhouse"
    },
    {
      "key": "POSTGRES_USER",
      "service": "postgres",
      "description": "Database role created for LearnHouse.",
      "secret": false,
      "strategy": "default",
      "default": "learnhouse"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "postgres",
      "description": "Generated password for the LearnHouse PostgreSQL role.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "redis",
      "description": "Generated password required by every Redis client.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "learnhouse"
      }
    },
    "cli": "railway deploy --template learnhouse",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "0753b476-5efb-4317-a293-7570aa6ce861",
            "serializedConfig": {
              "buckets": {
                "c763b55c-b78e-440c-82fd-a8d5822c769c": {
                  "name": "uploads"
                }
              },
              "services": {
                "5da15993-f23b-46fb-8071-095f8f8ab489": {
                  "icon": "https://raw.githubusercontent.com/monotykamary/railway-template-learnhouse/960a16a4f3154c0781cc59e8459c451ce1fd6e3a/assets/learnhouse-icon.png",
                  "name": "learnhouse",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ON_FAILURE",
                    "healthcheckTimeout": 600,
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/learnhouse/app:1.3.5@sha256:674fe2ca1f19861c39c5240d8ef4d4beabe98a8141759832d05ac7935a4ec5ba"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Internal Next.js listener port used by the bundled reverse proxy.",
                      "defaultValue": "8000"
                    },
                    "HOSTNAME": {
                      "isOptional": false,
                      "description": "Bind the LearnHouse web process on every container interface.",
                      "defaultValue": "0.0.0.0"
                    },
                    "HTTP_PORT": {
                      "isOptional": false,
                      "description": "Public HTTP listener for the bundled reverse proxy.",
                      "defaultValue": "80"
                    },
                    "AWS_REGION": {
                      "isOptional": false,
                      "description": "AWS SDK region used with the Railway Bucket S3 API.",
                      "defaultValue": "auto"
                    },
                    "NEXTAUTH_URL": {
                      "isOptional": false,
                      "description": "Canonical public origin used by NextAuth.",
                      "defaultValue": "https://${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LEARNHOUSE_ENV": {
                      "isOptional": false,
                      "description": "Run LearnHouse with production settings.",
                      "defaultValue": "production"
                    },
                    "LEARNHOUSE_SSL": {
                      "isOptional": false,
                      "description": "Tell LearnHouse that its public origin uses HTTPS.",
                      "defaultValue": "True"
                    },
                    "LEARNHOUSE_PORT": {
                      "isOptional": false,
                      "description": "Internal FastAPI listener port.",
                      "defaultValue": "9000"
                    },
                    "NEXTAUTH_SECRET": {
                      "isOptional": false,
                      "description": "Generated signing secret for NextAuth sessions.",
                      "defaultValue": "{{NEXTAUTH_SECRET}}"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Access key generated by the uploads Railway Bucket.",
                      "defaultValue": "${{uploads.ACCESS_KEY_ID}}"
                    },
                    "LEARNHOUSE_DOMAIN": {
                      "isOptional": false,
                      "description": "Public LearnHouse hostname without a scheme.",
                      "defaultValue": "${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "AWS_DEFAULT_REGION": {
                      "isOptional": false,
                      "description": "Default AWS SDK region used with the Railway Bucket.",
                      "defaultValue": "auto"
                    },
                    "COLLAB_TRUST_PROXY": {
                      "isOptional": false,
                      "description": "Trust Railway proxy forwarding data for collaboration rate limiting.",
                      "defaultValue": "true"
                    },
                    "LEARNHOUSE_API_URL": {
                      "isOptional": false,
                      "description": "Container-local API origin used by the collaboration server.",
                      "defaultValue": "http://localhost:9000"
                    },
                    "LEARNHOUSE_TENANCY": {
                      "isOptional": false,
                      "description": "Run the Community edition in single-tenant mode.",
                      "defaultValue": "single"
                    },
                    "COLLAB_INTERNAL_KEY": {
                      "isOptional": false,
                      "description": "Generated shared key for private collaboration-to-API persistence calls.",
                      "defaultValue": "{{COLLAB_INTERNAL_KEY}}"
                    },
                    "LEARNHOUSE_REDIS_URL": {
                      "isOptional": false,
                      "description": "Authenticated Redis URL used by the collaboration server.",
                      "defaultValue": "redis://:${{redis.REDIS_PASSWORD}}@${{redis.RAILWAY_PRIVATE_DOMAIN}}:6379?family=0"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Secret key generated by the uploads Railway Bucket.",
                      "defaultValue": "${{uploads.SECRET_ACCESS_KEY}}"
                    },
                    "NEXT_PUBLIC_COLLAB_URL": {
                      "isOptional": false,
                      "description": "Public same-origin WebSocket endpoint for real-time collaboration.",
                      "defaultValue": "wss://${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}/collab"
                    },
                    "LEARNHOUSE_IS_AI_ENABLED": {
                      "isOptional": false,
                      "description": "Keep optional AI features disabled until provider credentials are configured.",
                      "defaultValue": "False"
                    },
                    "LEARNHOUSE_S3_API_REGION": {
                      "isOptional": false,
                      "description": "S3-compatible region accepted by Railway Buckets.",
                      "defaultValue": "auto"
                    },
                    "LEARNHOUSE_ALLOWED_ORIGINS": {
                      "isOptional": false,
                      "description": "Allowed browser origin for the API CORS policy.",
                      "defaultValue": "https://${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LEARNHOUSE_FRONTEND_DOMAIN": {
                      "isOptional": false,
                      "description": "Public frontend hostname without a scheme.",
                      "defaultValue": "${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LEARNHOUSE_LOGFIRE_ENABLED": {
                      "isOptional": false,
                      "description": "Keep optional Logfire telemetry disabled by default.",
                      "defaultValue": "False"
                    },
                    "LEARNHOUSE_DEVELOPMENT_MODE": {
                      "isOptional": false,
                      "description": "Disable development-only LearnHouse behavior.",
                      "defaultValue": "False"
                    },
                    "LEARNHOUSE_INITIAL_ORG_NAME": {
                      "isOptional": false,
                      "description": "Name of the organization created on first boot.",
                      "defaultValue": "Railway Learning"
                    },
                    "LEARNHOUSE_INITIAL_ORG_SLUG": {
                      "isOptional": false,
                      "description": "URL slug of the organization created on first boot.",
                      "defaultValue": "railway"
                    },
                    "NEXT_PUBLIC_LEARNHOUSE_HTTPS": {
                      "isOptional": false,
                      "description": "Generate HTTPS browser URLs.",
                      "defaultValue": "True"
                    },
                    "LEARNHOUSE_S3_API_BUCKET_NAME": {
                      "isOptional": false,
                      "description": "Bucket name generated by the uploads Railway Bucket.",
                      "defaultValue": "${{uploads.BUCKET}}"
                    },
                    "NEXT_PUBLIC_LEARNHOUSE_DOMAIN": {
                      "isOptional": false,
                      "description": "Public LearnHouse hostname exposed to the browser.",
                      "defaultValue": "${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LEARNHOUSE_AUTH_JWT_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Generated HS256 signing secret shared by the API and collaboration server.",
                      "defaultValue": "{{LEARNHOUSE_AUTH_JWT_SECRET_KEY}}"
                    },
                    "LEARNHOUSE_INITIAL_ADMIN_EMAIL": {
                      "isOptional": false,
                      "description": "Email address for the administrator created on first boot.",
                      "defaultValue": "admin@example.com"
                    },
                    "LEARNHOUSE_S3_API_ENDPOINT_URL": {
                      "isOptional": false,
                      "description": "S3-compatible endpoint generated by the uploads Railway Bucket.",
                      "defaultValue": "${{uploads.ENDPOINT}}"
                    },
                    "NEXT_PUBLIC_LEARNHOUSE_API_URL": {
                      "isOptional": false,
                      "description": "Public API base URL exposed to the browser.",
                      "defaultValue": "https://${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}/api/v1/"
                    },
                    "LEARNHOUSE_CONTENT_DELIVERY_TYPE": {
                      "isOptional": false,
                      "description": "Store uploaded course media in the Railway Bucket.",
                      "defaultValue": "s3api"
                    },
                    "LEARNHOUSE_SQL_CONNECTION_STRING": {
                      "isOptional": false,
                      "description": "Private PostgreSQL connection used by LearnHouse.",
                      "defaultValue": "postgresql://learnhouse:${{postgres.POSTGRES_PASSWORD}}@${{postgres.RAILWAY_PRIVATE_DOMAIN}}:5432/learnhouse"
                    },
                    "NEXT_PUBLIC_LEARNHOUSE_MULTI_ORG": {
                      "isOptional": false,
                      "description": "Expose the single-organization Community experience.",
                      "defaultValue": "False"
                    },
                    "LEARNHOUSE_INITIAL_ADMIN_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated initial administrator password; rotate it after first login.",
                      "defaultValue": "{{LEARNHOUSE_INITIAL_ADMIN_PASSWORD}}"
                    },
                    "NEXT_PUBLIC_LEARNHOUSE_TOP_DOMAIN": {
                      "isOptional": false,
                      "description": "Top-level public hostname used by the frontend.",
                      "defaultValue": "${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "LEARNHOUSE_REDIS_CONNECTION_STRING": {
                      "isOptional": false,
                      "description": "Authenticated private Redis connection used by the API.",
                      "defaultValue": "redis://:${{redis.REDIS_PASSWORD}}@${{redis.RAILWAY_PRIVATE_DOMAIN}}:6379/learnhouse"
                    },
                    "NEXT_PUBLIC_LEARNHOUSE_BACKEND_URL": {
                      "isOptional": false,
                      "description": "Public backend origin exposed to the browser.",
                      "defaultValue": "https://${{learnhouse.RAILWAY_PUBLIC_DOMAIN}}/"
                    },
                    "NEXT_PUBLIC_LEARNHOUSE_DEFAULT_ORG": {
                      "isOptional": false,
                      "description": "Default organization slug opened by the frontend.",
                      "defaultValue": "railway"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:80": {
                        "port": 80
                      }
                    }
                  }
                },
                "b20047e3-2435-4457-b9bb-93386cdffaf7": {
                  "icon": "https://devicons.railway.com/i/postgresql.svg",
                  "name": "postgres",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "pgvector/pgvector:0.8.0-pg16@sha256:a132765ec351c65111b5b675928a3a0515a466a40f97277329db8b8209ad8bc9"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": false,
                      "description": "Use a writable child directory inside the persistent PostgreSQL volume.",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Database created for LearnHouse.",
                      "defaultValue": "learnhouse"
                    },
                    "POSTGRES_USER": {
                      "isOptional": false,
                      "description": "Database role created for LearnHouse.",
                      "defaultValue": "learnhouse"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated password for the LearnHouse PostgreSQL role.",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "b20047e3-2435-4457-b9bb-93386cdffaf7": {
                      "mountPath": "/var/lib/postgresql/data",
                      "backupSchedules": [
                        "DAILY"
                      ]
                    }
                  }
                },
                "f2636697-6d33-4917-aed2-e6af8c3183a2": {
                  "icon": "https://devicons.railway.com/i/redis.svg",
                  "name": "redis",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/monotykamary/railway-template-learnhouse",
                    "commitSha": "9bae48464dcfa002f0daa483a20c86ec5fe3bc0d",
                    "rootDirectory": null
                  },
                  "variables": {
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated password required by every Redis client.",
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "f2636697-6d33-4917-aed2-e6af8c3183a2": {
                      "mountPath": "/data",
                      "backupSchedules": [
                        "DAILY"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "learnhouse",
      "method": "GET",
      "path": "/health",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 3,
    "needs_volume": true
  },
  "generated_at": "2026-09-10T10:14:45.332Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-04T18:22:12.405Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_103ec1e402654105bc54",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "healthcheck",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 130,
    "typical_build_seconds": 0,
    "typical_start_seconds": 20,
    "slowest_service": "learnhouse"
  }
}
