{
  "manifest_version": "1.0.0",
  "template": {
    "id": "5b26c62d-104c-4127-a571-af630e286afb",
    "slug": "novu-community-edition",
    "name": "Novu Community Edition",
    "description": "Notification workflows with API, workers, dashboard, and WebSockets.",
    "url": "https://railway.com/deploy/novu-community-edition",
    "upstream": {
      "image": "ghcr.io/novuhq/novu/ws:3.19.0@sha256:00aa8b9f080da2af443269af672c00b7561556d7adb4b097b4e54c2127de61e5"
    }
  },
  "services": [
    {
      "name": "storage",
      "source": {
        "repo": "https://github.com/orenaksakal/railway-templates"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "ws",
      "source": {
        "image": "ghcr.io/novuhq/novu/ws:3.19.0@sha256:00aa8b9f080da2af443269af672c00b7561556d7adb4b097b4e54c2127de61e5"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "mongodb",
      "source": {
        "image": "mongo:8.0.17@sha256:9814652e33f0cf8b9fddea8b46dfc9d8e19b130dcfdd7b510ca58bb0d40c8b71"
      },
      "needs_volume": true,
      "volume_mount_path": "/data/db",
      "http": false
    },
    {
      "name": "redis",
      "source": {
        "image": "redis:7.4@sha256:71da9275c5f3fcb97d0fa0c8c5b36cc995327265420f17a04bfd544f458059f7"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "api",
      "source": {
        "image": "ghcr.io/novuhq/novu/api:3.19.0@sha256:5cd2a586888b48885cb9ad91fb3cd25a38e6f70bb99d38d48f4d475b57bf544a"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "novu",
      "source": {
        "image": "ghcr.io/novuhq/novu/dashboard:3.19.0@sha256:15a7773e01658f671e56fb9f0ddc8f043008bb0cfea2d6c5d1a0a60c722bf6e1"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "worker",
      "source": {
        "image": "ghcr.io/novuhq/novu/worker:3.19.0@sha256:2fa72651958986570f3929df0079908a6a4c65f945cf8fa69d973c707ce4ac81"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "S3_BUCKET",
      "service": "storage",
      "description": "Private bucket created on first startup; changing this does not move existing objects.",
      "secret": false,
      "strategy": "default",
      "default": "novu"
    },
    {
      "key": "MINIO_ROOT_USER",
      "service": "storage",
      "description": "Generated minio root user. Keep private and preserve with backups.",
      "secret": false,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "MINIO_ROOT_PASSWORD",
      "service": "storage",
      "description": "Generated minio root password. Keep private and preserve with backups.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "RAILWAY_DOCKERFILE_PATH",
      "service": "storage",
      "description": "Repository-relative Dockerfile used to build this service. Keep the supplied path.",
      "secret": false,
      "strategy": "default",
      "default": "shared/draft-storage/Dockerfile"
    },
    {
      "key": "PORT",
      "service": "ws",
      "description": "HTTP port inside this service. Keep the default to match its Railway public port and health check.",
      "secret": false,
      "strategy": "default",
      "default": "3002"
    },
    {
      "key": "NODE_ENV",
      "service": "ws",
      "description": "Node.js runtime mode. Keep production for hosted deployments.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "MONGO_URL",
      "service": "ws",
      "description": "Mongo url resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_REGION",
      "service": "ws",
      "description": "S3 region for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "us-east-1"
    },
    {
      "key": "JWT_SECRET",
      "service": "ws",
      "description": "Jwt secret resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_HOST",
      "service": "ws",
      "description": "Private Redis/Valkey hostname supplied by the redis service reference.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PORT",
      "service": "ws",
      "description": "Private Redis/Valkey port. Keep 6379.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "API_ROOT_URL",
      "service": "ws",
      "description": "Api root url resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "REDIS_DB_INDEX",
      "service": "ws",
      "description": "Redis db index for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "2"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "ws",
      "description": "Generated private Redis/Valkey password, or a reference to that password. Keep secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "ws",
      "description": "S3 bucket name for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "novu"
    },
    {
      "key": "S3_LOCAL_STACK",
      "service": "ws",
      "description": "S3 local stack resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "ws",
      "description": "Aws access key id resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEW_RELIC_ENABLED",
      "service": "ws",
      "description": "New relic enabled for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MONGO_MAX_POOL_SIZE",
      "service": "ws",
      "description": "Mongo max pool size for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MONGO_MIN_POOL_SIZE",
      "service": "ws",
      "description": "Mongo min pool size for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "ws",
      "description": "Aws secret access key resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_CACHE_SERVICE_HOST",
      "service": "ws",
      "description": "Redis cache service host resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_CACHE_SERVICE_PORT",
      "service": "ws",
      "description": "Redis cache service port for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME",
      "service": "ws",
      "description": "Subscriber widget jwt expiration time for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "15d"
    },
    {
      "key": "MONGO_INITDB_ROOT_PASSWORD",
      "service": "mongodb",
      "description": "Generated mongo initdb root password. Keep private and preserve with backups.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "MONGO_INITDB_ROOT_USERNAME",
      "service": "mongodb",
      "description": "Mongo initdb root username for mongodb. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "novu"
    },
    {
      "key": "REDIS_URL",
      "service": "redis",
      "description": "Private authenticated Redis/Valkey connection URL. Automatically assembled from service references.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "redis",
      "description": "Generated private Redis/Valkey password, or a reference to that password. Keep secret.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "api",
      "description": "HTTP port inside this service. Keep the default to match its Railway public port and health check.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "NODE_ENV",
      "service": "api",
      "description": "Node.js runtime mode. Keep production for hosted deployments.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "MONGO_URL",
      "service": "api",
      "description": "Mongo url resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_REGION",
      "service": "api",
      "description": "S3 region for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "us-east-1"
    },
    {
      "key": "JWT_SECRET",
      "service": "api",
      "description": "Generated jwt secret. Keep private and preserve with backups.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "REDIS_HOST",
      "service": "api",
      "description": "Private Redis/Valkey hostname supplied by the redis service reference.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PORT",
      "service": "api",
      "description": "Private Redis/Valkey port. Keep 6379.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "API_ROOT_URL",
      "service": "api",
      "description": "Api root url resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "IS_V2_ENABLED",
      "service": "api",
      "description": "Is v2 enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "FRONT_BASE_URL",
      "service": "api",
      "description": "Front base url resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "IS_SELF_HOSTED",
      "service": "api",
      "description": "Is self hosted for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "REDIS_DB_INDEX",
      "service": "api",
      "description": "Redis db index for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "2"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "api",
      "description": "Generated private Redis/Valkey password, or a reference to that password. Keep secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "api",
      "description": "S3 bucket name for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "novu"
    },
    {
      "key": "S3_LOCAL_STACK",
      "service": "api",
      "description": "S3 local stack resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "NOVU_SECRET_KEY",
      "service": "api",
      "description": "Generated novu secret key. Keep private and preserve with backups.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "api",
      "description": "Aws access key id resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEW_RELIC_ENABLED",
      "service": "api",
      "description": "New relic enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MONGO_MAX_POOL_SIZE",
      "service": "api",
      "description": "Mongo max pool size for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MONGO_MIN_POOL_SIZE",
      "service": "api",
      "description": "Mongo min pool size for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "STORE_ENCRYPTION_KEY",
      "service": "api",
      "description": "Exactly 32 generated characters for encrypting provider credentials; retain with MongoDB backups.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "api",
      "description": "Aws secret access key resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_CACHE_SERVICE_HOST",
      "service": "api",
      "description": "Redis cache service host resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_CACHE_SERVICE_PORT",
      "service": "api",
      "description": "Redis cache service port for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "MONGO_AUTO_CREATE_INDEXES",
      "service": "api",
      "description": "Mongo auto create indexes for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "IS_API_IDEMPOTENCY_ENABLED",
      "service": "api",
      "description": "Is api idempotency enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "IS_API_RATE_LIMITING_ENABLED",
      "service": "api",
      "description": "Is api rate limiting enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "IS_NEW_MESSAGES_API_RESPONSE_ENABLED",
      "service": "api",
      "description": "Is new messages api response enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME",
      "service": "api",
      "description": "Subscriber widget jwt expiration time for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "15d"
    },
    {
      "key": "PORT",
      "service": "novu",
      "description": "HTTP port inside this service. Keep the default to match its Railway public port and health check.",
      "secret": false,
      "strategy": "default",
      "default": "4000"
    },
    {
      "key": "VITE_API_HOSTNAME",
      "service": "novu",
      "description": "Vite api hostname resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "VITE_WEBSOCKET_HOSTNAME",
      "service": "novu",
      "description": "Vite websocket hostname resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PORT",
      "service": "worker",
      "description": "HTTP port inside this service. Keep the default to match its Railway public port and health check.",
      "secret": false,
      "strategy": "default",
      "default": "3004"
    },
    {
      "key": "NODE_ENV",
      "service": "worker",
      "description": "Node.js runtime mode. Keep production for hosted deployments.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "MONGO_URL",
      "service": "worker",
      "description": "Mongo url resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_REGION",
      "service": "worker",
      "description": "S3 region for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "us-east-1"
    },
    {
      "key": "REDIS_HOST",
      "service": "worker",
      "description": "Private Redis/Valkey hostname supplied by the redis service reference.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PORT",
      "service": "worker",
      "description": "Private Redis/Valkey port. Keep 6379.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "API_ROOT_URL",
      "service": "worker",
      "description": "Api root url resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "REDIS_DB_INDEX",
      "service": "worker",
      "description": "Redis db index for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "2"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "worker",
      "description": "Generated private Redis/Valkey password, or a reference to that password. Keep secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "worker",
      "description": "S3 bucket name for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "novu"
    },
    {
      "key": "S3_LOCAL_STACK",
      "service": "worker",
      "description": "S3 local stack resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "worker",
      "description": "Aws access key id resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEW_RELIC_ENABLED",
      "service": "worker",
      "description": "New relic enabled for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MONGO_MAX_POOL_SIZE",
      "service": "worker",
      "description": "Mongo max pool size for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MONGO_MIN_POOL_SIZE",
      "service": "worker",
      "description": "Mongo min pool size for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "STORE_ENCRYPTION_KEY",
      "service": "worker",
      "description": "Store encryption key resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "worker",
      "description": "Aws secret access key resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_CACHE_SERVICE_HOST",
      "service": "worker",
      "description": "Redis cache service host resolved automatically from the linked service. Keep this reference when using the included topology.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_CACHE_SERVICE_PORT",
      "service": "worker",
      "description": "Redis cache service port for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "BROADCAST_QUEUE_CHUNK_SIZE",
      "service": "worker",
      "description": "Broadcast queue chunk size for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "100"
    },
    {
      "key": "MULTICAST_QUEUE_CHUNK_SIZE",
      "service": "worker",
      "description": "Multicast queue chunk size for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "100"
    },
    {
      "key": "IS_EMAIL_INLINE_CSS_DISABLED",
      "service": "worker",
      "description": "Is email inline css disabled for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "IS_USE_MERGED_DIGEST_ID_ENABLED",
      "service": "worker",
      "description": "Is use merged digest id enabled for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME",
      "service": "worker",
      "description": "Subscriber widget jwt expiration time for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
      "secret": false,
      "strategy": "default",
      "default": "15d"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "novu-community-edition"
      }
    },
    "cli": "railway deploy --template novu-community-edition",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "5b26c62d-104c-4127-a571-af630e286afb",
            "serializedConfig": {
              "services": {
                "23143408-b171-5f61-a9a1-95d47e8b2fca": {
                  "name": "storage",
                  "build": {
                    "builder": "RAILPACK",
                    "dockerfilePath": "shared/draft-storage/Dockerfile"
                  },
                  "deploy": {
                    "requiredMountPath": "/data",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "orenaksakal/railway-templates",
                    "branch": "codex/remaining-template-drafts"
                  },
                  "variables": {
                    "S3_BUCKET": {
                      "isOptional": false,
                      "description": "Private bucket created on first startup; changing this does not move existing objects.",
                      "defaultValue": "novu"
                    },
                    "MINIO_ROOT_USER": {
                      "isOptional": false,
                      "description": "Generated minio root user. Keep private and preserve with backups.",
                      "defaultValue": "{{MINIO_ROOT_USER}}"
                    },
                    "MINIO_ROOT_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated minio root password. Keep private and preserve with backups.",
                      "defaultValue": "{{MINIO_ROOT_PASSWORD}}"
                    },
                    "RAILWAY_DOCKERFILE_PATH": {
                      "isOptional": false,
                      "description": "Repository-relative Dockerfile used to build this service. Keep the supplied path.",
                      "defaultValue": "shared/draft-storage/Dockerfile"
                    }
                  },
                  "networking": {
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "d2311c1b-a75d-5436-8bbb-3a030b29a229": {
                      "mountPath": "/data"
                    }
                  }
                },
                "52a3ff29-429d-5056-857b-07d9bf0306fd": {
                  "name": "ws",
                  "deploy": {
                    "healthcheckPath": "/v1/health-check",
                    "restartPolicyType": "ON_FAILURE",
                    "healthcheckTimeout": 600,
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/novuhq/novu/ws:3.19.0@sha256:00aa8b9f080da2af443269af672c00b7561556d7adb4b097b4e54c2127de61e5"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP port inside this service. Keep the default to match its Railway public port and health check.",
                      "defaultValue": "3002"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "Node.js runtime mode. Keep production for hosted deployments.",
                      "defaultValue": "production"
                    },
                    "MONGO_URL": {
                      "isOptional": false,
                      "description": "Mongo url resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "mongodb://novu:${{mongodb.MONGO_INITDB_ROOT_PASSWORD}}@${{mongodb.RAILWAY_PRIVATE_DOMAIN}}:27017/novu?authSource=admin"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "description": "S3 region for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "us-east-1"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Jwt secret resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{api.JWT_SECRET}}"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Private Redis/Valkey hostname supplied by the redis service reference.",
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Private Redis/Valkey port. Keep 6379.",
                      "defaultValue": "6379"
                    },
                    "API_ROOT_URL": {
                      "isOptional": false,
                      "description": "Api root url resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "https://${{api.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "REDIS_DB_INDEX": {
                      "isOptional": false,
                      "description": "Redis db index for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "2"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated private Redis/Valkey password, or a reference to that password. Keep secret.",
                      "defaultValue": "${{redis.REDIS_PASSWORD}}"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "description": "S3 bucket name for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "novu"
                    },
                    "S3_LOCAL_STACK": {
                      "isOptional": false,
                      "description": "S3 local stack resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "http://${{storage.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Aws access key id resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{storage.MINIO_ROOT_USER}}"
                    },
                    "NEW_RELIC_ENABLED": {
                      "isOptional": false,
                      "description": "New relic enabled for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "false"
                    },
                    "MONGO_MAX_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Mongo max pool size for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "10"
                    },
                    "MONGO_MIN_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Mongo min pool size for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "1"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Aws secret access key resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{storage.MINIO_ROOT_PASSWORD}}"
                    },
                    "REDIS_CACHE_SERVICE_HOST": {
                      "isOptional": false,
                      "description": "Redis cache service host resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_CACHE_SERVICE_PORT": {
                      "isOptional": false,
                      "description": "Redis cache service port for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "6379"
                    },
                    "SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME": {
                      "isOptional": false,
                      "description": "Subscriber widget jwt expiration time for ws. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "15d"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3002": {
                        "port": 3002
                      }
                    }
                  }
                },
                "85123620-4f39-5c90-b61d-c1f5ed783cd3": {
                  "name": "mongodb",
                  "deploy": {
                    "requiredMountPath": "/data/db",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "mongo:8.0.17@sha256:9814652e33f0cf8b9fddea8b46dfc9d8e19b130dcfdd7b510ca58bb0d40c8b71"
                  },
                  "variables": {
                    "MONGO_INITDB_ROOT_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated mongo initdb root password. Keep private and preserve with backups.",
                      "defaultValue": "{{MONGO_INITDB_ROOT_PASSWORD}}"
                    },
                    "MONGO_INITDB_ROOT_USERNAME": {
                      "isOptional": false,
                      "description": "Mongo initdb root username for mongodb. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "novu"
                    }
                  },
                  "networking": {
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "01b96374-d762-5d9d-a70f-469b7163c60e": {
                      "mountPath": "/data/db"
                    }
                  }
                },
                "8d6dffe0-8aff-51fb-ae7f-034971d46287": {
                  "name": "redis",
                  "deploy": {
                    "startCommand": "sh -c 'exec redis-server --bind 0.0.0.0 :: --appendonly yes --maxmemory-policy noeviction --requirepass \"$REDIS_PASSWORD\"'",
                    "requiredMountPath": "/data",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "redis:7.4@sha256:71da9275c5f3fcb97d0fa0c8c5b36cc995327265420f17a04bfd544f458059f7"
                  },
                  "variables": {
                    "REDIS_URL": {
                      "isOptional": false,
                      "description": "Private authenticated Redis/Valkey connection URL. Automatically assembled from service references.",
                      "defaultValue": "redis://:${{redis.REDIS_PASSWORD}}@${{redis.RAILWAY_PRIVATE_DOMAIN}}:6379"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated private Redis/Valkey password, or a reference to that password. Keep secret.",
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "623ea7a2-1826-5278-87cc-fb0123bbac1d": {
                      "mountPath": "/data"
                    }
                  }
                },
                "a9b88451-0653-5490-9e97-58359bbc5a5d": {
                  "name": "api",
                  "deploy": {
                    "healthcheckPath": "/v1/health-check",
                    "restartPolicyType": "ON_FAILURE",
                    "healthcheckTimeout": 600,
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/novuhq/novu/api:3.19.0@sha256:5cd2a586888b48885cb9ad91fb3cd25a38e6f70bb99d38d48f4d475b57bf544a"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP port inside this service. Keep the default to match its Railway public port and health check.",
                      "defaultValue": "3000"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "Node.js runtime mode. Keep production for hosted deployments.",
                      "defaultValue": "production"
                    },
                    "MONGO_URL": {
                      "isOptional": false,
                      "description": "Mongo url resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "mongodb://novu:${{mongodb.MONGO_INITDB_ROOT_PASSWORD}}@${{mongodb.RAILWAY_PRIVATE_DOMAIN}}:27017/novu?authSource=admin"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "description": "S3 region for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "us-east-1"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Generated jwt secret. Keep private and preserve with backups.",
                      "defaultValue": "{{JWT_SECRET}}"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Private Redis/Valkey hostname supplied by the redis service reference.",
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Private Redis/Valkey port. Keep 6379.",
                      "defaultValue": "6379"
                    },
                    "API_ROOT_URL": {
                      "isOptional": false,
                      "description": "Api root url resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "https://${{api.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "IS_V2_ENABLED": {
                      "isOptional": false,
                      "description": "Is v2 enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "true"
                    },
                    "FRONT_BASE_URL": {
                      "isOptional": false,
                      "description": "Front base url resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "https://${{novu.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "IS_SELF_HOSTED": {
                      "isOptional": false,
                      "description": "Is self hosted for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "true"
                    },
                    "REDIS_DB_INDEX": {
                      "isOptional": false,
                      "description": "Redis db index for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "2"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated private Redis/Valkey password, or a reference to that password. Keep secret.",
                      "defaultValue": "${{redis.REDIS_PASSWORD}}"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "description": "S3 bucket name for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "novu"
                    },
                    "S3_LOCAL_STACK": {
                      "isOptional": false,
                      "description": "S3 local stack resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "http://${{storage.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "NOVU_SECRET_KEY": {
                      "isOptional": false,
                      "description": "Generated novu secret key. Keep private and preserve with backups.",
                      "defaultValue": "{{NOVU_SECRET_KEY}}"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Aws access key id resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{storage.MINIO_ROOT_USER}}"
                    },
                    "NEW_RELIC_ENABLED": {
                      "isOptional": false,
                      "description": "New relic enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "false"
                    },
                    "MONGO_MAX_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Mongo max pool size for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "10"
                    },
                    "MONGO_MIN_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Mongo min pool size for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "1"
                    },
                    "STORE_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "description": "Exactly 32 generated characters for encrypting provider credentials; retain with MongoDB backups.",
                      "defaultValue": "{{STORE_ENCRYPTION_KEY}}"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Aws secret access key resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{storage.MINIO_ROOT_PASSWORD}}"
                    },
                    "REDIS_CACHE_SERVICE_HOST": {
                      "isOptional": false,
                      "description": "Redis cache service host resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_CACHE_SERVICE_PORT": {
                      "isOptional": false,
                      "description": "Redis cache service port for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "6379"
                    },
                    "MONGO_AUTO_CREATE_INDEXES": {
                      "isOptional": false,
                      "description": "Mongo auto create indexes for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "true"
                    },
                    "IS_API_IDEMPOTENCY_ENABLED": {
                      "isOptional": false,
                      "description": "Is api idempotency enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "false"
                    },
                    "IS_API_RATE_LIMITING_ENABLED": {
                      "isOptional": false,
                      "description": "Is api rate limiting enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "false"
                    },
                    "IS_NEW_MESSAGES_API_RESPONSE_ENABLED": {
                      "isOptional": false,
                      "description": "Is new messages api response enabled for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "true"
                    },
                    "SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME": {
                      "isOptional": false,
                      "description": "Subscriber widget jwt expiration time for api. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "15d"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3000": {
                        "port": 3000
                      }
                    }
                  }
                },
                "ee4034de-4eae-5591-afcb-141687d90978": {
                  "name": "novu",
                  "deploy": {
                    "healthcheckPath": "/",
                    "restartPolicyType": "ON_FAILURE",
                    "healthcheckTimeout": 600,
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/novuhq/novu/dashboard:3.19.0@sha256:15a7773e01658f671e56fb9f0ddc8f043008bb0cfea2d6c5d1a0a60c722bf6e1"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP port inside this service. Keep the default to match its Railway public port and health check.",
                      "defaultValue": "4000"
                    },
                    "VITE_API_HOSTNAME": {
                      "isOptional": false,
                      "description": "Vite api hostname resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "https://${{api.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "VITE_WEBSOCKET_HOSTNAME": {
                      "isOptional": false,
                      "description": "Vite websocket hostname resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "https://${{ws.RAILWAY_PUBLIC_DOMAIN}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:4000": {
                        "port": 4000
                      }
                    }
                  }
                },
                "fcc6db21-4d62-5fcd-a4fe-e6441900ee8f": {
                  "name": "worker",
                  "deploy": {
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/novuhq/novu/worker:3.19.0@sha256:2fa72651958986570f3929df0079908a6a4c65f945cf8fa69d973c707ce4ac81"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP port inside this service. Keep the default to match its Railway public port and health check.",
                      "defaultValue": "3004"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "Node.js runtime mode. Keep production for hosted deployments.",
                      "defaultValue": "production"
                    },
                    "MONGO_URL": {
                      "isOptional": false,
                      "description": "Mongo url resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "mongodb://novu:${{mongodb.MONGO_INITDB_ROOT_PASSWORD}}@${{mongodb.RAILWAY_PRIVATE_DOMAIN}}:27017/novu?authSource=admin"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "description": "S3 region for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "us-east-1"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Private Redis/Valkey hostname supplied by the redis service reference.",
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Private Redis/Valkey port. Keep 6379.",
                      "defaultValue": "6379"
                    },
                    "API_ROOT_URL": {
                      "isOptional": false,
                      "description": "Api root url resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "https://${{api.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "REDIS_DB_INDEX": {
                      "isOptional": false,
                      "description": "Redis db index for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "2"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Generated private Redis/Valkey password, or a reference to that password. Keep secret.",
                      "defaultValue": "${{redis.REDIS_PASSWORD}}"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "description": "S3 bucket name for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "novu"
                    },
                    "S3_LOCAL_STACK": {
                      "isOptional": false,
                      "description": "S3 local stack resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "http://${{storage.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Aws access key id resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{storage.MINIO_ROOT_USER}}"
                    },
                    "NEW_RELIC_ENABLED": {
                      "isOptional": false,
                      "description": "New relic enabled for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "false"
                    },
                    "MONGO_MAX_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Mongo max pool size for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "10"
                    },
                    "MONGO_MIN_POOL_SIZE": {
                      "isOptional": false,
                      "description": "Mongo min pool size for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "1"
                    },
                    "STORE_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "description": "Store encryption key resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{api.STORE_ENCRYPTION_KEY}}"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Aws secret access key resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{storage.MINIO_ROOT_PASSWORD}}"
                    },
                    "REDIS_CACHE_SERVICE_HOST": {
                      "isOptional": false,
                      "description": "Redis cache service host resolved automatically from the linked service. Keep this reference when using the included topology.",
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_CACHE_SERVICE_PORT": {
                      "isOptional": false,
                      "description": "Redis cache service port for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "6379"
                    },
                    "BROADCAST_QUEUE_CHUNK_SIZE": {
                      "isOptional": false,
                      "description": "Broadcast queue chunk size for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "100"
                    },
                    "MULTICAST_QUEUE_CHUNK_SIZE": {
                      "isOptional": false,
                      "description": "Multicast queue chunk size for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "100"
                    },
                    "IS_EMAIL_INLINE_CSS_DISABLED": {
                      "isOptional": false,
                      "description": "Is email inline css disabled for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "false"
                    },
                    "IS_USE_MERGED_DIGEST_ID_ENABLED": {
                      "isOptional": false,
                      "description": "Is use merged digest id enabled for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "false"
                    },
                    "SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME": {
                      "isOptional": false,
                      "description": "Subscriber widget jwt expiration time for worker. The supplied value follows the pinned upstream deployment; change only with its configuration guide.",
                      "defaultValue": "15d"
                    }
                  },
                  "networking": {
                    "serviceDomains": {}
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "ws",
      "method": "GET",
      "path": "/v1/health-check",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 7,
    "needs_volume": true
  },
  "generated_at": "2026-09-08T05:54:19.399Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-08T05:57:39.541Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_d875e692eeac4f7cabdf",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "healthcheck",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 143,
    "typical_build_seconds": 0,
    "typical_start_seconds": 20,
    "slowest_service": "worker"
  }
}
