{
  "manifest_version": "1.0.0",
  "template": {
    "id": "633167cb-9652-40b7-83cf-00bd11f624ea",
    "slug": "deploy-supabase-firebase-alternative",
    "name": "Supabase vs Firebase",
    "description": "Open-source Postgres backend vs Google Firebase",
    "url": "https://railway.com/deploy/deploy-supabase-firebase-alternative",
    "upstream": {
      "image": "ghcr.io/onepush-dev/supabase-gateway:2026.10@sha256:d7489fa86d5ea212547271e2fc5d29bcf8d04b8d7ab3c4f5db026feacee7fed9"
    }
  },
  "services": [
    {
      "name": "studio",
      "source": {
        "image": "ghcr.io/onepush-dev/supabase-studio:2026.10@sha256:38b4da0f64779557c9e45ddaad54fb6fc13c43342b6a3735ebc4caa3f1d38134"
      },
      "needs_volume": true,
      "volume_mount_path": "/app/snippets",
      "http": false
    },
    {
      "name": "realtime",
      "source": {
        "image": "supabase/realtime:v2.134.10@sha256:cbcc6a7986fc28b6dcffa798b077d5fb9c69cd25500371ab49147a86d7edbb03"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "auth",
      "source": {
        "image": "supabase/gotrue:v2.196.0@sha256:c0c25187a6b835e65a6f6e6c6b39d090e832d40e6de5186f2c038e0411944232"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "meta",
      "source": {
        "image": "supabase/postgres-meta:v0.99.0@sha256:9a079ac1c94d89629262822a4bd1902d5b1be4adb464e5a0a8fd078aaed72158"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "db",
      "source": {
        "image": "ghcr.io/onepush-dev/supabase-db:2026.10@sha256:4936b9cfac0cb3899f7635423af568aa6c2274f9604aa3fcad0a54fd055ca1fc"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "storage",
      "source": {
        "image": "ghcr.io/onepush-dev/supabase-storage:2026.10@sha256:d9018525e8cd4f28844b9392f22c9be52c3c4639d28c3f1afe123dca2a91c8c5"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/storage",
      "http": false
    },
    {
      "name": "supabase",
      "source": {
        "image": "ghcr.io/onepush-dev/supabase-gateway:2026.10@sha256:d7489fa86d5ea212547271e2fc5d29bcf8d04b8d7ab3c4f5db026feacee7fed9"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "rest",
      "source": {
        "image": "postgrest/postgrest:v14.17@sha256:c9dc201e555f5d8e37e7f39cdd4df0229774996e213bfd7de8d10ac609030f2c"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "functions",
      "source": {
        "image": "ghcr.io/onepush-dev/supabase-functions:2026.10@sha256:1b6159cc1316fd11f26176cd7a0483e42dffb7642a2e20c1a816b07e357a8063"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "studio",
      "description": "Studio listen port (3000).",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "HOSTNAME",
      "service": "studio",
      "description": "Bind address; :: listens on IPv6.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "JWT_SECRET",
      "service": "studio",
      "description": "Shared JWT secret from the gateway.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "studio",
      "description": "Database name.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "SUPABASE_URL",
      "service": "studio",
      "description": "Private URL of the gateway.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_HOST",
      "service": "studio",
      "description": "Private host of the db service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_PORT",
      "service": "studio",
      "description": "Postgres port.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "AUTH_JWT_SECRET",
      "service": "studio",
      "description": "JWT secret for auth calls from Studio.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGRST_DB_SCHEMAS",
      "service": "studio",
      "description": "Schemas shown as exposed in the API settings.",
      "secret": false,
      "strategy": "default",
      "default": "public,storage,graphql_public"
    },
    {
      "key": "PGRST_DB_MAX_ROWS",
      "service": "studio",
      "description": "Max rows shown in API settings.",
      "secret": false,
      "strategy": "default",
      "default": "1000"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "studio",
      "description": "Postgres password from the db service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PG_META_CRYPTO_KEY",
      "service": "studio",
      "description": "Must match CRYPTO_KEY on meta.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STUDIO_PG_META_URL",
      "service": "studio",
      "description": "Private URL of the meta service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SUPABASE_PUBLIC_URL",
      "service": "studio",
      "description": "Public URL of this project.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DEFAULT_PROJECT_NAME",
      "service": "studio",
      "description": "Project name shown in Studio.",
      "secret": false,
      "strategy": "default",
      "default": "Default Project"
    },
    {
      "key": "POSTGRES_USER_READ_WRITE",
      "service": "studio",
      "description": "Role Studio uses for queries.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "DEFAULT_ORGANIZATION_NAME",
      "service": "studio",
      "description": "Organization name shown in Studio.",
      "secret": false,
      "strategy": "default",
      "default": "Default Organization"
    },
    {
      "key": "ENABLED_FEATURES_LOGS_ALL",
      "service": "studio",
      "description": "Logs pages; off (no analytics service).",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGRST_DB_EXTRA_SEARCH_PATH",
      "service": "studio",
      "description": "Extra search path shown in API settings.",
      "secret": false,
      "strategy": "default",
      "default": "public"
    },
    {
      "key": "SNIPPETS_MANAGEMENT_FOLDER",
      "service": "studio",
      "description": "Saved SQL snippets folder on the volume.",
      "secret": false,
      "strategy": "default",
      "default": "/app/snippets"
    },
    {
      "key": "EDGE_FUNCTIONS_MANAGEMENT_FOLDER",
      "service": "studio",
      "description": "Edge function files folder on the volume.",
      "secret": false,
      "strategy": "default",
      "default": "/app/edge-functions"
    },
    {
      "key": "PORT",
      "service": "realtime",
      "description": "Realtime listen port (4000).",
      "secret": false,
      "strategy": "default",
      "default": "4000"
    },
    {
      "key": "DB_HOST",
      "service": "realtime",
      "description": "Private host of the db service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_NAME",
      "service": "realtime",
      "description": "Database name.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "DB_PORT",
      "service": "realtime",
      "description": "Postgres port.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "DB_USER",
      "service": "realtime",
      "description": "Postgres role for realtime.",
      "secret": false,
      "strategy": "default",
      "default": "supabase_admin"
    },
    {
      "key": "APP_NAME",
      "service": "realtime",
      "description": "Node name (realtime).",
      "secret": false,
      "strategy": "default",
      "default": "realtime"
    },
    {
      "key": "DNS_NODES",
      "service": "realtime",
      "description": "Cluster DNS discovery; empty for one node.",
      "secret": false,
      "strategy": "default",
      "default": "''"
    },
    {
      "key": "DB_ENC_KEY",
      "service": "realtime",
      "description": "Encryption key for stored tenant secrets; generated.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "DB_PASSWORD",
      "service": "realtime",
      "description": "Postgres password from the db service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RUN_JANITOR",
      "service": "realtime",
      "description": "Run the cleanup janitor.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RLIMIT_NOFILE",
      "service": "realtime",
      "description": "Open file limit.",
      "secret": false,
      "strategy": "default",
      "default": "10000"
    },
    {
      "key": "API_JWT_SECRET",
      "service": "realtime",
      "description": "Shared JWT secret from the gateway.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SEED_SELF_HOST",
      "service": "realtime",
      "description": "Seed the default self-hosted tenant on boot.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SECRET_KEY_BASE",
      "service": "realtime",
      "description": "Phoenix secret for signing; generated.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "METRICS_JWT_SECRET",
      "service": "realtime",
      "description": "JWT secret for the metrics endpoint.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_AFTER_CONNECT_QUERY",
      "service": "realtime",
      "description": "Sets the _realtime search path on connect.",
      "secret": false,
      "strategy": "default",
      "default": "SET search_path TO _realtime"
    },
    {
      "key": "DISABLE_HEALTHCHECK_LOGGING",
      "service": "realtime",
      "description": "Hide health check lines in logs.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PORT",
      "service": "auth",
      "description": "Auth listen port (9999).",
      "secret": false,
      "strategy": "default",
      "default": "9999"
    },
    {
      "key": "GOTRUE_JWT_AUD",
      "service": "auth",
      "description": "JWT audience claim.",
      "secret": false,
      "strategy": "default",
      "default": "authenticated"
    },
    {
      "key": "GOTRUE_JWT_EXP",
      "service": "auth",
      "description": "Access token lifetime in seconds.",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "GOTRUE_API_HOST",
      "service": "auth",
      "description": "Bind address; :: listens on IPv6 for Railway.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "GOTRUE_API_PORT",
      "service": "auth",
      "description": "Auth API port (9999).",
      "secret": false,
      "strategy": "default",
      "default": "9999"
    },
    {
      "key": "GOTRUE_SITE_URL",
      "service": "auth",
      "description": "Your app URL; default redirect after sign-in.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "API_EXTERNAL_URL",
      "service": "auth",
      "description": "Public URL used in auth emails and redirects.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "GOTRUE_DB_DRIVER",
      "service": "auth",
      "description": "Database driver (postgres).",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "GOTRUE_SMTP_PORT",
      "service": "auth",
      "description": "SMTP server port.",
      "secret": false,
      "strategy": "default",
      "default": "587"
    },
    {
      "key": "GOTRUE_JWT_ISSUER",
      "service": "auth",
      "description": "JWT issuer claim.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "GOTRUE_JWT_SECRET",
      "service": "auth",
      "description": "Shared JWT secret from the gateway.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_DISABLE_SIGNUP",
      "service": "auth",
      "description": "Set true to block new sign-ups.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "GOTRUE_DB_DATABASE_URL",
      "service": "auth",
      "description": "Postgres connection for the auth admin role.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "GOTRUE_JWT_ADMIN_ROLES",
      "service": "auth",
      "description": "Roles allowed to use the admin API.",
      "secret": false,
      "strategy": "default",
      "default": "service_role"
    },
    {
      "key": "GOTRUE_SMS_AUTOCONFIRM",
      "service": "auth",
      "description": "Skip SMS confirmation.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "GOTRUE_SMTP_ADMIN_EMAIL",
      "service": "auth",
      "description": "From address for auth emails.",
      "secret": false,
      "strategy": "default",
      "default": "admin@example.com"
    },
    {
      "key": "GOTRUE_SMTP_SENDER_NAME",
      "service": "auth",
      "description": "Sender name on auth emails.",
      "secret": false,
      "strategy": "default",
      "default": "Supabase"
    },
    {
      "key": "GOTRUE_MAILER_AUTOCONFIRM",
      "service": "auth",
      "description": "Skip email confirmation; set false once SMTP works.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "GOTRUE_EXTERNAL_EMAIL_ENABLED",
      "service": "auth",
      "description": "Allow email and password sign-in.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "GOTRUE_EXTERNAL_PHONE_ENABLED",
      "service": "auth",
      "description": "Allow phone sign-in (needs an SMS provider).",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "GOTRUE_JWT_DEFAULT_GROUP_NAME",
      "service": "auth",
      "description": "Default role for signed-in users.",
      "secret": false,
      "strategy": "default",
      "default": "authenticated"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_INVITE",
      "service": "auth",
      "description": "Path used in invite links.",
      "secret": false,
      "strategy": "default",
      "default": "/auth/v1/verify"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_RECOVERY",
      "service": "auth",
      "description": "Path used in password recovery links.",
      "secret": false,
      "strategy": "default",
      "default": "/auth/v1/verify"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_CONFIRMATION",
      "service": "auth",
      "description": "Path used in confirmation links.",
      "secret": false,
      "strategy": "default",
      "default": "/auth/v1/verify"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE",
      "service": "auth",
      "description": "Path used in email change links.",
      "secret": false,
      "strategy": "default",
      "default": "/auth/v1/verify"
    },
    {
      "key": "GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED",
      "service": "auth",
      "description": "Allow anonymous sign-ins.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PORT",
      "service": "meta",
      "description": "Service port used by Railway.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "CRYPTO_KEY",
      "service": "meta",
      "description": "Encrypts saved connection strings; must match studio.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "PG_META_PORT",
      "service": "meta",
      "description": "postgres-meta port (8080).",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "PG_META_DB_HOST",
      "service": "meta",
      "description": "Private host of the db service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PG_META_DB_NAME",
      "service": "meta",
      "description": "Database name.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "PG_META_DB_PORT",
      "service": "meta",
      "description": "Postgres port.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "PG_META_DB_USER",
      "service": "meta",
      "description": "Postgres role for postgres-meta.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "PG_META_DB_PASSWORD",
      "service": "meta",
      "description": "Postgres password from the db service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATA",
      "service": "db",
      "description": "Data directory on the volume; keep the volume attached.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGPORT",
      "service": "db",
      "description": "Postgres port for psql tools.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "JWT_EXP",
      "service": "db",
      "description": "JWT expiry in seconds, written into database settings.",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "PGDATABASE",
      "service": "db",
      "description": "Default database for psql tools.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "PGPASSWORD",
      "service": "db",
      "description": "Same password for psql tools inside the container.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "db",
      "description": "Main database name (postgres).",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "POSTGRES_HOST",
      "service": "db",
      "description": "Unix socket dir used by init scripts.",
      "secret": false,
      "strategy": "default",
      "default": "/var/run/postgresql"
    },
    {
      "key": "POSTGRES_PORT",
      "service": "db",
      "description": "Postgres port (5432).",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "PGSODIUM_ROOT_KEY",
      "service": "db",
      "description": "pgsodium root key, generated; never change after first boot.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "db",
      "description": "Postgres superuser password, generated per deploy.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "storage",
      "description": "Storage listen port (5000).",
      "secret": false,
      "strategy": "default",
      "default": "5000"
    },
    {
      "key": "REGION",
      "service": "storage",
      "description": "Region label for the storage API.",
      "secret": false,
      "strategy": "default",
      "default": "local"
    },
    {
      "key": "TENANT_ID",
      "service": "storage",
      "description": "Tenant id for self-hosted mode.",
      "secret": false,
      "strategy": "default",
      "default": "stub"
    },
    {
      "key": "JWT_SECRET",
      "service": "storage",
      "description": "Shared JWT secret from the gateway.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_PORT",
      "service": "storage",
      "description": "Storage API port.",
      "secret": false,
      "strategy": "default",
      "default": "5000"
    },
    {
      "key": "DATABASE_URL",
      "service": "storage",
      "description": "Postgres connection for the storage admin role.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGREST_URL",
      "service": "storage",
      "description": "Private URL of the rest service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AUTH_JWT_SECRET",
      "service": "storage",
      "description": "JWT secret used to verify user tokens.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "FILE_SIZE_LIMIT",
      "service": "storage",
      "description": "Max upload size in bytes (50 MB).",
      "secret": false,
      "strategy": "default",
      "default": "52428800"
    },
    {
      "key": "STORAGE_BACKEND",
      "service": "storage",
      "description": "Storage backend (file, on the volume).",
      "secret": false,
      "strategy": "default",
      "default": "file"
    },
    {
      "key": "GLOBAL_S3_BUCKET",
      "service": "storage",
      "description": "Bucket name used by the storage backend.",
      "secret": false,
      "strategy": "default",
      "default": "stub"
    },
    {
      "key": "STORAGE_PUBLIC_URL",
      "service": "storage",
      "description": "Public URL for storage links.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "FILE_STORAGE_BACKEND_PATH",
      "service": "storage",
      "description": "Files directory on the volume.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/storage"
    },
    {
      "key": "S3_PROTOCOL_ACCESS_KEY_ID",
      "service": "storage",
      "description": "Access key for the S3-compatible endpoint.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ENABLE_IMAGE_TRANSFORMATION",
      "service": "storage",
      "description": "Image resizing; off (no imgproxy service).",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "S3_PROTOCOL_ACCESS_KEY_SECRET",
      "service": "storage",
      "description": "Secret for the S3-compatible endpoint.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "REQUEST_ALLOW_X_FORWARDED_PATH",
      "service": "storage",
      "description": "Trust the forwarded path from the gateway.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PORT",
      "service": "supabase",
      "description": "Gateway listen port and public target (8000).",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "AUTH_HOST",
      "service": "supabase",
      "description": "Private host of the auth service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "META_HOST",
      "service": "supabase",
      "description": "Private host of the meta service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REST_HOST",
      "service": "supabase",
      "description": "Private host of the rest service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "JWT_SECRET",
      "service": "supabase",
      "description": "Shared JWT secret; anon and service_role keys derive from it.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "STUDIO_HOST",
      "service": "supabase",
      "description": "Private host of the studio service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "STORAGE_HOST",
      "service": "supabase",
      "description": "Private host of the storage service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REALTIME_HOST",
      "service": "supabase",
      "description": "Private host of the realtime service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "FUNCTIONS_HOST",
      "service": "supabase",
      "description": "Private host of the functions service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DASHBOARD_PASSWORD",
      "service": "supabase",
      "description": "Studio basic-auth password, generated per deploy.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DASHBOARD_USERNAME",
      "service": "supabase",
      "description": "Studio basic-auth username.",
      "secret": false,
      "strategy": "default",
      "default": "supabase"
    },
    {
      "key": "SUPABASE_PUBLIC_URL",
      "service": "supabase",
      "description": "Public HTTPS URL of this gateway.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PORT",
      "service": "rest",
      "description": "Service port used by Railway.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "PGRST_DB_URI",
      "service": "rest",
      "description": "Postgres connection for the authenticator role.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGRST_DB_SCHEMAS",
      "service": "rest",
      "description": "Schemas exposed over the REST API.",
      "secret": false,
      "strategy": "default",
      "default": "public,storage,graphql_public"
    },
    {
      "key": "PGRST_JWT_SECRET",
      "service": "rest",
      "description": "Shared JWT secret from the gateway.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGRST_DB_MAX_ROWS",
      "service": "rest",
      "description": "Max rows returned per request.",
      "secret": false,
      "strategy": "default",
      "default": "1000"
    },
    {
      "key": "PGRST_SERVER_HOST",
      "service": "rest",
      "description": "Bind address for PostgREST.",
      "secret": false,
      "strategy": "default",
      "default": "*"
    },
    {
      "key": "PGRST_SERVER_PORT",
      "service": "rest",
      "description": "PostgREST API port (3000).",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "PGRST_DB_ANON_ROLE",
      "service": "rest",
      "description": "Role used for requests with the anon key.",
      "secret": false,
      "strategy": "default",
      "default": "anon"
    },
    {
      "key": "PGRST_ADMIN_SERVER_PORT",
      "service": "rest",
      "description": "PostgREST admin and health port.",
      "secret": false,
      "strategy": "default",
      "default": "3001"
    },
    {
      "key": "PGRST_DB_USE_LEGACY_GUCS",
      "service": "rest",
      "description": "Use legacy request settings; keep false.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGRST_APP_SETTINGS_JWT_EXP",
      "service": "rest",
      "description": "JWT expiry exposed to SQL as an app setting.",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "PGRST_DB_EXTRA_SEARCH_PATH",
      "service": "rest",
      "description": "Extra schemas on the search path.",
      "secret": false,
      "strategy": "default",
      "default": "public"
    },
    {
      "key": "PORT",
      "service": "functions",
      "description": "Edge runtime port (9000).",
      "secret": false,
      "strategy": "default",
      "default": "9000"
    },
    {
      "key": "JWT_SECRET",
      "service": "functions",
      "description": "Shared JWT secret from the gateway.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "VERIFY_JWT",
      "service": "functions",
      "description": "Require a valid JWT to call functions.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "SUPABASE_URL",
      "service": "functions",
      "description": "Private URL of the gateway for function code.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SUPABASE_DB_URL",
      "service": "functions",
      "description": "Postgres connection for function code.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SUPABASE_PUBLIC_URL",
      "service": "functions",
      "description": "Public URL of this project.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "SUPABASE_SECRET_KEYS",
      "service": "functions",
      "description": "Secret keys passed to functions.",
      "secret": true,
      "strategy": "default",
      "default": "{\"default\":\"\"}"
    },
    {
      "key": "SUPABASE_PUBLISHABLE_KEYS",
      "service": "functions",
      "description": "Publishable keys passed to functions.",
      "secret": true,
      "strategy": "default",
      "default": "{\"default\":\"\"}"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "deploy-supabase-firebase-alternative"
      }
    },
    "cli": "railway deploy --template deploy-supabase-firebase-alternative",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "633167cb-9652-40b7-83cf-00bd11f624ea",
            "serializedConfig": {
              "services": {
                "14d246b3-766f-4c41-9d90-645a34f39d05": {
                  "icon": null,
                  "name": "studio",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/api/platform/profile",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/onepush-dev/supabase-studio:2026.10@sha256:38b4da0f64779557c9e45ddaad54fb6fc13c43342b6a3735ebc4caa3f1d38134"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Studio listen port (3000).",
                      "defaultValue": "3000"
                    },
                    "HOSTNAME": {
                      "isOptional": false,
                      "description": "Bind address; :: listens on IPv6.",
                      "defaultValue": "::"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Shared JWT secret from the gateway.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Database name.",
                      "defaultValue": "postgres"
                    },
                    "SUPABASE_URL": {
                      "isOptional": false,
                      "description": "Private URL of the gateway.",
                      "defaultValue": "http://${{supabase.RAILWAY_PRIVATE_DOMAIN}}:8000"
                    },
                    "POSTGRES_HOST": {
                      "isOptional": false,
                      "description": "Private host of the db service.",
                      "defaultValue": "${{db.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "POSTGRES_PORT": {
                      "isOptional": false,
                      "description": "Postgres port.",
                      "defaultValue": "5432"
                    },
                    "AUTH_JWT_SECRET": {
                      "isOptional": false,
                      "description": "JWT secret for auth calls from Studio.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "PGRST_DB_SCHEMAS": {
                      "isOptional": false,
                      "description": "Schemas shown as exposed in the API settings.",
                      "defaultValue": "public,storage,graphql_public"
                    },
                    "PGRST_DB_MAX_ROWS": {
                      "isOptional": false,
                      "description": "Max rows shown in API settings.",
                      "defaultValue": "1000"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password from the db service.",
                      "defaultValue": "${{db.POSTGRES_PASSWORD}}"
                    },
                    "PG_META_CRYPTO_KEY": {
                      "isOptional": false,
                      "description": "Must match CRYPTO_KEY on meta.",
                      "defaultValue": "${{meta.CRYPTO_KEY}}"
                    },
                    "STUDIO_PG_META_URL": {
                      "isOptional": false,
                      "description": "Private URL of the meta service.",
                      "defaultValue": "http://${{meta.RAILWAY_PRIVATE_DOMAIN}}:8080"
                    },
                    "SUPABASE_PUBLIC_URL": {
                      "isOptional": false,
                      "description": "Public URL of this project.",
                      "defaultValue": "https://${{supabase.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DEFAULT_PROJECT_NAME": {
                      "isOptional": false,
                      "description": "Project name shown in Studio.",
                      "defaultValue": "Default Project"
                    },
                    "POSTGRES_USER_READ_WRITE": {
                      "isOptional": false,
                      "description": "Role Studio uses for queries.",
                      "defaultValue": "postgres"
                    },
                    "DEFAULT_ORGANIZATION_NAME": {
                      "isOptional": false,
                      "description": "Organization name shown in Studio.",
                      "defaultValue": "Default Organization"
                    },
                    "ENABLED_FEATURES_LOGS_ALL": {
                      "isOptional": false,
                      "description": "Logs pages; off (no analytics service).",
                      "defaultValue": "false"
                    },
                    "PGRST_DB_EXTRA_SEARCH_PATH": {
                      "isOptional": false,
                      "description": "Extra search path shown in API settings.",
                      "defaultValue": "public"
                    },
                    "SNIPPETS_MANAGEMENT_FOLDER": {
                      "isOptional": false,
                      "description": "Saved SQL snippets folder on the volume.",
                      "defaultValue": "/app/snippets"
                    },
                    "EDGE_FUNCTIONS_MANAGEMENT_FOLDER": {
                      "isOptional": false,
                      "description": "Edge function files folder on the volume.",
                      "defaultValue": "/app/edge-functions"
                    }
                  },
                  "volumeMounts": {
                    "14d246b3-766f-4c41-9d90-645a34f39d05": {
                      "mountPath": "/app/snippets"
                    }
                  }
                },
                "1924c9b5-233e-472f-9733-9c3c51f102a3": {
                  "icon": null,
                  "name": "realtime",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "supabase/realtime:v2.134.10@sha256:cbcc6a7986fc28b6dcffa798b077d5fb9c69cd25500371ab49147a86d7edbb03"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Realtime listen port (4000).",
                      "defaultValue": "4000"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Private host of the db service.",
                      "defaultValue": "${{db.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DB_NAME": {
                      "isOptional": false,
                      "description": "Database name.",
                      "defaultValue": "postgres"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Postgres port.",
                      "defaultValue": "5432"
                    },
                    "DB_USER": {
                      "isOptional": false,
                      "description": "Postgres role for realtime.",
                      "defaultValue": "supabase_admin"
                    },
                    "APP_NAME": {
                      "isOptional": false,
                      "description": "Node name (realtime).",
                      "defaultValue": "realtime"
                    },
                    "DNS_NODES": {
                      "isOptional": false,
                      "description": "Cluster DNS discovery; empty for one node.",
                      "defaultValue": "''"
                    },
                    "DB_ENC_KEY": {
                      "isOptional": false,
                      "description": "Encryption key for stored tenant secrets; generated.",
                      "defaultValue": "{{DB_ENC_KEY}}"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password from the db service.",
                      "defaultValue": "${{db.POSTGRES_PASSWORD}}"
                    },
                    "RUN_JANITOR": {
                      "isOptional": false,
                      "description": "Run the cleanup janitor.",
                      "defaultValue": "true"
                    },
                    "RLIMIT_NOFILE": {
                      "isOptional": false,
                      "description": "Open file limit.",
                      "defaultValue": "10000"
                    },
                    "API_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Shared JWT secret from the gateway.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "SEED_SELF_HOST": {
                      "isOptional": false,
                      "description": "Seed the default self-hosted tenant on boot.",
                      "defaultValue": "true"
                    },
                    "SECRET_KEY_BASE": {
                      "isOptional": false,
                      "description": "Phoenix secret for signing; generated.",
                      "defaultValue": "{{SECRET_KEY_BASE}}"
                    },
                    "METRICS_JWT_SECRET": {
                      "isOptional": false,
                      "description": "JWT secret for the metrics endpoint.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "DB_AFTER_CONNECT_QUERY": {
                      "isOptional": false,
                      "description": "Sets the _realtime search path on connect.",
                      "defaultValue": "SET search_path TO _realtime"
                    },
                    "DISABLE_HEALTHCHECK_LOGGING": {
                      "isOptional": false,
                      "description": "Hide health check lines in logs.",
                      "defaultValue": "true"
                    }
                  }
                },
                "2d9866af-f702-4246-9281-0b41b72a4b00": {
                  "icon": null,
                  "name": "auth",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "supabase/gotrue:v2.196.0@sha256:c0c25187a6b835e65a6f6e6c6b39d090e832d40e6de5186f2c038e0411944232"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Auth listen port (9999).",
                      "defaultValue": "9999"
                    },
                    "GOTRUE_JWT_AUD": {
                      "isOptional": false,
                      "description": "JWT audience claim.",
                      "defaultValue": "authenticated"
                    },
                    "GOTRUE_JWT_EXP": {
                      "isOptional": false,
                      "description": "Access token lifetime in seconds.",
                      "defaultValue": "3600"
                    },
                    "GOTRUE_API_HOST": {
                      "isOptional": false,
                      "description": "Bind address; :: listens on IPv6 for Railway.",
                      "defaultValue": "::"
                    },
                    "GOTRUE_API_PORT": {
                      "isOptional": false,
                      "description": "Auth API port (9999).",
                      "defaultValue": "9999"
                    },
                    "GOTRUE_SITE_URL": {
                      "isOptional": false,
                      "description": "Your app URL; default redirect after sign-in.",
                      "defaultValue": "https://${{supabase.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "API_EXTERNAL_URL": {
                      "isOptional": false,
                      "description": "Public URL used in auth emails and redirects.",
                      "defaultValue": "https://${{supabase.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "GOTRUE_DB_DRIVER": {
                      "isOptional": false,
                      "description": "Database driver (postgres).",
                      "defaultValue": "postgres"
                    },
                    "GOTRUE_SMTP_PORT": {
                      "isOptional": false,
                      "description": "SMTP server port.",
                      "defaultValue": "587"
                    },
                    "GOTRUE_JWT_ISSUER": {
                      "isOptional": false,
                      "description": "JWT issuer claim.",
                      "defaultValue": "https://${{supabase.RAILWAY_PUBLIC_DOMAIN}}/auth/v1"
                    },
                    "GOTRUE_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Shared JWT secret from the gateway.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "GOTRUE_DISABLE_SIGNUP": {
                      "isOptional": false,
                      "description": "Set true to block new sign-ups.",
                      "defaultValue": "false"
                    },
                    "GOTRUE_DB_DATABASE_URL": {
                      "isOptional": false,
                      "description": "Postgres connection for the auth admin role.",
                      "defaultValue": "postgres://supabase_auth_admin:${{db.POSTGRES_PASSWORD}}@${{db.RAILWAY_PRIVATE_DOMAIN}}:5432/postgres"
                    },
                    "GOTRUE_JWT_ADMIN_ROLES": {
                      "isOptional": false,
                      "description": "Roles allowed to use the admin API.",
                      "defaultValue": "service_role"
                    },
                    "GOTRUE_SMS_AUTOCONFIRM": {
                      "isOptional": false,
                      "description": "Skip SMS confirmation.",
                      "defaultValue": "false"
                    },
                    "GOTRUE_SMTP_ADMIN_EMAIL": {
                      "isOptional": false,
                      "description": "From address for auth emails.",
                      "defaultValue": "admin@example.com"
                    },
                    "GOTRUE_SMTP_SENDER_NAME": {
                      "isOptional": false,
                      "description": "Sender name on auth emails.",
                      "defaultValue": "Supabase"
                    },
                    "GOTRUE_MAILER_AUTOCONFIRM": {
                      "isOptional": false,
                      "description": "Skip email confirmation; set false once SMTP works.",
                      "defaultValue": "true"
                    },
                    "GOTRUE_EXTERNAL_EMAIL_ENABLED": {
                      "isOptional": false,
                      "description": "Allow email and password sign-in.",
                      "defaultValue": "true"
                    },
                    "GOTRUE_EXTERNAL_PHONE_ENABLED": {
                      "isOptional": false,
                      "description": "Allow phone sign-in (needs an SMS provider).",
                      "defaultValue": "false"
                    },
                    "GOTRUE_JWT_DEFAULT_GROUP_NAME": {
                      "isOptional": false,
                      "description": "Default role for signed-in users.",
                      "defaultValue": "authenticated"
                    },
                    "GOTRUE_MAILER_URLPATHS_INVITE": {
                      "isOptional": false,
                      "description": "Path used in invite links.",
                      "defaultValue": "/auth/v1/verify"
                    },
                    "GOTRUE_MAILER_URLPATHS_RECOVERY": {
                      "isOptional": false,
                      "description": "Path used in password recovery links.",
                      "defaultValue": "/auth/v1/verify"
                    },
                    "GOTRUE_MAILER_URLPATHS_CONFIRMATION": {
                      "isOptional": false,
                      "description": "Path used in confirmation links.",
                      "defaultValue": "/auth/v1/verify"
                    },
                    "GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE": {
                      "isOptional": false,
                      "description": "Path used in email change links.",
                      "defaultValue": "/auth/v1/verify"
                    },
                    "GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED": {
                      "isOptional": false,
                      "description": "Allow anonymous sign-ins.",
                      "defaultValue": "false"
                    }
                  }
                },
                "4dc012c1-3089-4555-999a-d490ae36385d": {
                  "icon": null,
                  "name": "meta",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/health",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "supabase/postgres-meta:v0.99.0@sha256:9a079ac1c94d89629262822a4bd1902d5b1be4adb464e5a0a8fd078aaed72158"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Service port used by Railway.",
                      "defaultValue": "8080"
                    },
                    "CRYPTO_KEY": {
                      "isOptional": false,
                      "description": "Encrypts saved connection strings; must match studio.",
                      "defaultValue": "{{CRYPTO_KEY}}"
                    },
                    "PG_META_PORT": {
                      "isOptional": false,
                      "description": "postgres-meta port (8080).",
                      "defaultValue": "8080"
                    },
                    "PG_META_DB_HOST": {
                      "isOptional": false,
                      "description": "Private host of the db service.",
                      "defaultValue": "${{db.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PG_META_DB_NAME": {
                      "isOptional": false,
                      "description": "Database name.",
                      "defaultValue": "postgres"
                    },
                    "PG_META_DB_PORT": {
                      "isOptional": false,
                      "description": "Postgres port.",
                      "defaultValue": "5432"
                    },
                    "PG_META_DB_USER": {
                      "isOptional": false,
                      "description": "Postgres role for postgres-meta.",
                      "defaultValue": "postgres"
                    },
                    "PG_META_DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password from the db service.",
                      "defaultValue": "${{db.POSTGRES_PASSWORD}}"
                    }
                  }
                },
                "651deb5b-0efd-41dd-887f-25f4caabd0a2": {
                  "icon": null,
                  "name": "db",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/onepush-dev/supabase-db:2026.10@sha256:4936b9cfac0cb3899f7635423af568aa6c2274f9604aa3fcad0a54fd055ca1fc"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": false,
                      "description": "Data directory on the volume; keep the volume attached.",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGPORT": {
                      "isOptional": false,
                      "description": "Postgres port for psql tools.",
                      "defaultValue": "5432"
                    },
                    "JWT_EXP": {
                      "isOptional": false,
                      "description": "JWT expiry in seconds, written into database settings.",
                      "defaultValue": "3600"
                    },
                    "PGDATABASE": {
                      "isOptional": false,
                      "description": "Default database for psql tools.",
                      "defaultValue": "postgres"
                    },
                    "PGPASSWORD": {
                      "isOptional": false,
                      "description": "Same password for psql tools inside the container.",
                      "defaultValue": "${{POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Main database name (postgres).",
                      "defaultValue": "postgres"
                    },
                    "POSTGRES_HOST": {
                      "isOptional": false,
                      "description": "Unix socket dir used by init scripts.",
                      "defaultValue": "/var/run/postgresql"
                    },
                    "POSTGRES_PORT": {
                      "isOptional": false,
                      "description": "Postgres port (5432).",
                      "defaultValue": "5432"
                    },
                    "PGSODIUM_ROOT_KEY": {
                      "isOptional": false,
                      "description": "pgsodium root key, generated; never change after first boot.",
                      "defaultValue": "{{PGSODIUM_ROOT_KEY}}"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres superuser password, generated per deploy.",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "651deb5b-0efd-41dd-887f-25f4caabd0a2": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "99df4b3e-2232-4caa-8806-c227b136c9ca": {
                  "icon": null,
                  "name": "storage",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/status",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/onepush-dev/supabase-storage:2026.10@sha256:d9018525e8cd4f28844b9392f22c9be52c3c4639d28c3f1afe123dca2a91c8c5"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Storage listen port (5000).",
                      "defaultValue": "5000"
                    },
                    "REGION": {
                      "isOptional": false,
                      "description": "Region label for the storage API.",
                      "defaultValue": "local"
                    },
                    "TENANT_ID": {
                      "isOptional": false,
                      "description": "Tenant id for self-hosted mode.",
                      "defaultValue": "stub"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Shared JWT secret from the gateway.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "SERVER_PORT": {
                      "isOptional": false,
                      "description": "Storage API port.",
                      "defaultValue": "5000"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "Postgres connection for the storage admin role.",
                      "defaultValue": "postgres://supabase_storage_admin:${{db.POSTGRES_PASSWORD}}@${{db.RAILWAY_PRIVATE_DOMAIN}}:5432/postgres"
                    },
                    "POSTGREST_URL": {
                      "isOptional": false,
                      "description": "Private URL of the rest service.",
                      "defaultValue": "http://${{rest.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "AUTH_JWT_SECRET": {
                      "isOptional": false,
                      "description": "JWT secret used to verify user tokens.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "FILE_SIZE_LIMIT": {
                      "isOptional": false,
                      "description": "Max upload size in bytes (50 MB).",
                      "defaultValue": "52428800"
                    },
                    "STORAGE_BACKEND": {
                      "isOptional": false,
                      "description": "Storage backend (file, on the volume).",
                      "defaultValue": "file"
                    },
                    "GLOBAL_S3_BUCKET": {
                      "isOptional": false,
                      "description": "Bucket name used by the storage backend.",
                      "defaultValue": "stub"
                    },
                    "STORAGE_PUBLIC_URL": {
                      "isOptional": false,
                      "description": "Public URL for storage links.",
                      "defaultValue": "https://${{supabase.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "FILE_STORAGE_BACKEND_PATH": {
                      "isOptional": false,
                      "description": "Files directory on the volume.",
                      "defaultValue": "/var/lib/storage"
                    },
                    "S3_PROTOCOL_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Access key for the S3-compatible endpoint.",
                      "defaultValue": "{{S3_PROTOCOL_ACCESS_KEY_ID}}"
                    },
                    "ENABLE_IMAGE_TRANSFORMATION": {
                      "isOptional": false,
                      "description": "Image resizing; off (no imgproxy service).",
                      "defaultValue": "false"
                    },
                    "S3_PROTOCOL_ACCESS_KEY_SECRET": {
                      "isOptional": false,
                      "description": "Secret for the S3-compatible endpoint.",
                      "defaultValue": "{{S3_PROTOCOL_ACCESS_KEY_SECRET}}"
                    },
                    "REQUEST_ALLOW_X_FORWARDED_PATH": {
                      "isOptional": false,
                      "description": "Trust the forwarded path from the gateway.",
                      "defaultValue": "true"
                    }
                  },
                  "volumeMounts": {
                    "99df4b3e-2232-4caa-8806-c227b136c9ca": {
                      "mountPath": "/var/lib/storage"
                    }
                  }
                },
                "b574ee49-d736-4525-b3bb-283c0177e3eb": {
                  "icon": null,
                  "name": "supabase",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/onepush-dev/supabase-gateway:2026.10@sha256:d7489fa86d5ea212547271e2fc5d29bcf8d04b8d7ab3c4f5db026feacee7fed9"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Gateway listen port and public target (8000).",
                      "defaultValue": "8000"
                    },
                    "AUTH_HOST": {
                      "isOptional": false,
                      "description": "Private host of the auth service.",
                      "defaultValue": "${{auth.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "META_HOST": {
                      "isOptional": false,
                      "description": "Private host of the meta service.",
                      "defaultValue": "${{meta.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REST_HOST": {
                      "isOptional": false,
                      "description": "Private host of the rest service.",
                      "defaultValue": "${{rest.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Shared JWT secret; anon and service_role keys derive from it.",
                      "defaultValue": "{{JWT_SECRET}}"
                    },
                    "STUDIO_HOST": {
                      "isOptional": false,
                      "description": "Private host of the studio service.",
                      "defaultValue": "${{studio.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "STORAGE_HOST": {
                      "isOptional": false,
                      "description": "Private host of the storage service.",
                      "defaultValue": "${{storage.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REALTIME_HOST": {
                      "isOptional": false,
                      "description": "Private host of the realtime service.",
                      "defaultValue": "${{realtime.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "FUNCTIONS_HOST": {
                      "isOptional": false,
                      "description": "Private host of the functions service.",
                      "defaultValue": "${{functions.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DASHBOARD_PASSWORD": {
                      "isOptional": false,
                      "description": "Studio basic-auth password, generated per deploy.",
                      "defaultValue": "{{DASHBOARD_PASSWORD}}"
                    },
                    "DASHBOARD_USERNAME": {
                      "isOptional": false,
                      "description": "Studio basic-auth username.",
                      "defaultValue": "supabase"
                    },
                    "SUPABASE_PUBLIC_URL": {
                      "isOptional": false,
                      "description": "Public HTTPS URL of this gateway.",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8000": {
                        "port": 8000
                      }
                    }
                  }
                },
                "be6b558c-0ecb-4bae-b13f-04799f7090d7": {
                  "icon": null,
                  "name": "rest",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "postgrest/postgrest:v14.17@sha256:c9dc201e555f5d8e37e7f39cdd4df0229774996e213bfd7de8d10ac609030f2c"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Service port used by Railway.",
                      "defaultValue": "3000"
                    },
                    "PGRST_DB_URI": {
                      "isOptional": false,
                      "description": "Postgres connection for the authenticator role.",
                      "defaultValue": "postgres://authenticator:${{db.POSTGRES_PASSWORD}}@${{db.RAILWAY_PRIVATE_DOMAIN}}:5432/postgres"
                    },
                    "PGRST_DB_SCHEMAS": {
                      "isOptional": false,
                      "description": "Schemas exposed over the REST API.",
                      "defaultValue": "public,storage,graphql_public"
                    },
                    "PGRST_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Shared JWT secret from the gateway.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "PGRST_DB_MAX_ROWS": {
                      "isOptional": false,
                      "description": "Max rows returned per request.",
                      "defaultValue": "1000"
                    },
                    "PGRST_SERVER_HOST": {
                      "isOptional": false,
                      "description": "Bind address for PostgREST.",
                      "defaultValue": "*"
                    },
                    "PGRST_SERVER_PORT": {
                      "isOptional": false,
                      "description": "PostgREST API port (3000).",
                      "defaultValue": "3000"
                    },
                    "PGRST_DB_ANON_ROLE": {
                      "isOptional": false,
                      "description": "Role used for requests with the anon key.",
                      "defaultValue": "anon"
                    },
                    "PGRST_ADMIN_SERVER_PORT": {
                      "isOptional": false,
                      "description": "PostgREST admin and health port.",
                      "defaultValue": "3001"
                    },
                    "PGRST_DB_USE_LEGACY_GUCS": {
                      "isOptional": false,
                      "description": "Use legacy request settings; keep false.",
                      "defaultValue": "false"
                    },
                    "PGRST_APP_SETTINGS_JWT_EXP": {
                      "isOptional": false,
                      "description": "JWT expiry exposed to SQL as an app setting.",
                      "defaultValue": "3600"
                    },
                    "PGRST_DB_EXTRA_SEARCH_PATH": {
                      "isOptional": false,
                      "description": "Extra schemas on the search path.",
                      "defaultValue": "public"
                    }
                  }
                },
                "e33a984c-825c-45af-a371-a3d982bf566e": {
                  "icon": null,
                  "name": "functions",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/onepush-dev/supabase-functions:2026.10@sha256:1b6159cc1316fd11f26176cd7a0483e42dffb7642a2e20c1a816b07e357a8063"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Edge runtime port (9000).",
                      "defaultValue": "9000"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Shared JWT secret from the gateway.",
                      "defaultValue": "${{supabase.JWT_SECRET}}"
                    },
                    "VERIFY_JWT": {
                      "isOptional": false,
                      "description": "Require a valid JWT to call functions.",
                      "defaultValue": "false"
                    },
                    "SUPABASE_URL": {
                      "isOptional": false,
                      "description": "Private URL of the gateway for function code.",
                      "defaultValue": "http://${{supabase.RAILWAY_PRIVATE_DOMAIN}}:8000"
                    },
                    "SUPABASE_DB_URL": {
                      "isOptional": false,
                      "description": "Postgres connection for function code.",
                      "defaultValue": "postgresql://postgres:${{db.POSTGRES_PASSWORD}}@${{db.RAILWAY_PRIVATE_DOMAIN}}:5432/postgres"
                    },
                    "SUPABASE_PUBLIC_URL": {
                      "isOptional": false,
                      "description": "Public URL of this project.",
                      "defaultValue": "https://${{supabase.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "SUPABASE_SECRET_KEYS": {
                      "isOptional": false,
                      "description": "Secret keys passed to functions.",
                      "defaultValue": "{\"default\":\"\"}"
                    },
                    "SUPABASE_PUBLISHABLE_KEYS": {
                      "isOptional": false,
                      "description": "Publishable keys passed to functions.",
                      "defaultValue": "{\"default\":\"\"}"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 9,
    "needs_volume": true
  },
  "generated_at": "2026-10-17T04:14:47.046Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-10-17T02:38:32.745Z",
  "success_rate_30d": 0,
  "validation": {
    "last_run_id": "run_dc2b4786ec3f4520bd10",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": false,
        "detail": "SUCCESS,DEPLOYING,DEPLOYING,SUCCESS,SUCCESS,SUCCESS,SUCCESS,SUCCESS,CRASHED"
      }
    ]
  }
}
