{
  "manifest_version": "1.0.0",
  "template": {
    "id": "f2440597-cd99-457f-9c38-ece0301b3b93",
    "slug": "convex-or-just-updated-firebase-alternat",
    "name": "Convex | (Just Updated) Firebase Alternative, HTTP Actions on HTTPS, Admin Key in Logs",
    "description": "Convex backend and dashboard. HTTPS HTTP actions, data kept on a volume",
    "url": "https://railway.com/deploy/convex-or-just-updated-firebase-alternat",
    "upstream": {
      "image": "caddy@sha256:d8542f48d34a9cf4e4c11a478865229840e87e4c96ea3f439101f31a5d35f75f"
    }
  },
  "services": [
    {
      "name": "site",
      "source": {
        "image": "caddy@sha256:d8542f48d34a9cf4e4c11a478865229840e87e4c96ea3f439101f31a5d35f75f"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "convex",
      "source": {
        "image": "ghcr.io/get-convex/convex-backend@sha256:d715e9ec088784407ca4ba2d3db592702cd328d02c76cdca3852c0018f2a76b4"
      },
      "needs_volume": true,
      "volume_mount_path": "/convex/data",
      "http": true
    },
    {
      "name": "dashboard",
      "source": {
        "image": "ghcr.io/get-convex/convex-dashboard@sha256:f85cf0d0448b9c835ae3df5c7c1c6f0145dd4c8f0f92eb0245daf304efdd9f1a"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "BACKEND_HOST",
      "service": "site",
      "description": "Provide a value for BACKEND_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "INSTANCE_SECRET",
      "service": "convex",
      "description": "Provide a value for INSTANCE_SECRET.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CONVEX_SITE_ORIGIN",
      "service": "convex",
      "description": "Provide a value for CONVEX_SITE_ORIGIN.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CONVEX_CLOUD_ORIGIN",
      "service": "convex",
      "description": "Provide a value for CONVEX_CLOUD_ORIGIN.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "NEXT_PUBLIC_DEPLOYMENT_URL",
      "service": "dashboard",
      "description": "Provide a value for NEXT_PUBLIC_DEPLOYMENT_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "convex-or-just-updated-firebase-alternat"
      }
    },
    "cli": "railway deploy --template convex-or-just-updated-firebase-alternat",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "f2440597-cd99-457f-9c38-ece0301b3b93",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "165913f3-7420-4345-b3f4-f1f1c05d7202": {
                  "icon": null,
                  "name": "site",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'printf \":%s {\\n\\thandle /railway_health {\\n\\t\\trespond \\\"ok\\\" 200\\n\\t}\\n\\thandle {\\n\\t\\treverse_proxy %s:3211\\n\\t}\\n}\\n\" \"$PORT\" \"$BACKEND_HOST\" > /etc/caddy/Caddyfile && echo \"[railway] port=$PORT upstream=$BACKEND_HOST:3211\" && exec caddy run --config /etc/caddy/Caddyfile --adapter caddyfile'",
                    "healthcheckPath": "/railway_health",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "caddy@sha256:d8542f48d34a9cf4e4c11a478865229840e87e4c96ea3f439101f31a5d35f75f"
                  },
                  "variables": {
                    "BACKEND_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{convex.RAILWAY_PRIVATE_DOMAIN}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                },
                "18913808-0a56-426a-8783-732dc593c4a4": {
                  "icon": null,
                  "name": "convex",
                  "deploy": {
                    "startCommand": "/bin/sh -c 'cd /convex && export DISABLE_BEACON=true DO_NOT_REQUIRE_SSL=true; sed \"s/--port 3210/--port $PORT/\" ./run_backend.sh > ./railway_run.sh && chmod +x ./railway_run.sh; echo \"[railway] port=$PORT cloud=$CONVEX_CLOUD_ORIGIN site=$CONVEX_SITE_ORIGIN\"; echo \"[railway] data dir owner=$(stat -c %u:%g /convex/data) writable=$(test -w /convex/data && echo yes || echo NO)\"; echo \"[railway] DASHBOARD ADMIN KEY: $(./generate_admin_key.sh 2>/dev/null)\"; exec ./railway_run.sh'",
                    "healthcheckPath": "/version",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/get-convex/convex-backend@sha256:d715e9ec088784407ca4ba2d3db592702cd328d02c76cdca3852c0018f2a76b4"
                  },
                  "variables": {
                    "INSTANCE_SECRET": {
                      "isOptional": false,
                      "defaultValue": "{{INSTANCE_SECRET}}"
                    },
                    "CONVEX_SITE_ORIGIN": {
                      "isOptional": false,
                      "defaultValue": "https://${{RAILWAY_SERVICE_SITE_URL}}"
                    },
                    "CONVEX_CLOUD_ORIGIN": {
                      "isOptional": false,
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  },
                  "volumeMounts": {
                    "18913808-0a56-426a-8783-732dc593c4a4": {
                      "mountPath": "/convex/data"
                    }
                  }
                },
                "d3dabb66-f06e-4c8e-aa39-448fc2c802c6": {
                  "icon": null,
                  "name": "dashboard",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/get-convex/convex-dashboard@sha256:f85cf0d0448b9c835ae3df5c7c1c6f0145dd4c8f0f92eb0245daf304efdd9f1a"
                  },
                  "variables": {
                    "NEXT_PUBLIC_DEPLOYMENT_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{RAILWAY_SERVICE_CONVEX_URL}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "site",
      "method": "GET",
      "path": "/railway_health",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 3,
    "needs_volume": true
  },
  "generated_at": "2026-10-30T04:14:55.026Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-10-20T23:32:56.708Z",
  "success_rate_30d": 0,
  "validation": {
    "last_run_id": "run_34f69f0fc24b4c3eaf2d",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": false,
        "detail": "FAILED,QUEUED,FAILED"
      }
    ]
  }
}
