{
  "manifest_version": "1.0.0",
  "template": {
    "id": "044fd581-8059-4aba-9633-e06bf6a1cbed",
    "slug": "opensign",
    "name": "OpenSign",
    "description": "Self-hosted document signing — upload, place fields, send for signatures",
    "url": "https://railway.com/deploy/opensign"
  },
  "services": [
    {
      "name": "MongoDB",
      "source": {
        "image": "mongo:8.0"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "server",
      "source": {
        "repo": "https://github.com/Sokanon/railway-opensign"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "client",
      "source": {
        "repo": "https://github.com/Sokanon/railway-opensign"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "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": "MongoDB Admin username",
      "secret": false,
      "strategy": "default",
      "default": "mongo"
    },
    {
      "key": "APP_ID",
      "service": "server",
      "description": "Provide a value for APP_ID.",
      "secret": false,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "appName",
      "service": "server",
      "description": "Application name",
      "secret": false,
      "strategy": "default",
      "default": "open_sign_server"
    },
    {
      "key": "NODE_ENV",
      "service": "server",
      "description": "Provide a value for NODE_ENV.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "USE_LOCAL",
      "service": "server",
      "description": "Use local file storage",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "MASTER_KEY",
      "service": "server",
      "description": "Provide a value for MASTER_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "PUBLIC_URL",
      "service": "server",
      "description": "Provide a value for PUBLIC_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "SERVER_URL",
      "service": "server",
      "description": "Provide a value for SERVER_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MONGODB_URI",
      "service": "server",
      "description": "Provide a value for MONGODB_URI.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PARSE_MOUNT",
      "service": "server",
      "description": "Parse server mount path",
      "secret": false,
      "strategy": "default",
      "default": "/api"
    },
    {
      "key": "SMTP_ENABLE",
      "service": "server",
      "description": "Enable SMTP email",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "NODE_ENV",
      "service": "client",
      "description": "Provide a value for NODE_ENV.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "PUBLIC_URL",
      "service": "client",
      "description": "Provide a value for PUBLIC_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "REACT_APP_APPID",
      "service": "client",
      "description": "Provide a value for REACT_APP_APPID.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GENERATE_SOURCEMAP",
      "service": "client",
      "description": "Disable Sourcemaps ",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "REACT_APP_SERVERURL",
      "service": "client",
      "description": "Provide a value for REACT_APP_SERVERURL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "opensign"
      }
    },
    "cli": "railway deploy --template opensign",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "044fd581-8059-4aba-9633-e06bf6a1cbed",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "6a880d49-173f-4358-98ed-3ceb02e8579a": {
                  "icon": null,
                  "name": "MongoDB",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "mongo:8.0"
                  },
                  "variables": {
                    "MONGO_INITDB_ROOT_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{MONGO_INITDB_ROOT_PASSWORD}}"
                    },
                    "MONGO_INITDB_ROOT_USERNAME": {
                      "isOptional": false,
                      "description": "MongoDB Admin username",
                      "defaultValue": "mongo"
                    }
                  }
                },
                "7493a0e6-1fa9-4542-8c5a-b5f2f4a7bd94": {
                  "icon": null,
                  "name": "server",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 3
                  },
                  "source": {
                    "repo": "https://github.com/Sokanon/railway-opensign",
                    "rootDirectory": "server"
                  },
                  "variables": {
                    "APP_ID": {
                      "isOptional": false,
                      "defaultValue": "{{APP_ID}}"
                    },
                    "appName": {
                      "isOptional": false,
                      "description": "Application name",
                      "defaultValue": "open_sign_server"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "production"
                    },
                    "USE_LOCAL": {
                      "isOptional": false,
                      "description": "Use local file storage",
                      "defaultValue": "true"
                    },
                    "MASTER_KEY": {
                      "isOptional": false,
                      "defaultValue": "{{MASTER_KEY}}"
                    },
                    "PUBLIC_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "SERVER_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:8080/api"
                    },
                    "MONGODB_URI": {
                      "isOptional": false,
                      "defaultValue": "mongodb://${{MongoDB.MONGO_INITDB_ROOT_USERNAME}}:${{MongoDB.MONGO_INITDB_ROOT_PASSWORD}}@${{MongoDB.RAILWAY_PRIVATE_DOMAIN}}:27017/opensign?authSource=admin"
                    },
                    "PARSE_MOUNT": {
                      "isOptional": false,
                      "description": "Parse server mount path",
                      "defaultValue": "/api"
                    },
                    "SMTP_ENABLE": {
                      "isOptional": false,
                      "description": "Enable SMTP email",
                      "defaultValue": "false"
                    }
                  }
                },
                "ab07e278-e2c6-46ce-a359-e327a083379b": {
                  "icon": null,
                  "name": "client",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 3
                  },
                  "source": {
                    "repo": "https://github.com/Sokanon/railway-opensign",
                    "rootDirectory": "client"
                  },
                  "variables": {
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "production"
                    },
                    "PUBLIC_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "REACT_APP_APPID": {
                      "isOptional": false,
                      "defaultValue": "${{server.APP_ID}}"
                    },
                    "GENERATE_SOURCEMAP": {
                      "isOptional": false,
                      "description": "Disable Sourcemaps ",
                      "defaultValue": "false"
                    },
                    "REACT_APP_SERVERURL": {
                      "isOptional": false,
                      "defaultValue": "https://${{server.RAILWAY_PUBLIC_DOMAIN}}/api"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 3,
    "needs_volume": false
  },
  "generated_at": "2026-09-20T10:14:37.339Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-18T10:09:21.547Z",
  "success_rate_30d": 0,
  "validation": {
    "last_run_id": "run_aa5c2ded804b49439447",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": false,
        "detail": "FAILED,BUILDING,SUCCESS"
      }
    ]
  }
}
