{
  "manifest_version": "1.0.0",
  "template": {
    "id": "d985b667-31c9-4385-9a07-a4be3639bbf6",
    "slug": "peerdb-or-just-updated-postgres-to-click",
    "name": "PeerDB | (Just Updated) Postgres To ClickHouse CDC, Login On From Boot",
    "description": "PeerDB Postgres to ClickHouse CDC. Login on from boot, catalog kept",
    "url": "https://railway.com/deploy/peerdb-or-just-updated-postgres-to-click",
    "upstream": {
      "image": "ghcr.io/brody192/railway-caddy-basic-auth:main"
    }
  },
  "services": [
    {
      "name": "temporal",
      "source": {
        "image": "temporalio/auto-setup:1.29.7"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "flow-api",
      "source": {
        "image": "ghcr.io/peerdb-io/flow-api:stable-v0.35.5"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "flow-snapshot-worker",
      "source": {
        "image": "ghcr.io/peerdb-io/flow-snapshot-worker:stable-v0.35.5"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "minio",
      "source": {
        "image": "pgsty/silo:RELEASE.2026-09-16T00-00-00Z"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "peerdb",
      "source": {
        "image": "ghcr.io/brody192/railway-caddy-basic-auth:main"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "catalog",
      "source": {
        "image": "postgres:18.4-alpine"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql",
      "http": false
    },
    {
      "name": "peerdb-ui",
      "source": {
        "image": "ghcr.io/peerdb-io/peerdb-ui:stable-v0.35.5"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "flow-worker",
      "source": {
        "image": "ghcr.io/peerdb-io/flow-worker:stable-v0.35.5"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "peerdb-server",
      "source": {
        "image": "ghcr.io/peerdb-io/peerdb-server:stable-v0.35.5"
      },
      "needs_volume": false,
      "tcp_ports": [
        9900
      ],
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "POSTGRES_PWD",
      "service": "temporal",
      "description": "Provide a value for POSTGRES_PWD.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_SEEDS",
      "service": "temporal",
      "description": "Provide a value for POSTGRES_SEEDS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "TEMPORAL_HOST_PORT",
      "service": "flow-api",
      "description": "Provide a value for TEMPORAL_HOST_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CATALOG_HOST",
      "service": "flow-api",
      "description": "Provide a value for PEERDB_CATALOG_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CATALOG_PASSWORD",
      "service": "flow-api",
      "description": "Provide a value for PEERDB_CATALOG_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID",
      "service": "flow-api",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3",
      "service": "flow-api",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY",
      "service": "flow-api",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TEMPORAL_HOST_PORT",
      "service": "flow-snapshot-worker",
      "description": "Provide a value for TEMPORAL_HOST_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CATALOG_HOST",
      "service": "flow-snapshot-worker",
      "description": "Provide a value for PEERDB_CATALOG_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CATALOG_PASSWORD",
      "service": "flow-snapshot-worker",
      "description": "Provide a value for PEERDB_CATALOG_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID",
      "service": "flow-snapshot-worker",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3",
      "service": "flow-snapshot-worker",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY",
      "service": "flow-snapshot-worker",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_ROOT_USER",
      "service": "minio",
      "description": "Provide a value for MINIO_ROOT_USER.",
      "secret": false,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "MINIO_ROOT_PASSWORD",
      "service": "minio",
      "description": "Provide a value for MINIO_ROOT_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PASSWORD",
      "service": "peerdb",
      "description": "Provide a value for PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "USERNAME",
      "service": "peerdb",
      "description": "Provide a value for USERNAME.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PROXY_PASS",
      "service": "peerdb",
      "description": "Provide a value for PROXY_PASS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "catalog",
      "description": "Provide a value for POSTGRES_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "NEXTAUTH_SECRET",
      "service": "peerdb-ui",
      "description": "Provide a value for NEXTAUTH_SECRET.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "PEERDB_CATALOG_HOST",
      "service": "peerdb-ui",
      "description": "Provide a value for PEERDB_CATALOG_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CATALOG_PASSWORD",
      "service": "peerdb-ui",
      "description": "Provide a value for PEERDB_CATALOG_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_FLOW_SERVER_HTTP",
      "service": "peerdb-ui",
      "description": "Provide a value for PEERDB_FLOW_SERVER_HTTP.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "TEMPORAL_HOST_PORT",
      "service": "flow-worker",
      "description": "Provide a value for TEMPORAL_HOST_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CATALOG_HOST",
      "service": "flow-worker",
      "description": "Provide a value for PEERDB_CATALOG_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CATALOG_PASSWORD",
      "service": "flow-worker",
      "description": "Provide a value for PEERDB_CATALOG_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID",
      "service": "flow-worker",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3",
      "service": "flow-worker",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY",
      "service": "flow-worker",
      "description": "Provide a value for PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_CONNECT",
      "service": "peerdb-server",
      "description": "Provide a value for PEERDB_CONNECT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_PASSWORD",
      "service": "peerdb-server",
      "description": "Provide a value for PEERDB_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PEERDB_CATALOG_HOST",
      "service": "peerdb-server",
      "description": "Provide a value for PEERDB_CATALOG_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PEERDB_CATALOG_PASSWORD",
      "service": "peerdb-server",
      "description": "Provide a value for PEERDB_CATALOG_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PEERDB_FLOW_SERVER_ADDRESS",
      "service": "peerdb-server",
      "description": "Provide a value for PEERDB_FLOW_SERVER_ADDRESS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "peerdb-or-just-updated-postgres-to-click"
      }
    },
    "cli": "railway deploy --template peerdb-or-just-updated-postgres-to-click",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "d985b667-31c9-4385-9a07-a4be3639bbf6",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "0a35b57d-da60-4287-9b78-9cbcca27721f": {
                  "icon": null,
                  "name": "temporal",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'export DB=postgres12 DB_PORT=5432 POSTGRES_USER=postgres DBNAME=temporal VISIBILITY_DBNAME=temporal_visibility ENABLE_ES=false DEFAULT_NAMESPACE=default DEFAULT_NAMESPACE_RETENTION=72h DYNAMIC_CONFIG_FILE_PATH=config/peerdb-dynamic.yaml PORT=7233 BIND_ON_IP=:: TEMPORAL_BROADCAST_ADDRESS=127.0.0.1 TEMPORAL_ADDRESS=127.0.0.1:7233; printf \"limit.maxIDLength:\\n  - value: 255\\n    constraints: {}\\nfrontend.enableUpdateWorkflowExecution:\\n  - value: true\\n    constraints: {}\\n\" > /etc/temporal/config/peerdb-dynamic.yaml; ( until temporal operator search-attribute list --namespace default 2>/dev/null | grep -qw MirrorName || temporal operator search-attribute create --namespace default --name MirrorName --type Text >/dev/null 2>&1; do sleep 5; done; echo \"[railway] MirrorName search attribute present\" ) & exec /etc/temporal/entrypoint.sh autosetup'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "temporalio/auto-setup:1.29.7"
                  },
                  "variables": {
                    "POSTGRES_PWD": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_SEEDS": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.RAILWAY_PRIVATE_DOMAIN}}"
                    }
                  }
                },
                "3f37709b-7a7b-4a7c-b8b3-88a57844cd95": {
                  "icon": null,
                  "name": "flow-api",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'export PEERDB_CATALOG_PORT=5432 PEERDB_CATALOG_USER=postgres PEERDB_CATALOG_DATABASE=postgres; export PEERDB_TEMPORAL_NAMESPACE=default PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_REGION=us-east-1 PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME=peerdbbucket; until nc -z \"${TEMPORAL_HOST_PORT%:*}\" \"${TEMPORAL_HOST_PORT##*:}\"; do echo \"[railway] waiting for temporal\"; sleep 3; done; exec ./peer-flow api --port 8112 --gateway-port 8113'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/peerdb-io/flow-api:stable-v0.35.5"
                  },
                  "variables": {
                    "TEMPORAL_HOST_PORT": {
                      "isOptional": false,
                      "defaultValue": "${{temporal.RAILWAY_PRIVATE_DOMAIN}}:7233"
                    },
                    "PEERDB_CATALOG_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PEERDB_CATALOG_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.POSTGRES_PASSWORD}}"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "defaultValue": "${{minio.MINIO_ROOT_USER}}"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3": {
                      "isOptional": false,
                      "defaultValue": "http://${{minio.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    }
                  }
                },
                "489e22f2-2a2e-4a31-b9a5-3ce7e38539c3": {
                  "icon": null,
                  "name": "flow-snapshot-worker",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'export PEERDB_CATALOG_PORT=5432 PEERDB_CATALOG_USER=postgres PEERDB_CATALOG_DATABASE=postgres; export PEERDB_TEMPORAL_NAMESPACE=default PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_REGION=us-east-1 PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME=peerdbbucket; until nc -z \"${TEMPORAL_HOST_PORT%:*}\" \"${TEMPORAL_HOST_PORT##*:}\"; do echo \"[railway] waiting for temporal\"; sleep 3; done; exec ./peer-flow snapshot-worker'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/peerdb-io/flow-snapshot-worker:stable-v0.35.5"
                  },
                  "variables": {
                    "TEMPORAL_HOST_PORT": {
                      "isOptional": false,
                      "defaultValue": "${{temporal.RAILWAY_PRIVATE_DOMAIN}}:7233"
                    },
                    "PEERDB_CATALOG_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PEERDB_CATALOG_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.POSTGRES_PASSWORD}}"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "defaultValue": "${{minio.MINIO_ROOT_USER}}"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3": {
                      "isOptional": false,
                      "defaultValue": "http://${{minio.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    }
                  }
                },
                "670c07bf-8f09-48a5-8e53-a05671ba8e23": {
                  "icon": null,
                  "name": "minio",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'mkdir -p /data/peerdbbucket; exec silo server /data --address :9000 --console-address :9001'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "pgsty/silo:RELEASE.2026-09-16T00-00-00Z"
                  },
                  "variables": {
                    "MINIO_ROOT_USER": {
                      "isOptional": false,
                      "defaultValue": "{{MINIO_ROOT_USER}}"
                    },
                    "MINIO_ROOT_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{MINIO_ROOT_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "670c07bf-8f09-48a5-8e53-a05671ba8e23": {
                      "mountPath": "/data"
                    }
                  }
                },
                "78c331da-a0c4-4b31-9bb0-41471d59decb": {
                  "icon": null,
                  "name": "peerdb",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/brody192/railway-caddy-basic-auth:main"
                  },
                  "variables": {
                    "PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{PASSWORD}}"
                    },
                    "USERNAME": {
                      "isOptional": false,
                      "defaultValue": "${{RAILWAY_SERVICE_NAME}}"
                    },
                    "PROXY_PASS": {
                      "isOptional": false,
                      "defaultValue": "http://${{peerdb-ui.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                },
                "899c0e20-6caa-4059-9489-6a31336d363d": {
                  "icon": null,
                  "name": "catalog",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'export POSTGRES_USER=postgres POSTGRES_DB=postgres; exec docker-entrypoint.sh postgres -c wal_level=logical -c max_wal_senders=4 -c max_replication_slots=4'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "postgres:18.4-alpine"
                  },
                  "variables": {
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "899c0e20-6caa-4059-9489-6a31336d363d": {
                      "mountPath": "/var/lib/postgresql"
                    }
                  }
                },
                "a5e77e1a-170e-4de7-b15b-d41ce38c3443": {
                  "icon": null,
                  "name": "peerdb-ui",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'export PEERDB_CATALOG_PORT=5432 PEERDB_CATALOG_USER=postgres PEERDB_CATALOG_DATABASE=postgres; export PORT=3000 HOSTNAME=:: PEERDB_EXPERIMENTAL_ENABLE_SCRIPTING=true; export DATABASE_URL=\"postgres://postgres:${PEERDB_CATALOG_PASSWORD}@${PEERDB_CATALOG_HOST}:5432/postgres\"; exec /app/entrypoint.sh node server.js'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/peerdb-io/peerdb-ui:stable-v0.35.5"
                  },
                  "variables": {
                    "NEXTAUTH_SECRET": {
                      "isOptional": false,
                      "defaultValue": "{{NEXTAUTH_SECRET}}"
                    },
                    "PEERDB_CATALOG_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PEERDB_CATALOG_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.POSTGRES_PASSWORD}}"
                    },
                    "PEERDB_FLOW_SERVER_HTTP": {
                      "isOptional": false,
                      "defaultValue": "http://${{flow-api.RAILWAY_PRIVATE_DOMAIN}}:8113"
                    }
                  }
                },
                "ccc4f08c-028d-408b-8c7e-1a7468f8ae98": {
                  "icon": null,
                  "name": "flow-worker",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'export PEERDB_CATALOG_PORT=5432 PEERDB_CATALOG_USER=postgres PEERDB_CATALOG_DATABASE=postgres; export PEERDB_TEMPORAL_NAMESPACE=default PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_REGION=us-east-1 PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME=peerdbbucket; until nc -z \"${TEMPORAL_HOST_PORT%:*}\" \"${TEMPORAL_HOST_PORT##*:}\"; do echo \"[railway] waiting for temporal\"; sleep 3; done; exec ./peer-flow worker'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/peerdb-io/flow-worker:stable-v0.35.5"
                  },
                  "variables": {
                    "TEMPORAL_HOST_PORT": {
                      "isOptional": false,
                      "defaultValue": "${{temporal.RAILWAY_PRIVATE_DOMAIN}}:7233"
                    },
                    "PEERDB_CATALOG_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PEERDB_CATALOG_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.POSTGRES_PASSWORD}}"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "defaultValue": "${{minio.MINIO_ROOT_USER}}"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_ENDPOINT_URL_S3": {
                      "isOptional": false,
                      "defaultValue": "http://${{minio.RAILWAY_PRIVATE_DOMAIN}}:9000"
                    },
                    "PEERDB_CLICKHOUSE_AWS_CREDENTIALS_AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    }
                  }
                },
                "d1183420-5fab-49dd-af10-afa0a9f19d30": {
                  "icon": null,
                  "name": "peerdb-server",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'export PEERDB_CATALOG_PORT=5432 PEERDB_CATALOG_USER=postgres PEERDB_CATALOG_DATABASE=postgres; export RUST_LOG=info PEERDB_HOST=:: PEERDB_PORT=9900; exec ./peerdb-server'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/peerdb-io/peerdb-server:stable-v0.35.5"
                  },
                  "variables": {
                    "PEERDB_CONNECT": {
                      "isOptional": false,
                      "defaultValue": "psql \"port=${{RAILWAY_TCP_PROXY_PORT}} host=${{RAILWAY_TCP_PROXY_DOMAIN}} password=${{PEERDB_PASSWORD}}\""
                    },
                    "PEERDB_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{PEERDB_PASSWORD}}"
                    },
                    "PEERDB_CATALOG_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PEERDB_CATALOG_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{catalog.POSTGRES_PASSWORD}}"
                    },
                    "PEERDB_FLOW_SERVER_ADDRESS": {
                      "isOptional": false,
                      "defaultValue": "grpc://${{flow-api.RAILWAY_PRIVATE_DOMAIN}}:8112"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "9900": {}
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 9,
    "needs_volume": true
  },
  "generated_at": "2026-10-30T04:14:55.026Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-10-18T11:10:18.975Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_f34ae1c2cbc54878be66",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 89,
    "typical_build_seconds": 0,
    "typical_start_seconds": 10,
    "slowest_service": "peerdb"
  }
}
