{
  "manifest_version": "1.0.0",
  "template": {
    "id": "05bde4c3-d6af-4995-b668-9d5a97cbd8c3",
    "slug": "openstatus-auto-setup",
    "name": "OpenStatus (Auto Setup)",
    "description": "Status pages and uptime monitoring with 4 probes, no post-deploy setup",
    "url": "https://railway.com/deploy/openstatus-auto-setup",
    "upstream": {
      "image": "ghcr.io/openstatushq/openstatus-status-page:3fa4995"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "tinybird-local",
      "source": {
        "image": "ghcr.io/hmseeb/openstatus-railway-tinybird-local:3fa4995-r3"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "workflows",
      "source": {
        "image": "ghcr.io/openstatushq/openstatus-workflows:3fa4995"
      },
      "needs_volume": true,
      "volume_mount_path": "/app/data",
      "http": false
    },
    {
      "name": "status-page",
      "source": {
        "image": "ghcr.io/openstatushq/openstatus-status-page:3fa4995"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "probe-eu-west",
      "source": {
        "image": "ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "tinybird-deploy",
      "source": {
        "image": "ghcr.io/hmseeb/openstatus-railway-tinybird-deploy:3fa4995-r3"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "dashboard",
      "source": {
        "image": "ghcr.io/hmseeb/openstatus-railway-dashboard:3fa4995-r3"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "cron",
      "source": {
        "image": "ghcr.io/hmseeb/openstatus-railway-cron:3fa4995-r3"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "db-migrate",
      "source": {
        "image": "ghcr.io/openstatushq/openstatus-db-migrate:3fa4995"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "probe-us-west",
      "source": {
        "image": "ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "server",
      "source": {
        "image": "ghcr.io/openstatushq/openstatus-server:3fa4995"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "probe-asia",
      "source": {
        "image": "ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "private-location",
      "source": {
        "image": "ghcr.io/openstatushq/openstatus-private-location:3fa4995"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "probe",
      "source": {
        "image": "ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "libsql",
      "source": {
        "image": "ghcr.io/tursodatabase/libsql-server@sha256:6dd3eb276d9d3604e4a48ac4a999a2e267814732d57d7e94c04ba71482333a67"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/sqld",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "TINYBIRD_URL",
      "service": "tinybird-local",
      "description": "Analytics API URL the other services use.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "TB_LOCAL_USER_TOKEN",
      "service": "tinybird-local",
      "description": "Tinybird Local user token. Must come from `tb local generate-tokens`.",
      "secret": true,
      "strategy": "default",
      "default": "p.eyJ1IjogIjI2OTVhNDEzLTllMTctNDE1YS1hOWFmLTJmMzMxZWMyYzViOCIsICJpZCI6ICIyZDk1YjY1My1hMTA4LTRkZTUtYjc4Mi01ZjE1OTNhZmIwZGUiLCAiaG9zdCI6IG51bGx9.RLsa0HY5A7pP5FnytWFTIwHRIwtacPmKKeaoF6_2L9M"
    },
    {
      "key": "TB_LOCAL_WORKSPACE_TOKEN",
      "service": "tinybird-local",
      "description": "Tinybird Local workspace token. Must come from `tb local generate-tokens`; private network only.",
      "secret": true,
      "strategy": "default",
      "default": "p.eyJ1IjogIjIzZTE0YmFkLWFlYmQtNGVjMi04MTVkLTMyYmI0ZDllNmI0ZCIsICJpZCI6ICJlZjc2NTEwMi0yM2Y1LTQ5OGQtYTMyZS0zMGJkMWRmNzBkNTciLCAiaG9zdCI6IG51bGx9.crYr6k4p1CXjb4bJ3grPMmRDOz4fIoU-fgdJ420bnvo"
    },
    {
      "key": "PORT",
      "service": "workflows",
      "description": "The Next.js apps call themselves on localhost:3000, so every app listens there.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "NODE_ENV",
      "service": "workflows",
      "description": "Node environment.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "SITE_URL",
      "service": "workflows",
      "description": "Dashboard URL used in alert emails.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "SELF_HOST",
      "service": "workflows",
      "description": "Self-hosted mode: magic link login printed to the dashboard logs, no cloud checks.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "FLY_REGION",
      "service": "workflows",
      "description": "Region label OpenStatus stamps on its own logs.",
      "secret": false,
      "strategy": "default",
      "default": "self-hosted"
    },
    {
      "key": "CRON_SECRET",
      "service": "workflows",
      "description": "Shared secret between the apps, the ingest server and the cron sidecar, generated per deploy.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "DATABASE_URL",
      "service": "workflows",
      "description": "libSQL database (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TINYBIRD_URL",
      "service": "workflows",
      "description": "Tinybird Local analytics API (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WORKFLOWS_URL",
      "service": "workflows",
      "description": "Private URL of this service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "RESEND_API_KEY",
      "service": "workflows",
      "description": "Resend key, set once on the dashboard service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "workflows",
      "description": "Run as root so the app can write to the volume.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "TINY_BIRD_API_KEY",
      "service": "workflows",
      "description": "Tinybird Local workspace token.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "UPSTASH_REDIS_REST_URL",
      "service": "workflows",
      "description": "Placeholder. OpenStatus refuses to boot without it; the self-hosted stack never calls Upstash.",
      "secret": false,
      "strategy": "default",
      "default": "http://localhost:6379"
    },
    {
      "key": "UPSTASH_REDIS_REST_TOKEN",
      "service": "workflows",
      "description": "Placeholder, see UPSTASH_REDIS_REST_URL.",
      "secret": true,
      "strategy": "default",
      "default": "placeholder"
    },
    {
      "key": "PORT",
      "service": "status-page",
      "description": "The Next.js apps call themselves on localhost:3000, so every app listens there.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "HOSTNAME",
      "service": "status-page",
      "description": "Listen on IPv4 and IPv6.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "NODE_ENV",
      "service": "status-page",
      "description": "Node environment.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "SELF_HOST",
      "service": "status-page",
      "description": "Self-hosted mode: magic link login printed to the dashboard logs, no cloud checks.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "FLY_REGION",
      "service": "status-page",
      "description": "Region label OpenStatus stamps on its own logs.",
      "secret": false,
      "strategy": "default",
      "default": "self-hosted"
    },
    {
      "key": "AUTH_SECRET",
      "service": "status-page",
      "description": "Shared with the dashboard.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CRON_SECRET",
      "service": "status-page",
      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_URL",
      "service": "status-page",
      "description": "libSQL database (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TINYBIRD_URL",
      "service": "status-page",
      "description": "Tinybird Local analytics API (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RESEND_API_KEY",
      "service": "status-page",
      "description": "Resend key, set once on the dashboard service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "AUTH_TRUST_HOST",
      "service": "status-page",
      "description": "Trust Railway's proxy headers.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "TINY_BIRD_API_KEY",
      "service": "status-page",
      "description": "Tinybird Local workspace token.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "UPSTASH_REDIS_REST_URL",
      "service": "status-page",
      "description": "Placeholder. OpenStatus refuses to boot without it; the self-hosted stack never calls Upstash.",
      "secret": false,
      "strategy": "default",
      "default": "http://localhost:6379"
    },
    {
      "key": "UPSTASH_REDIS_REST_TOKEN",
      "service": "status-page",
      "description": "Placeholder, see UPSTASH_REDIS_REST_URL.",
      "secret": true,
      "strategy": "default",
      "default": "placeholder"
    },
    {
      "key": "OPENSTATUS_KEY",
      "service": "probe-eu-west",
      "description": "Private location token, derived from the probe service's generated key. The cron sidecar registers it.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "OPENSTATUS_INGEST_URL",
      "service": "probe-eu-west",
      "description": "Ingest server that hands out monitors and receives results.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TB_HOST",
      "service": "tinybird-deploy",
      "description": "Tinybird Local URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TB_TOKEN",
      "service": "tinybird-deploy",
      "description": "Tinybird Local workspace token.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "dashboard",
      "description": "The Next.js apps call themselves on localhost:3000, so every app listens there.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "AUTH_URL",
      "service": "dashboard",
      "description": "Base URL for magic links and OAuth callbacks. Change after adding a custom domain.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "HOSTNAME",
      "service": "dashboard",
      "description": "Listen on IPv4 and IPv6.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "NODE_ENV",
      "service": "dashboard",
      "description": "Node environment.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "SELF_HOST",
      "service": "dashboard",
      "description": "Self-hosted mode: magic link login printed to the dashboard logs, no cloud checks.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "FLY_REGION",
      "service": "dashboard",
      "description": "Region label OpenStatus stamps on its own logs.",
      "secret": false,
      "strategy": "default",
      "default": "self-hosted"
    },
    {
      "key": "AUTH_SECRET",
      "service": "dashboard",
      "description": "Auth.js signing secret, generated per deploy.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CRON_SECRET",
      "service": "dashboard",
      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_URL",
      "service": "dashboard",
      "description": "libSQL database (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TINYBIRD_URL",
      "service": "dashboard",
      "description": "Tinybird Local analytics API (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RESEND_API_KEY",
      "service": "dashboard",
      "description": "Optional Resend key for alert and subscriber emails. Leave the placeholder and the login link is printed to these logs instead.",
      "secret": true,
      "strategy": "default",
      "default": "re_placeholder_not_configured"
    },
    {
      "key": "AUTH_TRUST_HOST",
      "service": "dashboard",
      "description": "Trust Railway's proxy headers.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "NEXT_PUBLIC_URL",
      "service": "dashboard",
      "description": "Public dashboard URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "TINY_BIRD_API_KEY",
      "service": "dashboard",
      "description": "Tinybird Local workspace token.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "UPSTASH_REDIS_REST_URL",
      "service": "dashboard",
      "description": "Placeholder. OpenStatus refuses to boot without it; the self-hosted stack never calls Upstash.",
      "secret": false,
      "strategy": "default",
      "default": "http://localhost:6379"
    },
    {
      "key": "UPSTASH_REDIS_REST_TOKEN",
      "service": "dashboard",
      "description": "Placeholder, see UPSTASH_REDIS_REST_URL.",
      "secret": true,
      "strategy": "default",
      "default": "placeholder"
    },
    {
      "key": "PROBE_KEYS",
      "service": "cron",
      "description": "Probe name=token pairs registered as private locations on the first workspace.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CRON_SECRET",
      "service": "cron",
      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_URL",
      "service": "cron",
      "description": "libSQL database (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TINYBIRD_URL",
      "service": "cron",
      "description": "Tinybird Local analytics API (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WORKFLOWS_URL",
      "service": "cron",
      "description": "Workflows service URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_URL",
      "service": "db-migrate",
      "description": "libSQL database (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "OPENSTATUS_KEY",
      "service": "probe-us-west",
      "description": "Private location token, derived from the probe service's generated key. The cron sidecar registers it.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "OPENSTATUS_INGEST_URL",
      "service": "probe-us-west",
      "description": "Ingest server that hands out monitors and receives results.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "server",
      "description": "The Next.js apps call themselves on localhost:3000, so every app listens there.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "NODE_ENV",
      "service": "server",
      "description": "Node environment.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "SELF_HOST",
      "service": "server",
      "description": "Self-hosted mode: magic link login printed to the dashboard logs, no cloud checks.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "FLY_REGION",
      "service": "server",
      "description": "Region label OpenStatus stamps on its own logs.",
      "secret": false,
      "strategy": "default",
      "default": "self-hosted"
    },
    {
      "key": "CRON_SECRET",
      "service": "server",
      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_URL",
      "service": "server",
      "description": "libSQL database (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TINYBIRD_URL",
      "service": "server",
      "description": "Tinybird Local analytics API (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RESEND_API_KEY",
      "service": "server",
      "description": "Resend key, set once on the dashboard service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TINY_BIRD_API_KEY",
      "service": "server",
      "description": "Tinybird Local workspace token.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "UPSTASH_REDIS_REST_URL",
      "service": "server",
      "description": "Placeholder. OpenStatus refuses to boot without it; the self-hosted stack never calls Upstash.",
      "secret": false,
      "strategy": "default",
      "default": "http://localhost:6379"
    },
    {
      "key": "UPSTASH_REDIS_REST_TOKEN",
      "service": "server",
      "description": "Placeholder, see UPSTASH_REDIS_REST_URL.",
      "secret": true,
      "strategy": "default",
      "default": "placeholder"
    },
    {
      "key": "OPENSTATUS_KEY",
      "service": "probe-asia",
      "description": "Private location token, derived from the probe service's generated key. The cron sidecar registers it.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "OPENSTATUS_INGEST_URL",
      "service": "probe-asia",
      "description": "Ingest server that hands out monitors and receives results.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "private-location",
      "description": "Ingest server port.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "DB_URL",
      "service": "private-location",
      "description": "libSQL database (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GIN_MODE",
      "service": "private-location",
      "description": "Gin production mode.",
      "secret": false,
      "strategy": "default",
      "default": "release"
    },
    {
      "key": "INGEST_URL",
      "service": "private-location",
      "description": "Private URL the bundled probes report to.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "CRON_SECRET",
      "service": "private-location",
      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TINYBIRD_URL",
      "service": "private-location",
      "description": "Tinybird Local analytics API (private network).",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WORKFLOWS_URL",
      "service": "private-location",
      "description": "Workflows service URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TINYBIRD_TOKEN",
      "service": "private-location",
      "description": "Tinybird Local workspace token.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "OPENSTATUS_KEY",
      "service": "probe",
      "description": "Private location token, generated per deploy; the regional probes derive theirs from it.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "OPENSTATUS_INGEST_URL",
      "service": "probe",
      "description": "Ingest server that hands out monitors and receives results.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SQLD_NODE",
      "service": "libsql",
      "description": "Run as a standalone primary.",
      "secret": false,
      "strategy": "default",
      "default": "primary"
    },
    {
      "key": "DATABASE_URL",
      "service": "libsql",
      "description": "URL the other services use. Private network only: libSQL has no auth here, never give it a public domain.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SQLD_HTTP_LISTEN_ADDR",
      "service": "libsql",
      "description": "Listen on IPv6 too (Railway's private network is IPv6).",
      "secret": false,
      "strategy": "default",
      "default": "[::]:8080"
    },
    {
      "key": "SQLD_MAX_CONCURRENT_REQUESTS",
      "service": "libsql",
      "description": "From upstream docker-compose.yaml.",
      "secret": false,
      "strategy": "default",
      "default": "1024"
    },
    {
      "key": "SQLD_MAX_CONCURRENT_CONNECTIONS",
      "service": "libsql",
      "description": "From upstream docker-compose.yaml.",
      "secret": false,
      "strategy": "default",
      "default": "512"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "openstatus-auto-setup"
      }
    },
    "cli": "railway deploy --template openstatus-auto-setup",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "05bde4c3-d6af-4995-b668-9d5a97cbd8c3",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "10d92bb9-e59e-46c9-b508-bd4e2e49010c": {
                  "icon": "https://www.tinybird.co/favicon.ico",
                  "name": "tinybird-local",
                  "deploy": {
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/hmseeb/openstatus-railway-tinybird-local:3fa4995-r3"
                  },
                  "variables": {
                    "TINYBIRD_URL": {
                      "isOptional": false,
                      "description": "Analytics API URL the other services use.",
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:7181"
                    },
                    "TB_LOCAL_USER_TOKEN": {
                      "isOptional": false,
                      "description": "Tinybird Local user token. Must come from `tb local generate-tokens`.",
                      "defaultValue": "p.eyJ1IjogIjI2OTVhNDEzLTllMTctNDE1YS1hOWFmLTJmMzMxZWMyYzViOCIsICJpZCI6ICIyZDk1YjY1My1hMTA4LTRkZTUtYjc4Mi01ZjE1OTNhZmIwZGUiLCAiaG9zdCI6IG51bGx9.RLsa0HY5A7pP5FnytWFTIwHRIwtacPmKKeaoF6_2L9M"
                    },
                    "TB_LOCAL_WORKSPACE_TOKEN": {
                      "isOptional": false,
                      "description": "Tinybird Local workspace token. Must come from `tb local generate-tokens`; private network only.",
                      "defaultValue": "p.eyJ1IjogIjIzZTE0YmFkLWFlYmQtNGVjMi04MTVkLTMyYmI0ZDllNmI0ZCIsICJpZCI6ICJlZjc2NTEwMi0yM2Y1LTQ5OGQtYTMyZS0zMGJkMWRmNzBkNTciLCAiaG9zdCI6IG51bGx9.crYr6k4p1CXjb4bJ3grPMmRDOz4fIoU-fgdJ420bnvo"
                    }
                  },
                  "volumeMounts": {
                    "49d4cd37-facc-4994-a953-71d88b391ea2": {
                      "mountPath": "/data"
                    }
                  }
                },
                "124d5c64-d0c3-45e4-8950-54998e703c15": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "workflows",
                  "deploy": {
                    "healthcheckPath": "/ping",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/openstatus-workflows:3fa4995"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "The Next.js apps call themselves on localhost:3000, so every app listens there.",
                      "defaultValue": "3000"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "Node environment.",
                      "defaultValue": "production"
                    },
                    "SITE_URL": {
                      "isOptional": false,
                      "description": "Dashboard URL used in alert emails.",
                      "defaultValue": "https://${{dashboard.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "SELF_HOST": {
                      "isOptional": false,
                      "description": "Self-hosted mode: magic link login printed to the dashboard logs, no cloud checks.",
                      "defaultValue": "true"
                    },
                    "FLY_REGION": {
                      "isOptional": false,
                      "description": "Region label OpenStatus stamps on its own logs.",
                      "defaultValue": "self-hosted"
                    },
                    "CRON_SECRET": {
                      "isOptional": false,
                      "description": "Shared secret between the apps, the ingest server and the cron sidecar, generated per deploy.",
                      "defaultValue": "{{CRON_SECRET}}"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "libSQL database (private network).",
                      "defaultValue": "${{libsql.DATABASE_URL}}"
                    },
                    "TINYBIRD_URL": {
                      "isOptional": false,
                      "description": "Tinybird Local analytics API (private network).",
                      "defaultValue": "${{tinybird-local.TINYBIRD_URL}}"
                    },
                    "WORKFLOWS_URL": {
                      "isOptional": false,
                      "description": "Private URL of this service.",
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "RESEND_API_KEY": {
                      "isOptional": false,
                      "description": "Resend key, set once on the dashboard service.",
                      "defaultValue": "${{dashboard.RESEND_API_KEY}}"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "description": "Run as root so the app can write to the volume.",
                      "defaultValue": "0"
                    },
                    "TINY_BIRD_API_KEY": {
                      "isOptional": false,
                      "description": "Tinybird Local workspace token.",
                      "defaultValue": "${{tinybird-local.TB_LOCAL_WORKSPACE_TOKEN}}"
                    },
                    "UPSTASH_REDIS_REST_URL": {
                      "isOptional": false,
                      "description": "Placeholder. OpenStatus refuses to boot without it; the self-hosted stack never calls Upstash.",
                      "defaultValue": "http://localhost:6379"
                    },
                    "UPSTASH_REDIS_REST_TOKEN": {
                      "isOptional": false,
                      "description": "Placeholder, see UPSTASH_REDIS_REST_URL.",
                      "defaultValue": "placeholder"
                    }
                  },
                  "volumeMounts": {
                    "81ba1c3b-2cb5-406a-87f1-933d0fd07e69": {
                      "mountPath": "/app/data"
                    }
                  }
                },
                "18af01bf-cc85-481a-93a8-871e27ba7ffe": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "status-page",
                  "deploy": {
                    "healthcheckPath": "/api/health",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/openstatus-status-page:3fa4995"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "The Next.js apps call themselves on localhost:3000, so every app listens there.",
                      "defaultValue": "3000"
                    },
                    "HOSTNAME": {
                      "isOptional": false,
                      "description": "Listen on IPv4 and IPv6.",
                      "defaultValue": "::"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "Node environment.",
                      "defaultValue": "production"
                    },
                    "SELF_HOST": {
                      "isOptional": false,
                      "description": "Self-hosted mode: magic link login printed to the dashboard logs, no cloud checks.",
                      "defaultValue": "true"
                    },
                    "FLY_REGION": {
                      "isOptional": false,
                      "description": "Region label OpenStatus stamps on its own logs.",
                      "defaultValue": "self-hosted"
                    },
                    "AUTH_SECRET": {
                      "isOptional": false,
                      "description": "Shared with the dashboard.",
                      "defaultValue": "${{dashboard.AUTH_SECRET}}"
                    },
                    "CRON_SECRET": {
                      "isOptional": false,
                      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
                      "defaultValue": "${{workflows.CRON_SECRET}}"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "libSQL database (private network).",
                      "defaultValue": "${{libsql.DATABASE_URL}}"
                    },
                    "TINYBIRD_URL": {
                      "isOptional": false,
                      "description": "Tinybird Local analytics API (private network).",
                      "defaultValue": "${{tinybird-local.TINYBIRD_URL}}"
                    },
                    "RESEND_API_KEY": {
                      "isOptional": false,
                      "description": "Resend key, set once on the dashboard service.",
                      "defaultValue": "${{dashboard.RESEND_API_KEY}}"
                    },
                    "AUTH_TRUST_HOST": {
                      "isOptional": false,
                      "description": "Trust Railway's proxy headers.",
                      "defaultValue": "true"
                    },
                    "TINY_BIRD_API_KEY": {
                      "isOptional": false,
                      "description": "Tinybird Local workspace token.",
                      "defaultValue": "${{tinybird-local.TB_LOCAL_WORKSPACE_TOKEN}}"
                    },
                    "UPSTASH_REDIS_REST_URL": {
                      "isOptional": false,
                      "description": "Placeholder. OpenStatus refuses to boot without it; the self-hosted stack never calls Upstash.",
                      "defaultValue": "http://localhost:6379"
                    },
                    "UPSTASH_REDIS_REST_TOKEN": {
                      "isOptional": false,
                      "description": "Placeholder, see UPSTASH_REDIS_REST_URL.",
                      "defaultValue": "placeholder"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3000": {
                        "port": 3000
                      }
                    }
                  }
                },
                "30e07d53-7220-4095-ac30-375b6ece1ddf": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "probe-eu-west",
                  "deploy": {
                    "multiRegionConfig": {
                      "europe-west4-drams3a": {
                        "numReplicas": 1
                      }
                    },
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674"
                  },
                  "variables": {
                    "OPENSTATUS_KEY": {
                      "isOptional": false,
                      "description": "Private location token, derived from the probe service's generated key. The cron sidecar registers it.",
                      "defaultValue": "${{probe.OPENSTATUS_KEY}}-eu-west"
                    },
                    "OPENSTATUS_INGEST_URL": {
                      "isOptional": false,
                      "description": "Ingest server that hands out monitors and receives results.",
                      "defaultValue": "${{private-location.INGEST_URL}}"
                    }
                  }
                },
                "3b4e4556-5ef8-4395-a6b7-2df645af1637": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "tinybird-deploy",
                  "deploy": {
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 20
                  },
                  "source": {
                    "image": "ghcr.io/hmseeb/openstatus-railway-tinybird-deploy:3fa4995-r3"
                  },
                  "variables": {
                    "TB_HOST": {
                      "isOptional": false,
                      "description": "Tinybird Local URL.",
                      "defaultValue": "${{tinybird-local.TINYBIRD_URL}}"
                    },
                    "TB_TOKEN": {
                      "isOptional": false,
                      "description": "Tinybird Local workspace token.",
                      "defaultValue": "${{tinybird-local.TB_LOCAL_WORKSPACE_TOKEN}}"
                    }
                  }
                },
                "4962e9ec-e896-47e5-8e55-e3f6b7699b99": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "dashboard",
                  "deploy": {
                    "healthcheckPath": "/login",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/hmseeb/openstatus-railway-dashboard:3fa4995-r3"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "The Next.js apps call themselves on localhost:3000, so every app listens there.",
                      "defaultValue": "3000"
                    },
                    "AUTH_URL": {
                      "isOptional": false,
                      "description": "Base URL for magic links and OAuth callbacks. Change after adding a custom domain.",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "HOSTNAME": {
                      "isOptional": false,
                      "description": "Listen on IPv4 and IPv6.",
                      "defaultValue": "::"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "Node environment.",
                      "defaultValue": "production"
                    },
                    "SELF_HOST": {
                      "isOptional": false,
                      "description": "Self-hosted mode: magic link login printed to the dashboard logs, no cloud checks.",
                      "defaultValue": "true"
                    },
                    "FLY_REGION": {
                      "isOptional": false,
                      "description": "Region label OpenStatus stamps on its own logs.",
                      "defaultValue": "self-hosted"
                    },
                    "AUTH_SECRET": {
                      "isOptional": false,
                      "description": "Auth.js signing secret, generated per deploy.",
                      "defaultValue": "{{AUTH_SECRET}}"
                    },
                    "CRON_SECRET": {
                      "isOptional": false,
                      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
                      "defaultValue": "${{workflows.CRON_SECRET}}"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "libSQL database (private network).",
                      "defaultValue": "${{libsql.DATABASE_URL}}"
                    },
                    "TINYBIRD_URL": {
                      "isOptional": false,
                      "description": "Tinybird Local analytics API (private network).",
                      "defaultValue": "${{tinybird-local.TINYBIRD_URL}}"
                    },
                    "RESEND_API_KEY": {
                      "isOptional": false,
                      "description": "Optional Resend key for alert and subscriber emails. Leave the placeholder and the login link is printed to these logs instead.",
                      "defaultValue": "re_placeholder_not_configured"
                    },
                    "AUTH_TRUST_HOST": {
                      "isOptional": false,
                      "description": "Trust Railway's proxy headers.",
                      "defaultValue": "true"
                    },
                    "NEXT_PUBLIC_URL": {
                      "isOptional": false,
                      "description": "Public dashboard URL.",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "TINY_BIRD_API_KEY": {
                      "isOptional": false,
                      "description": "Tinybird Local workspace token.",
                      "defaultValue": "${{tinybird-local.TB_LOCAL_WORKSPACE_TOKEN}}"
                    },
                    "UPSTASH_REDIS_REST_URL": {
                      "isOptional": false,
                      "description": "Placeholder. OpenStatus refuses to boot without it; the self-hosted stack never calls Upstash.",
                      "defaultValue": "http://localhost:6379"
                    },
                    "UPSTASH_REDIS_REST_TOKEN": {
                      "isOptional": false,
                      "description": "Placeholder, see UPSTASH_REDIS_REST_URL.",
                      "defaultValue": "placeholder"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3000": {
                        "port": 3000
                      }
                    }
                  }
                },
                "6124a959-5764-4401-b45c-dae65b41b62b": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "cron",
                  "deploy": {
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/hmseeb/openstatus-railway-cron:3fa4995-r3"
                  },
                  "variables": {
                    "PROBE_KEYS": {
                      "isOptional": false,
                      "description": "Probe name=token pairs registered as private locations on the first workspace.",
                      "defaultValue": "railway-us-east=${{probe.OPENSTATUS_KEY}},railway-us-west=${{probe-us-west.OPENSTATUS_KEY}},railway-eu-west=${{probe-eu-west.OPENSTATUS_KEY}},railway-asia=${{probe-asia.OPENSTATUS_KEY}}"
                    },
                    "CRON_SECRET": {
                      "isOptional": false,
                      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
                      "defaultValue": "${{workflows.CRON_SECRET}}"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "libSQL database (private network).",
                      "defaultValue": "${{libsql.DATABASE_URL}}"
                    },
                    "TINYBIRD_URL": {
                      "isOptional": false,
                      "description": "Tinybird Local analytics API (private network).",
                      "defaultValue": "${{tinybird-local.TINYBIRD_URL}}"
                    },
                    "WORKFLOWS_URL": {
                      "isOptional": false,
                      "description": "Workflows service URL.",
                      "defaultValue": "${{workflows.WORKFLOWS_URL}}"
                    }
                  }
                },
                "956b7229-684a-40c1-82fe-2a94c017a785": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "db-migrate",
                  "deploy": {
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/openstatus-db-migrate:3fa4995"
                  },
                  "variables": {
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "libSQL database (private network).",
                      "defaultValue": "${{libsql.DATABASE_URL}}"
                    }
                  }
                },
                "9eb05aca-11dd-4a84-bff0-69d21dfb94c2": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "probe-us-west",
                  "deploy": {
                    "multiRegionConfig": {
                      "us-west2": {
                        "numReplicas": 1
                      }
                    },
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674"
                  },
                  "variables": {
                    "OPENSTATUS_KEY": {
                      "isOptional": false,
                      "description": "Private location token, derived from the probe service's generated key. The cron sidecar registers it.",
                      "defaultValue": "${{probe.OPENSTATUS_KEY}}-us-west"
                    },
                    "OPENSTATUS_INGEST_URL": {
                      "isOptional": false,
                      "description": "Ingest server that hands out monitors and receives results.",
                      "defaultValue": "${{private-location.INGEST_URL}}"
                    }
                  }
                },
                "acca6bbf-f0df-4403-bdb7-8641068b2cb7": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "server",
                  "deploy": {
                    "healthcheckPath": "/ping",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/openstatus-server:3fa4995"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "The Next.js apps call themselves on localhost:3000, so every app listens there.",
                      "defaultValue": "3000"
                    },
                    "NODE_ENV": {
                      "isOptional": false,
                      "description": "Node environment.",
                      "defaultValue": "production"
                    },
                    "SELF_HOST": {
                      "isOptional": false,
                      "description": "Self-hosted mode: magic link login printed to the dashboard logs, no cloud checks.",
                      "defaultValue": "true"
                    },
                    "FLY_REGION": {
                      "isOptional": false,
                      "description": "Region label OpenStatus stamps on its own logs.",
                      "defaultValue": "self-hosted"
                    },
                    "CRON_SECRET": {
                      "isOptional": false,
                      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
                      "defaultValue": "${{workflows.CRON_SECRET}}"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "libSQL database (private network).",
                      "defaultValue": "${{libsql.DATABASE_URL}}"
                    },
                    "TINYBIRD_URL": {
                      "isOptional": false,
                      "description": "Tinybird Local analytics API (private network).",
                      "defaultValue": "${{tinybird-local.TINYBIRD_URL}}"
                    },
                    "RESEND_API_KEY": {
                      "isOptional": false,
                      "description": "Resend key, set once on the dashboard service.",
                      "defaultValue": "${{dashboard.RESEND_API_KEY}}"
                    },
                    "TINY_BIRD_API_KEY": {
                      "isOptional": false,
                      "description": "Tinybird Local workspace token.",
                      "defaultValue": "${{tinybird-local.TB_LOCAL_WORKSPACE_TOKEN}}"
                    },
                    "UPSTASH_REDIS_REST_URL": {
                      "isOptional": false,
                      "description": "Placeholder. OpenStatus refuses to boot without it; the self-hosted stack never calls Upstash.",
                      "defaultValue": "http://localhost:6379"
                    },
                    "UPSTASH_REDIS_REST_TOKEN": {
                      "isOptional": false,
                      "description": "Placeholder, see UPSTASH_REDIS_REST_URL.",
                      "defaultValue": "placeholder"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3000": {
                        "port": 3000
                      }
                    }
                  }
                },
                "ba7c7a1f-a4cf-4ce7-8d8b-c52e6995242e": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "probe-asia",
                  "deploy": {
                    "multiRegionConfig": {
                      "asia-southeast1-eqsg3a": {
                        "numReplicas": 1
                      }
                    },
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674"
                  },
                  "variables": {
                    "OPENSTATUS_KEY": {
                      "isOptional": false,
                      "description": "Private location token, derived from the probe service's generated key. The cron sidecar registers it.",
                      "defaultValue": "${{probe.OPENSTATUS_KEY}}-asia"
                    },
                    "OPENSTATUS_INGEST_URL": {
                      "isOptional": false,
                      "description": "Ingest server that hands out monitors and receives results.",
                      "defaultValue": "${{private-location.INGEST_URL}}"
                    }
                  }
                },
                "beab9678-e68f-4a7c-86b6-cdb6af6c0a3f": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "private-location",
                  "deploy": {
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/openstatus-private-location:3fa4995"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Ingest server port.",
                      "defaultValue": "8080"
                    },
                    "DB_URL": {
                      "isOptional": false,
                      "description": "libSQL database (private network).",
                      "defaultValue": "${{libsql.DATABASE_URL}}"
                    },
                    "GIN_MODE": {
                      "isOptional": false,
                      "description": "Gin production mode.",
                      "defaultValue": "release"
                    },
                    "INGEST_URL": {
                      "isOptional": false,
                      "description": "Private URL the bundled probes report to.",
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:8080"
                    },
                    "CRON_SECRET": {
                      "isOptional": false,
                      "description": "Shared secret between the apps, the ingest server and the cron sidecar.",
                      "defaultValue": "${{workflows.CRON_SECRET}}"
                    },
                    "TINYBIRD_URL": {
                      "isOptional": false,
                      "description": "Tinybird Local analytics API (private network).",
                      "defaultValue": "${{tinybird-local.TINYBIRD_URL}}"
                    },
                    "WORKFLOWS_URL": {
                      "isOptional": false,
                      "description": "Workflows service URL.",
                      "defaultValue": "${{workflows.WORKFLOWS_URL}}"
                    },
                    "TINYBIRD_TOKEN": {
                      "isOptional": false,
                      "description": "Tinybird Local workspace token.",
                      "defaultValue": "${{tinybird-local.TB_LOCAL_WORKSPACE_TOKEN}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                },
                "dc3bb27f-64c2-4960-bbb0-863118e429ad": {
                  "icon": "https://www.openstatus.dev/icon.png",
                  "name": "probe",
                  "deploy": {
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674"
                  },
                  "variables": {
                    "OPENSTATUS_KEY": {
                      "isOptional": false,
                      "description": "Private location token, generated per deploy; the regional probes derive theirs from it.",
                      "defaultValue": "{{OPENSTATUS_KEY}}"
                    },
                    "OPENSTATUS_INGEST_URL": {
                      "isOptional": false,
                      "description": "Ingest server that hands out monitors and receives results.",
                      "defaultValue": "${{private-location.INGEST_URL}}"
                    }
                  }
                },
                "f3963f80-5bb8-414b-84db-86627bd2aa65": {
                  "icon": "https://cdn.simpleicons.org/turso",
                  "name": "libsql",
                  "deploy": {
                    "restartPolicyType": "ALWAYS"
                  },
                  "source": {
                    "image": "ghcr.io/tursodatabase/libsql-server@sha256:6dd3eb276d9d3604e4a48ac4a999a2e267814732d57d7e94c04ba71482333a67"
                  },
                  "variables": {
                    "SQLD_NODE": {
                      "isOptional": false,
                      "description": "Run as a standalone primary.",
                      "defaultValue": "primary"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "URL the other services use. Private network only: libSQL has no auth here, never give it a public domain.",
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:8080"
                    },
                    "SQLD_HTTP_LISTEN_ADDR": {
                      "isOptional": false,
                      "description": "Listen on IPv6 too (Railway's private network is IPv6).",
                      "defaultValue": "[::]:8080"
                    },
                    "SQLD_MAX_CONCURRENT_REQUESTS": {
                      "isOptional": false,
                      "description": "From upstream docker-compose.yaml.",
                      "defaultValue": "1024"
                    },
                    "SQLD_MAX_CONCURRENT_CONNECTIONS": {
                      "isOptional": false,
                      "description": "From upstream docker-compose.yaml.",
                      "defaultValue": "512"
                    }
                  },
                  "volumeMounts": {
                    "dcb9b130-f640-49df-9467-ac77e56f2dca": {
                      "mountPath": "/var/lib/sqld"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "status-page",
      "method": "GET",
      "path": "/api/health",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 14,
    "needs_volume": true
  },
  "generated_at": "2026-10-25T22:14:45.812Z",
  "generator_version": "0.1.0"
}
