{
  "manifest_version": "1.0.0",
  "template": {
    "id": "f16a3fdb-ea10-403f-b335-39ff1bc64ed4",
    "slug": "novu-self-hosted-knock-and-courier-alter",
    "name": "Novu (Self-Hosted Knock & Courier Alternative)",
    "description": "Self-hosted Knock & Courier alternative [Updated Aug '26]",
    "url": "https://railway.com/deploy/novu-self-hosted-knock-and-courier-alter",
    "upstream": {
      "image": "ghcr.io/novuhq/novu/api:3.18.0"
    }
  },
  "services": [
    {
      "name": "api",
      "source": {
        "image": "ghcr.io/novuhq/novu/api:3.18.0"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "redis",
      "source": {
        "image": "redis:alpine"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "dashboard",
      "source": {
        "image": "ghcr.io/novuhq/novu/dashboard:3.18.0"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "ws",
      "source": {
        "image": "ghcr.io/novuhq/novu/ws:3.18.0"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "worker",
      "source": {
        "image": "ghcr.io/novuhq/novu/worker:3.18.0"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "mongodb",
      "source": {
        "image": "mongo:8.0.17"
      },
      "needs_volume": true,
      "volume_mount_path": "/data/db",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "api",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "NODE_ENV",
      "service": "api",
      "description": "Provide a value for NODE_ENV.",
      "secret": false,
      "strategy": "default",
      "default": "local"
    },
    {
      "key": "MONGO_URL",
      "service": "api",
      "description": "Provide a value for MONGO_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_REGION",
      "service": "api",
      "description": "Provide a value for S3_REGION.",
      "secret": false,
      "strategy": "default",
      "default": "us-east-1"
    },
    {
      "key": "JWT_SECRET",
      "service": "api",
      "description": "Provide a value for JWT_SECRET.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "REDIS_HOST",
      "service": "api",
      "description": "Provide a value for REDIS_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PORT",
      "service": "api",
      "description": "Provide a value for REDIS_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "API_ROOT_URL",
      "service": "api",
      "description": "Provide a value for API_ROOT_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "IS_V2_ENABLED",
      "service": "api",
      "description": "Provide a value for IS_V2_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "FRONT_BASE_URL",
      "service": "api",
      "description": "Provide a value for FRONT_BASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "IS_SELF_HOSTED",
      "service": "api",
      "description": "Provide a value for IS_SELF_HOSTED.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "api",
      "description": "Provide a value for S3_BUCKET_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "novu"
    },
    {
      "key": "NOVU_SECRET_KEY",
      "service": "api",
      "description": "Provide a value for NOVU_SECRET_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "api",
      "description": "Provide a value for AWS_ACCESS_KEY_ID.",
      "secret": true,
      "strategy": "default",
      "default": "test"
    },
    {
      "key": "NEW_RELIC_ENABLED",
      "service": "api",
      "description": "Provide a value for NEW_RELIC_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MONGO_MAX_POOL_SIZE",
      "service": "api",
      "description": "Provide a value for MONGO_MAX_POOL_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MONGO_MIN_POOL_SIZE",
      "service": "api",
      "description": "Provide a value for MONGO_MIN_POOL_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "STORE_ENCRYPTION_KEY",
      "service": "api",
      "description": "Provide a value for STORE_ENCRYPTION_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "api",
      "description": "Provide a value for AWS_SECRET_ACCESS_KEY.",
      "secret": true,
      "strategy": "default",
      "default": "test"
    },
    {
      "key": "REDIS_CACHE_SERVICE_HOST",
      "service": "api",
      "description": "Provide a value for REDIS_CACHE_SERVICE_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_CACHE_SERVICE_PORT",
      "service": "api",
      "description": "Provide a value for REDIS_CACHE_SERVICE_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "MONGO_AUTO_CREATE_INDEXES",
      "service": "api",
      "description": "Provide a value for MONGO_AUTO_CREATE_INDEXES.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "IS_API_IDEMPOTENCY_ENABLED",
      "service": "api",
      "description": "Provide a value for IS_API_IDEMPOTENCY_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "IS_API_RATE_LIMITING_ENABLED",
      "service": "api",
      "description": "Provide a value for IS_API_RATE_LIMITING_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "IS_NEW_MESSAGES_API_RESPONSE_ENABLED",
      "service": "api",
      "description": "Provide a value for IS_NEW_MESSAGES_API_RESPONSE_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME",
      "service": "api",
      "description": "Provide a value for SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME.",
      "secret": false,
      "strategy": "default",
      "default": "15d"
    },
    {
      "key": "PORT",
      "service": "dashboard",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "4000"
    },
    {
      "key": "VITE_API_HOSTNAME",
      "service": "dashboard",
      "description": "Provide a value for VITE_API_HOSTNAME.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "VITE_WEBSOCKET_HOSTNAME",
      "service": "dashboard",
      "description": "Provide a value for VITE_WEBSOCKET_HOSTNAME.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PORT",
      "service": "ws",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "3002"
    },
    {
      "key": "NODE_ENV",
      "service": "ws",
      "description": "Provide a value for NODE_ENV.",
      "secret": false,
      "strategy": "default",
      "default": "local"
    },
    {
      "key": "MONGO_URL",
      "service": "ws",
      "description": "Provide a value for MONGO_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "JWT_SECRET",
      "service": "ws",
      "description": "Provide a value for JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_HOST",
      "service": "ws",
      "description": "Provide a value for REDIS_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PORT",
      "service": "ws",
      "description": "Provide a value for REDIS_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "NEW_RELIC_ENABLED",
      "service": "ws",
      "description": "Provide a value for NEW_RELIC_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MONGO_MAX_POOL_SIZE",
      "service": "ws",
      "description": "Provide a value for MONGO_MAX_POOL_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MONGO_MIN_POOL_SIZE",
      "service": "ws",
      "description": "Provide a value for MONGO_MIN_POOL_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "REDIS_CACHE_SERVICE_HOST",
      "service": "ws",
      "description": "Provide a value for REDIS_CACHE_SERVICE_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_CACHE_SERVICE_PORT",
      "service": "ws",
      "description": "Provide a value for REDIS_CACHE_SERVICE_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "MONGO_AUTO_CREATE_INDEXES",
      "service": "ws",
      "description": "Provide a value for MONGO_AUTO_CREATE_INDEXES.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PORT",
      "service": "worker",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "3004"
    },
    {
      "key": "NODE_ENV",
      "service": "worker",
      "description": "Provide a value for NODE_ENV.",
      "secret": false,
      "strategy": "default",
      "default": "local"
    },
    {
      "key": "MONGO_URL",
      "service": "worker",
      "description": "Provide a value for MONGO_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_REGION",
      "service": "worker",
      "description": "Provide a value for S3_REGION.",
      "secret": false,
      "strategy": "default",
      "default": "us-east-1"
    },
    {
      "key": "REDIS_HOST",
      "service": "worker",
      "description": "Provide a value for REDIS_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PORT",
      "service": "worker",
      "description": "Provide a value for REDIS_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "API_ROOT_URL",
      "service": "worker",
      "description": "Provide a value for API_ROOT_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "S3_BUCKET_NAME",
      "service": "worker",
      "description": "Provide a value for S3_BUCKET_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "novu"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "worker",
      "description": "Provide a value for AWS_ACCESS_KEY_ID.",
      "secret": true,
      "strategy": "default",
      "default": "test"
    },
    {
      "key": "NEW_RELIC_ENABLED",
      "service": "worker",
      "description": "Provide a value for NEW_RELIC_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MONGO_MAX_POOL_SIZE",
      "service": "worker",
      "description": "Provide a value for MONGO_MAX_POOL_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "MONGO_MIN_POOL_SIZE",
      "service": "worker",
      "description": "Provide a value for MONGO_MIN_POOL_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "5"
    },
    {
      "key": "STORE_ENCRYPTION_KEY",
      "service": "worker",
      "description": "Provide a value for STORE_ENCRYPTION_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "worker",
      "description": "Provide a value for AWS_SECRET_ACCESS_KEY.",
      "secret": true,
      "strategy": "default",
      "default": "test"
    },
    {
      "key": "REDIS_CACHE_SERVICE_HOST",
      "service": "worker",
      "description": "Provide a value for REDIS_CACHE_SERVICE_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_CACHE_SERVICE_PORT",
      "service": "worker",
      "description": "Provide a value for REDIS_CACHE_SERVICE_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "MONGO_AUTO_CREATE_INDEXES",
      "service": "worker",
      "description": "Provide a value for MONGO_AUTO_CREATE_INDEXES.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "BROADCAST_QUEUE_CHUNK_SIZE",
      "service": "worker",
      "description": "Provide a value for BROADCAST_QUEUE_CHUNK_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "100"
    },
    {
      "key": "MULTICAST_QUEUE_CHUNK_SIZE",
      "service": "worker",
      "description": "Provide a value for MULTICAST_QUEUE_CHUNK_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "100"
    },
    {
      "key": "MONGO_INITDB_ROOT_PASSWORD",
      "service": "mongodb",
      "description": "Provide a value for MONGO_INITDB_ROOT_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "MONGO_INITDB_ROOT_USERNAME",
      "service": "mongodb",
      "description": "Provide a value for MONGO_INITDB_ROOT_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "novu"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "novu-self-hosted-knock-and-courier-alter"
      }
    },
    "cli": "railway deploy --template novu-self-hosted-knock-and-courier-alter",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "f16a3fdb-ea10-403f-b335-39ff1bc64ed4",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "1e188063-0fb7-42e5-95ad-7eedbcd9f335": {
                  "icon": null,
                  "name": "api",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/novuhq/novu/api:3.18.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "3000"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "defaultValue": "local"
                    },
                    "MONGO_URL": {
                      "isOptional": false,
                      "defaultValue": "mongodb://novu:${{mongodb.MONGO_INITDB_ROOT_PASSWORD}}@${{mongodb.RAILWAY_PRIVATE_DOMAIN}}:27017/novu-db?authSource=admin"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "defaultValue": "us-east-1"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "{{JWT_SECRET}}"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "defaultValue": "6379"
                    },
                    "API_ROOT_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{api.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "IS_V2_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "FRONT_BASE_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{dashboard.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "IS_SELF_HOSTED": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "defaultValue": "novu"
                    },
                    "NOVU_SECRET_KEY": {
                      "isOptional": false,
                      "defaultValue": "{{NOVU_SECRET_KEY}}"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "defaultValue": "test"
                    },
                    "NEW_RELIC_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "MONGO_MAX_POOL_SIZE": {
                      "isOptional": false,
                      "defaultValue": "10"
                    },
                    "MONGO_MIN_POOL_SIZE": {
                      "isOptional": false,
                      "defaultValue": "5"
                    },
                    "STORE_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "defaultValue": "{{STORE_ENCRYPTION_KEY}}"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "defaultValue": "test"
                    },
                    "REDIS_CACHE_SERVICE_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_CACHE_SERVICE_PORT": {
                      "isOptional": false,
                      "defaultValue": "6379"
                    },
                    "MONGO_AUTO_CREATE_INDEXES": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "IS_API_IDEMPOTENCY_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "IS_API_RATE_LIMITING_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "IS_NEW_MESSAGES_API_RESPONSE_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "SUBSCRIBER_WIDGET_JWT_EXPIRATION_TIME": {
                      "isOptional": false,
                      "defaultValue": "15d"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3000": {
                        "port": 3000
                      }
                    }
                  }
                },
                "429bc1c0-bc26-499d-bfb1-64cc81b9d0ad": {
                  "icon": null,
                  "name": "redis",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "redis:alpine"
                  },
                  "variables": {}
                },
                "75a9f00c-2c9d-4989-8bff-7afed0feacc0": {
                  "icon": null,
                  "name": "dashboard",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/novuhq/novu/dashboard:3.18.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "4000"
                    },
                    "VITE_API_HOSTNAME": {
                      "isOptional": false,
                      "defaultValue": "https://${{api.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "VITE_WEBSOCKET_HOSTNAME": {
                      "isOptional": false,
                      "defaultValue": "https://${{ws.RAILWAY_PUBLIC_DOMAIN}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:4000": {
                        "port": 4000
                      }
                    }
                  }
                },
                "7f1d9249-781a-4172-9678-51019b95e8da": {
                  "icon": null,
                  "name": "ws",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/novuhq/novu/ws:3.18.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "3002"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "defaultValue": "local"
                    },
                    "MONGO_URL": {
                      "isOptional": false,
                      "defaultValue": "mongodb://novu:${{mongodb.MONGO_INITDB_ROOT_PASSWORD}}@${{mongodb.RAILWAY_PRIVATE_DOMAIN}}:27017/novu-db?authSource=admin"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{api.JWT_SECRET}}"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "defaultValue": "6379"
                    },
                    "NEW_RELIC_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "MONGO_MAX_POOL_SIZE": {
                      "isOptional": false,
                      "defaultValue": "10"
                    },
                    "MONGO_MIN_POOL_SIZE": {
                      "isOptional": false,
                      "defaultValue": "5"
                    },
                    "REDIS_CACHE_SERVICE_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_CACHE_SERVICE_PORT": {
                      "isOptional": false,
                      "defaultValue": "6379"
                    },
                    "MONGO_AUTO_CREATE_INDEXES": {
                      "isOptional": false,
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3002": {
                        "port": 3002
                      }
                    }
                  }
                },
                "958019cd-6c67-47a6-a139-4fe0c15dfc9d": {
                  "icon": null,
                  "name": "worker",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/novuhq/novu/worker:3.18.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "3004"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "defaultValue": "local"
                    },
                    "MONGO_URL": {
                      "isOptional": false,
                      "defaultValue": "mongodb://novu:${{mongodb.MONGO_INITDB_ROOT_PASSWORD}}@${{mongodb.RAILWAY_PRIVATE_DOMAIN}}:27017/novu-db?authSource=admin"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "defaultValue": "us-east-1"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "defaultValue": "6379"
                    },
                    "API_ROOT_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{api.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "S3_BUCKET_NAME": {
                      "isOptional": false,
                      "defaultValue": "novu"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "defaultValue": "test"
                    },
                    "NEW_RELIC_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "MONGO_MAX_POOL_SIZE": {
                      "isOptional": false,
                      "defaultValue": "10"
                    },
                    "MONGO_MIN_POOL_SIZE": {
                      "isOptional": false,
                      "defaultValue": "5"
                    },
                    "STORE_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{api.STORE_ENCRYPTION_KEY}}"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "defaultValue": "test"
                    },
                    "REDIS_CACHE_SERVICE_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_CACHE_SERVICE_PORT": {
                      "isOptional": false,
                      "defaultValue": "6379"
                    },
                    "MONGO_AUTO_CREATE_INDEXES": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "BROADCAST_QUEUE_CHUNK_SIZE": {
                      "isOptional": false,
                      "defaultValue": "100"
                    },
                    "MULTICAST_QUEUE_CHUNK_SIZE": {
                      "isOptional": false,
                      "defaultValue": "100"
                    }
                  }
                },
                "eb7f7489-ae01-4af1-a588-9502b2a3f2fb": {
                  "icon": null,
                  "name": "mongodb",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "mongo:8.0.17"
                  },
                  "variables": {
                    "MONGO_INITDB_ROOT_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{MONGO_INITDB_ROOT_PASSWORD}}"
                    },
                    "MONGO_INITDB_ROOT_USERNAME": {
                      "isOptional": false,
                      "defaultValue": "novu"
                    }
                  },
                  "volumeMounts": {
                    "eb7f7489-ae01-4af1-a588-9502b2a3f2fb": {
                      "mountPath": "/data/db"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 6,
    "needs_volume": true
  },
  "generated_at": "2026-09-09T18:02:45.738Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-04T06:28:13.623Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_bd7544334fc44eaea8df",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 168,
    "typical_build_seconds": 0,
    "typical_start_seconds": 50,
    "slowest_service": "worker"
  }
}
