{
  "manifest_version": "1.0.0",
  "template": {
    "id": "5e14ce66-9fb7-472e-ac44-15067d57cedc",
    "slug": "complete-supabase-nextjs-frontend",
    "name": "Complete Supabase + NextJS",
    "description": "\"PG On Rails\" | Self-hosted Supabase. Amazing developer experience.",
    "url": "https://railway.com/deploy/complete-supabase-nextjs-frontend",
    "upstream": {
      "repo_url": "https://github.com/BenIsenstein/pgonrails"
    }
  },
  "services": [
    {
      "name": "PostgREST",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Edge Functions",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Supabase Storage",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Postgres",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "tcp_ports": [
        5432
      ],
      "http": false
    },
    {
      "name": "PgBouncer",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "tcp_ports": [
        5432
      ],
      "http": false
    },
    {
      "name": "Kong",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "imgproxy",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Site",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "Supabase Realtime",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Postgres Meta",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Supabase Auth",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "MinIO",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "tcp_ports": [
        9000
      ],
      "http": true
    },
    {
      "name": "Supabase Studio",
      "source": {
        "repo": "https://github.com/BenIsenstein/pgonrails"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "PostgREST",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "PGRST_DB_URI",
      "service": "PostgREST",
      "description": "Private connection string for Postgres.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGRST_DB_SCHEMAS",
      "service": "PostgREST",
      "description": "Schemas within Postgres that PostgREST is permitted to expose via RESTful API.",
      "secret": false,
      "strategy": "default",
      "default": "public,storage,graphql_public"
    },
    {
      "key": "PGRST_JWT_SECRET",
      "service": "PostgREST",
      "description": "Project JWT secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGRST_DB_MAX_ROWS",
      "service": "PostgREST",
      "description": "Max number of rows returned by a request.",
      "secret": false,
      "strategy": "default",
      "default": "1000"
    },
    {
      "key": "PGRST_SERVER_HOST",
      "service": "PostgREST",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "PGRST_SERVER_PORT",
      "service": "PostgREST",
      "description": "The port that PostgREST listens at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGRST_DB_ANON_ROLE",
      "service": "PostgREST",
      "description": "Anon role used in JWTs.",
      "secret": false,
      "strategy": "default",
      "default": "anon"
    },
    {
      "key": "PGRST_DB_USE_LEGACY_GUCS",
      "service": "PostgREST",
      "description": "Whether to use legacy Grand Unified Scheme (GUC) variables. Keep set to \"false\".",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGRST_APP_SETTINGS_JWT_EXP",
      "service": "PostgREST",
      "description": "Time before refreshing sessions. Defaults to an hour.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGRST_DB_EXTRA_SEARCH_PATH",
      "service": "PostgREST",
      "description": "Extra schemas added to the search_path of every request.",
      "secret": false,
      "strategy": "default",
      "default": "public"
    },
    {
      "key": "PGRST_APP_SETTINGS_JWT_SECRET",
      "service": "PostgREST",
      "description": "Project JWT secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "Edge Functions",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "9000"
    },
    {
      "key": "JWT_SECRET",
      "service": "Edge Functions",
      "description": "Project JWT secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "VERIFY_JWT",
      "service": "Edge Functions",
      "description": "Whether to verify if a JWT is legit on every request.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "SUPABASE_URL",
      "service": "Edge Functions",
      "description": "Private url for Kong.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SUPABASE_DB_URL",
      "service": "Edge Functions",
      "description": "Private url for directly querying Postgres.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "EDGE_RUNTIME_PORT",
      "service": "Edge Functions",
      "description": "The port that Edge Functions will listen at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_ANON_KEY",
      "service": "Edge Functions",
      "description": "Project anon key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "EDGE_RUNTIME_LISTEN",
      "service": "Edge Functions",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "SUPABASE_SECRET_KEYS",
      "service": "Edge Functions",
      "description": "New opaque API keys",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_PUBLISHABLE_KEYS",
      "service": "Edge Functions",
      "description": "New opaque API keys",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_SERVICE_ROLE_KEY",
      "service": "Edge Functions",
      "description": "Project service role key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "Supabase Storage",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "5000"
    },
    {
      "key": "ANON_KEY",
      "service": "Supabase Storage",
      "description": "Project anon key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "TENANT_ID",
      "service": "Supabase Storage",
      "description": "Self-hosted storage tenant.",
      "secret": false,
      "strategy": "default",
      "default": "default-tenant"
    },
    {
      "key": "SERVER_HOST",
      "service": "Supabase Storage",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "SERVER_PORT",
      "service": "Supabase Storage",
      "description": "The port Supabase Storage listens at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVICE_KEY",
      "service": "Supabase Storage",
      "description": "Project service key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_URL",
      "service": "Supabase Storage",
      "description": "Postgres connection string.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_ANON_ROLE",
      "service": "Supabase Storage",
      "description": "DB anon role used in JWTs",
      "secret": false,
      "strategy": "default",
      "default": "anon"
    },
    {
      "key": "IMGPROXY_URL",
      "service": "Supabase Storage",
      "description": "Private url for imgproxy.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "TUS_URL_PATH",
      "service": "Supabase Storage",
      "description": "Resumable uploads url path.",
      "secret": false,
      "strategy": "default",
      "default": "/upload/resumable"
    },
    {
      "key": "DB_SUPER_USER",
      "service": "Supabase Storage",
      "description": "DB superuser role (also \"supabase_admin\")",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "POSTGREST_URL",
      "service": "Supabase Storage",
      "description": "Private url for PostgREST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "TUS_PART_SIZE",
      "service": "Supabase Storage",
      "description": "Resumable uploads part size bytes.",
      "secret": false,
      "strategy": "default",
      "default": "50"
    },
    {
      "key": "AUTH_JWT_SECRET",
      "service": "Supabase Storage",
      "description": "Project JWT secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_SERVICE_ROLE",
      "service": "Supabase Storage",
      "description": "DB service role used in JWTs",
      "secret": false,
      "strategy": "default",
      "default": "service_role"
    },
    {
      "key": "FILE_SIZE_LIMIT",
      "service": "Supabase Storage",
      "description": "File size",
      "secret": false,
      "strategy": "default",
      "default": "52428800"
    },
    {
      "key": "STORAGE_BACKEND",
      "service": "Supabase Storage",
      "description": "Storage backend. Can also be \"file\" but must be \"s3\" on Railway.",
      "secret": false,
      "strategy": "default",
      "default": "s3"
    },
    {
      "key": "DB_INSTALL_ROLES",
      "service": "Supabase Storage",
      "description": "Whether to install storage DB roles.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "Supabase Storage",
      "description": "S3 id.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_POOL_URL",
      "service": "Supabase Storage",
      "description": "PgBouncer connection string.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SERVER_ADMIN_PORT",
      "service": "Supabase Storage",
      "description": "The port to access Storage admin functions.",
      "secret": false,
      "strategy": "default",
      "default": "5001"
    },
    {
      "key": "STORAGE_S3_BUCKET",
      "service": "Supabase Storage",
      "description": "name of top-level bucket. objects are stored in a structure of <top-level-bucket>/<tenant>/<supabase-bucket>/<object>",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STORAGE_S3_REGION",
      "service": "Supabase Storage",
      "description": "S3 region doesn't matter for our self-hosted S3-compatible storage.",
      "secret": false,
      "strategy": "default",
      "default": "default-region"
    },
    {
      "key": "TUS_URL_EXPIRY_MS",
      "service": "Supabase Storage",
      "description": "Resumable uploads url expiry milliseconds.",
      "secret": false,
      "strategy": "default",
      "default": "3600000"
    },
    {
      "key": "AUTH_JWT_ALGORITHM",
      "service": "Supabase Storage",
      "description": "The algorithm used to sign JWTs.",
      "secret": false,
      "strategy": "default",
      "default": "HS256"
    },
    {
      "key": "STORAGE_S3_ENDPOINT",
      "service": "Supabase Storage",
      "description": "URL for S3-compatible storage.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "Supabase Storage",
      "description": "S3 secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_AUTHENTICATED_ROLE",
      "service": "Supabase Storage",
      "description": "DB role for logged-in users, used in JWTs",
      "secret": false,
      "strategy": "default",
      "default": "authenticated"
    },
    {
      "key": "STORAGE_S3_MAX_SOCKETS",
      "service": "Supabase Storage",
      "description": "Max socket connections with S3-compatible storage.",
      "secret": false,
      "strategy": "default",
      "default": "200"
    },
    {
      "key": "UPLOAD_FILE_SIZE_LIMIT",
      "service": "Supabase Storage",
      "description": "File size",
      "secret": false,
      "strategy": "default",
      "default": "524288000"
    },
    {
      "key": "IMGPROXY_REQUEST_TIMEOUT",
      "service": "Supabase Storage",
      "description": "imgproxy request timeout.",
      "secret": false,
      "strategy": "default",
      "default": "15"
    },
    {
      "key": "IMGPROXY_HTTP_MAX_SOCKETS",
      "service": "Supabase Storage",
      "description": "Max socket connections to imgproxy.",
      "secret": false,
      "strategy": "default",
      "default": "500"
    },
    {
      "key": "S3_PROTOCOL_ACCESS_KEY_ID",
      "service": "Supabase Storage",
      "description": "S3 id for storage's managing access to consumers",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "DB_ALLOW_MIGRATION_REFRESH",
      "service": "Supabase Storage",
      "description": "Refresh migration hashes on mismatch",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "DATABASE_CONNECTION_TIMEOUT",
      "service": "Supabase Storage",
      "description": "Timeout seconds for Postgres connections.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "STORAGE_S3_FORCE_PATH_STYLE",
      "service": "Supabase Storage",
      "description": "Use the path style to reference storage objects.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "IMAGE_TRANSFORMATION_ENABLED",
      "service": "Supabase Storage",
      "description": "Enable use of imgproxy.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "S3_PROTOCOL_ACCESS_KEY_SECRET",
      "service": "Supabase Storage",
      "description": "S3 secret for storage's managing access to consumers",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "UPLOAD_FILE_SIZE_LIMIT_STANDARD",
      "service": "Supabase Storage",
      "description": "File size",
      "secret": false,
      "strategy": "default",
      "default": "52428800"
    },
    {
      "key": "UPLOAD_SIGNED_URL_EXPIRATION_TIME",
      "service": "Supabase Storage",
      "description": "The time window in seconds a consumer has to download a storage object via signed url.",
      "secret": false,
      "strategy": "default",
      "default": "120"
    },
    {
      "key": "IMAGE_TRANSFORMATION_LIMIT_MAX_SIZE",
      "service": "Supabase Storage",
      "description": "imgproxy max dimensions",
      "secret": false,
      "strategy": "default",
      "default": "2000"
    },
    {
      "key": "IMAGE_TRANSFORMATION_LIMIT_MIN_SIZE",
      "service": "Supabase Storage",
      "description": "imgproxy min dimensions",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "PORT",
      "service": "Postgres",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "PGDATA",
      "service": "Postgres",
      "description": "Local filepath to persist data.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGPORT",
      "service": "Postgres",
      "description": "Port that Postgres listens at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_NAME",
      "service": "Postgres",
      "description": "Database name within the Postgres server.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "JWT_EXP",
      "service": "Postgres",
      "description": "The Postgres JWT extension config uses \"JWT_EXP\".",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "JWT_EXPIRY",
      "service": "Postgres",
      "description": "Time before sessions are refreshed. Default one hour.",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "JWT_SECRET",
      "service": "Postgres",
      "description": "Please visit the Supabase self-hosting tool in a new tab to generate a JWT secret and keys: https://supabase.com/docs/guides/self-hosting/docker#generate-and-configure-api-keys",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "PGDATABASE",
      "service": "Postgres",
      "description": "Database name within the Postgres server.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPASSWORD",
      "service": "Postgres",
      "description": "Main DB password.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "Postgres",
      "description": "Database name within the Postgres server.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_HOST",
      "service": "Postgres",
      "description": "Local socket address to run at when performing internal migrations on start.",
      "secret": false,
      "strategy": "default",
      "default": "/var/run/postgresql"
    },
    {
      "key": "POSTGRES_PORT",
      "service": "Postgres",
      "description": "Port that Postgres listens at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_AUTH_PASSWORD",
      "service": "Postgres",
      "description": "Postgres password for the auth_admin role.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "LISTEN_ADDRESSES",
      "service": "Postgres",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "*"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "Postgres",
      "description": "Main DB password.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_ANON_KEY",
      "service": "Postgres",
      "description": "Please visit the Supabase self-hosting tool in a new tab to generate a JWT secret and keys: https://supabase.com/docs/guides/self-hosting/docker#generate-and-configure-api-keys",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "DB_STORAGE_PASSWORD",
      "service": "Postgres",
      "description": "Postgres password for the storage_admin role.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DB_WEBHOOKS_PASSWORD",
      "service": "Postgres",
      "description": "Postgres password for the functions_admin role (this name might be confusing, the functions_admin role is for webhooks, not edge functions).",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "SUPABASE_SERVICE_KEY",
      "service": "Postgres",
      "description": "Please visit the Supabase self-hosting tool in a new tab to generate a JWT secret and keys: https://supabase.com/docs/guides/self-hosting/docker#generate-and-configure-api-keys",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "DB_PGBOUNCER_PASSWORD",
      "service": "Postgres",
      "description": "Postgres password for the pgbouncer role.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DB_SUPERUSER_PASSWORD",
      "service": "Postgres",
      "description": "Postgres password for the postgres and supabase_admin roles.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DB_AUTHENTICATOR_PASSWORD",
      "service": "Postgres",
      "description": "Postgres password for the authenticator role.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DB_PUBLIC_CONNECTION_STRING",
      "service": "Postgres",
      "description": "Public connection string to access the DB.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PRIVATE_CONNECTION_STRING",
      "service": "Postgres",
      "description": "Private network connection string to access the DB.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PORT",
      "service": "PgBouncer",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "DB_HOST",
      "service": "PgBouncer",
      "description": "Private network host for Postgres.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_PORT",
      "service": "PgBouncer",
      "description": "Port that Postgres listens at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_USER",
      "service": "PgBouncer",
      "description": "The Postgres role that PgBouncer connects to Postgres as before executing client transactions.",
      "secret": false,
      "strategy": "default",
      "default": "pgbouncer"
    },
    {
      "key": "AUTH_TYPE",
      "service": "PgBouncer",
      "description": "The Postgres password encryption type that PgBouncer should use to authenticate connecting clients. This must be \"scram-sha-256\" because that's how Supabase Postgres encrypts passwords.",
      "secret": false,
      "strategy": "default",
      "default": "scram-sha-256"
    },
    {
      "key": "POOL_MODE",
      "service": "PgBouncer",
      "description": "Postgres connection pool mode. Options are \"session\", \"transaction\" and \"statement\"",
      "secret": false,
      "strategy": "default",
      "default": "transaction"
    },
    {
      "key": "AUTH_QUERY",
      "service": "PgBouncer",
      "description": "The query that PgBouncer uses to authenticate connecting clients within Postgres. The pgbouncer.get_auth() function is created within the Postgres DB automatically.",
      "secret": false,
      "strategy": "default",
      "default": "SELECT * FROM pgbouncer.get_auth($1)"
    },
    {
      "key": "DB_PASSWORD",
      "service": "PgBouncer",
      "description": "Postgres password for DB user.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "LISTEN_ADDR",
      "service": "PgBouncer",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "*"
    },
    {
      "key": "LISTEN_PORT",
      "service": "PgBouncer",
      "description": "The port that PgBouncer listens at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MAX_CLIENT_CONN",
      "service": "PgBouncer",
      "description": "The maximum number of client connections that PgBouncer will accept simultaneously.",
      "secret": false,
      "strategy": "default",
      "default": "100"
    },
    {
      "key": "DEFAULT_POOL_SIZE",
      "service": "PgBouncer",
      "description": "The number of server connections that PgBouncer maintains per database in its pool.",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "PGBOUNCER_PUBLIC_CONNECTION_STRING",
      "service": "PgBouncer",
      "description": "Public connection string to access the connection pooler.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "Kong",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "AUTH_HOST",
      "service": "Kong",
      "description": "Auth host for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AUTH_PORT",
      "service": "Kong",
      "description": "Auth port for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "META_HOST",
      "service": "Kong",
      "description": "PG Meta host for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "META_PORT",
      "service": "Kong",
      "description": "PG Meta port for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REST_HOST",
      "service": "Kong",
      "description": "REST host for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REST_PORT",
      "service": "Kong",
      "description": "REST port for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STUDIO_HOST",
      "service": "Kong",
      "description": "Studio host for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "STUDIO_PORT",
      "service": "Kong",
      "description": "Studio port for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "KONG_PLUGINS",
      "service": "Kong",
      "description": "Plugins that Kong will load and make available at runtime.",
      "secret": false,
      "strategy": "default",
      "default": "request-transformer,cors,key-auth,acl,basic-auth,request-termination,ip-restriction,post-function"
    },
    {
      "key": "STORAGE_HOST",
      "service": "Kong",
      "description": "Storage host for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "STORAGE_PORT",
      "service": "Kong",
      "description": "Storage port for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "KONG_DATABASE",
      "service": "Kong",
      "description": "Setting to \"off\" enables DB-less mode, loading config from kong.yml instead of a database. Ideal for containerized, version-controlled deployments.",
      "secret": false,
      "strategy": "default",
      "default": "off"
    },
    {
      "key": "REALTIME_HOST",
      "service": "Kong",
      "description": "Realtime host for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REALTIME_PORT",
      "service": "Kong",
      "description": "Realtime port for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ANALYTICS_HOST",
      "service": "Kong",
      "description": "Analytics host for routing. There is currently no analytics server in the template.",
      "secret": false,
      "strategy": "default",
      "default": "stub"
    },
    {
      "key": "ANALYTICS_PORT",
      "service": "Kong",
      "description": "Analytics port for routing. There is currently no analytics server in the template.",
      "secret": false,
      "strategy": "default",
      "default": "4000"
    },
    {
      "key": "FUNCTIONS_HOST",
      "service": "Kong",
      "description": "Functions host for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "FUNCTIONS_PORT",
      "service": "Kong",
      "description": "Functions port for routing.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "KONG_DNS_ORDER",
      "service": "Kong",
      "description": "Defines the priority sequence Kong uses when resolving hostnames through DNS.",
      "secret": false,
      "strategy": "default",
      "default": "AAAA,LAST,A,CNAME"
    },
    {
      "key": "KONG_PROXY_LISTEN",
      "service": "Kong",
      "description": "Specifies the network addresses and ports on which Kong’s proxy interface listens for incoming traffic.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_ANON_KEY",
      "service": "Kong",
      "description": "Project anon key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DASHBOARD_PASSWORD",
      "service": "Kong",
      "description": "Password to access Supabase Studio.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DASHBOARD_USERNAME",
      "service": "Kong",
      "description": "Username to access Supabase Studio.",
      "secret": false,
      "strategy": "default",
      "default": "pgonrails"
    },
    {
      "key": "SUPABASE_SERVICE_KEY",
      "service": "Kong",
      "description": "Project service role key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "KONG_PROXY_ACCESS_LOG",
      "service": "Kong",
      "description": "Provide a value for KONG_PROXY_ACCESS_LOG.",
      "secret": false,
      "strategy": "default",
      "default": "/dev/stdout combined"
    },
    {
      "key": "KONG_DNS_NOT_FOUND_TTL",
      "service": "Kong",
      "description": "Provide a value for KONG_DNS_NOT_FOUND_TTL.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "KONG_DECLARATIVE_CONFIG",
      "service": "Kong",
      "description": "Local filepath to kong.yml",
      "secret": false,
      "strategy": "default",
      "default": "/usr/local/kong/kong.yml"
    },
    {
      "key": "KONG_NGINX_WORKER_PROCESSES",
      "service": "Kong",
      "description": "Sets the number of Nginx worker processes Kong spawns to handle incoming network connections and process requests. Setting to \"auto\" will match the number of CPU cores, for max cuncurrency and higher memory overhead.",
      "secret": false,
      "strategy": "default",
      "default": "2"
    },
    {
      "key": "KONG_NGINX_PROXY_PROXY_BUFFERS",
      "service": "Kong",
      "description": "Number and size of in-memory buffers to handle responses from upstream services. If the upstream response (headers + initial body) fits within this buffer size, it’s handled entirely in memory — faster and more efficient.",
      "secret": false,
      "strategy": "default",
      "default": "64 160k"
    },
    {
      "key": "PORT",
      "service": "imgproxy",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "5001"
    },
    {
      "key": "IMGPROXY_BIND",
      "service": "imgproxy",
      "description": "Defines the network interface and port that the server bind to when it starts.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "IMGPROXY_USE_S3",
      "service": "imgproxy",
      "description": "Use S3-compatible storage to read images before transforming them.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "imgproxy",
      "description": "S3 id.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "IMGPROXY_USE_ETAG",
      "service": "imgproxy",
      "description": "Enable or disable the use of ETag HTTP headers when serving images through the proxy.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "IMGPROXY_AUTO_WEBP",
      "service": "imgproxy",
      "description": "Enable WebP support detection. When the file extension is omitted in the imgproxy URL and browser supports WebP, imgproxy will use it as the resulting format.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "IMGPROXY_S3_ENDPOINT",
      "service": "imgproxy",
      "description": "URL for S3-compatible storage.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "imgproxy",
      "description": "S3 secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "IMGPROXY_JPEG_PROGRESSIVE",
      "service": "imgproxy",
      "description": "Enables progressive JPEG compression.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "IMGPROXY_IGNORE_SSL_VERIFICATION",
      "service": "imgproxy",
      "description": "Disable SSL verification, so imgproxy can be used in an environment with self-signed SSL certificates.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PORT",
      "service": "Site",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "5173"
    },
    {
      "key": "HOSTNAME",
      "service": "Site",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "SITE_URL",
      "service": "Site",
      "description": "Public url for the site, usable server-side only for some AI skills that use this in development.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "SUPABASE_URL",
      "service": "Site",
      "description": "Private url for Kong.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SUPABASE_ANON_KEY",
      "service": "Site",
      "description": "Provide a value for SUPABASE_ANON_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "VITE_SUPABASE_URL",
      "service": "Site",
      "description": "Provide a value for VITE_SUPABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DEPENDS_ON_STORAGE",
      "service": "Site",
      "description": "Ensure that Storage has started and run its DB migrations before Site does.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "NEXT_PUBLIC_SITE_URL",
      "service": "Site",
      "description": "Public url for the site.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "VITE_SUPABASE_ANON_KEY",
      "service": "Site",
      "description": "Provide a value for VITE_SUPABASE_ANON_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEXT_PUBLIC_SUPABASE_URL",
      "service": "Site",
      "description": "Public url for Kong.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "SUPABASE_SERVICE_ROLE_KEY",
      "service": "Site",
      "description": "Project service role key FOR USE ON THE SERVER ONLY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PRIVATE_CONNECTION_STRING",
      "service": "Site",
      "description": "Private network connection string to run DB migrations on startup.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEXT_PUBLIC_SUPABASE_ANON_KEY",
      "service": "Site",
      "description": "Project anon key which can safely be in a user's browser.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "VITE_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION",
      "service": "Site",
      "description": "Provide a value for VITE_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEXT_PUBLIC_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION",
      "service": "Site",
      "description": "Whether to require a one-time passcode during password change. Read from the Auth service ENV config.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "Supabase Realtime",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "4000"
    },
    {
      "key": "DB_HOST",
      "service": "Supabase Realtime",
      "description": "Private network host for Postgres.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_NAME",
      "service": "Supabase Realtime",
      "description": "Database name within the Postgres server.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PORT",
      "service": "Supabase Realtime",
      "description": "Port that Postgres can be accessed at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_USER",
      "service": "Supabase Realtime",
      "description": "Postgres role to access the DB as.",
      "secret": false,
      "strategy": "default",
      "default": "supabase_admin"
    },
    {
      "key": "APP_NAME",
      "service": "Supabase Realtime",
      "description": "Realtime server name.",
      "secret": false,
      "strategy": "default",
      "default": "realtime"
    },
    {
      "key": "DNS_NODES",
      "service": "Supabase Realtime",
      "description": "A list of DNS server nodes or resolvers to use for name resolution in distributed or clustered environments.",
      "secret": false,
      "strategy": "default",
      "default": "''"
    },
    {
      "key": "DB_ENC_KEY",
      "service": "Supabase Realtime",
      "description": "Key used to encrypt sensitive fields in _realtime.tenants and _realtime.extensions tables.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ERL_AFLAGS",
      "service": "Supabase Realtime",
      "description": "Set to either \"-proto_dist inet_tcp\" or \"-proto_dist inet6_tcp\" depending on whether or not your network uses IPv4 or IPv6, respectively.",
      "secret": false,
      "strategy": "default",
      "default": "-proto_dist inet6_tcp"
    },
    {
      "key": "DB_PASSWORD",
      "service": "Supabase Realtime",
      "description": "Postgres password for DB user.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RUN_JANITOR",
      "service": "Supabase Realtime",
      "description": "Do you want to janitor tasks to run",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RLIMIT_NOFILE",
      "service": "Supabase Realtime",
      "description": "Maximum number of concurrent open network connections or open files.",
      "secret": false,
      "strategy": "default",
      "default": "10000"
    },
    {
      "key": "API_JWT_SECRET",
      "service": "Supabase Realtime",
      "description": "Project JWT secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SEED_SELF_HOST",
      "service": "Supabase Realtime",
      "description": "Create a tenant for self-hosting on startup.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SECRET_KEY_BASE",
      "service": "Supabase Realtime",
      "description": "Secret used by the server to sign cookies.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "METRICS_JWT_SECRET",
      "service": "Supabase Realtime",
      "description": "JWT secret used to authenticate requests to the metrics endpoint.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SELF_HOST_TENANT_NAME",
      "service": "Supabase Realtime",
      "description": "Realtime tenant name for self-hosting. MUST MATCH THE SUBDOMAIN OF THIS SERVICE AS IT APPEARS IN THE RAILWAY PRIVATE NETWORK. This service was named \"Supabase Realtime\" in the project so that it will automatically deploy with the url of \"supabase-realtime.railway.internal\" in the private network.",
      "secret": false,
      "strategy": "default",
      "default": "supabase-realtime"
    },
    {
      "key": "DB_AFTER_CONNECT_QUERY",
      "service": "Supabase Realtime",
      "description": "DB query to run on connect.",
      "secret": false,
      "strategy": "default",
      "default": "SET search_path TO _realtime"
    },
    {
      "key": "PORT",
      "service": "Postgres Meta",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "CRYPTO_KEY",
      "service": "Postgres Meta",
      "description": "Encryption key for securing connection strings between Studio and Postgres Meta.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "PG_META_HOST",
      "service": "Postgres Meta",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "PG_META_PORT",
      "service": "Postgres Meta",
      "description": "The port that PG Meta listens on.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PG_META_DB_HOST",
      "service": "Postgres Meta",
      "description": "DB networking host.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PG_META_DB_NAME",
      "service": "Postgres Meta",
      "description": "Database name within Postgres.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PG_META_DB_PORT",
      "service": "Postgres Meta",
      "description": "DB port.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PG_META_DB_USER",
      "service": "Postgres Meta",
      "description": "The Postgres role that PG Meta will make queries as.",
      "secret": false,
      "strategy": "default",
      "default": "supabase_admin"
    },
    {
      "key": "PG_META_DB_PASSWORD",
      "service": "Postgres Meta",
      "description": "The Postgres password for DB user.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "Supabase Auth",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "9999"
    },
    {
      "key": "GOTRUE_JWT_AUD",
      "service": "Supabase Auth",
      "description": "the \"aud\" key on every JWT payload.",
      "secret": false,
      "strategy": "default",
      "default": "authenticated"
    },
    {
      "key": "GOTRUE_JWT_EXP",
      "service": "Supabase Auth",
      "description": "Time before refreshing sessions. Default one hour.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_API_HOST",
      "service": "Supabase Auth",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "GOTRUE_API_PORT",
      "service": "Supabase Auth",
      "description": "The port that Auth listens at.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_SITE_URL",
      "service": "Supabase Auth",
      "description": "Public url for site for Auth redirects.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "API_EXTERNAL_URL",
      "service": "Supabase Auth",
      "description": "Public url for Kong for redirects.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "GOTRUE_DB_DRIVER",
      "service": "Supabase Auth",
      "description": "Must be \"postgres\".",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "GOTRUE_SMTP_HOST",
      "service": "Supabase Auth",
      "description": "SMTP server for transactional emails.",
      "secret": false,
      "strategy": "default",
      "default": "smtp.gmail.com"
    },
    {
      "key": "GOTRUE_SMTP_PASS",
      "service": "Supabase Auth",
      "description": "SMTP password for authentication with the server.",
      "secret": false,
      "strategy": "default",
      "default": "abcd efgh ijkl mnop"
    },
    {
      "key": "GOTRUE_SMTP_PORT",
      "service": "Supabase Auth",
      "description": "The port your SMTP provider listens at.",
      "secret": false,
      "strategy": "default",
      "default": "587"
    },
    {
      "key": "GOTRUE_SMTP_USER",
      "service": "Supabase Auth",
      "description": "SMTP user for authentication with the server.",
      "secret": false,
      "strategy": "default",
      "default": "myapp@gmail.com"
    },
    {
      "key": "GOTRUE_JWT_ISSUER",
      "service": "Supabase Auth",
      "description": "Value for the 'iss' field in session tokens",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_JWT_SECRET",
      "service": "Supabase Auth",
      "description": "Project JWT secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_DB_DATABASE_URL",
      "service": "Supabase Auth",
      "description": "Postgres connection string.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "GOTRUE_JWT_ADMIN_ROLES",
      "service": "Supabase Auth",
      "description": "Admin role to include in service_role JWTs.",
      "secret": false,
      "strategy": "default",
      "default": "service_role"
    },
    {
      "key": "GOTRUE_SMTP_ADMIN_EMAIL",
      "service": "Supabase Auth",
      "description": "Email address to receive troubleshooting emails.",
      "secret": false,
      "strategy": "default",
      "default": "johndoe@gmail.com"
    },
    {
      "key": "GOTRUE_SMTP_SENDER_NAME",
      "service": "Supabase Auth",
      "description": "Transactional email sender name.",
      "secret": false,
      "strategy": "default",
      "default": "PG On Rails"
    },
    {
      "key": "GOTRUE_MAILER_AUTOCONFIRM",
      "service": "Supabase Auth",
      "description": "Set to \"true\" to disable emails, which can be useful in development. Set to \"false\" to require email confirmations. NOTE - SMTP traffic on Railway is only allowed for the Pro Plan and above.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "GOTRUE_MAILER_EXTERNAL_HOSTS",
      "service": "Supabase Auth",
      "description": "Auth should expect requests from these hosts.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "GOTRUE_JWT_DEFAULT_GROUP_NAME",
      "service": "Supabase Auth",
      "description": "The default role that is given to users in their access token after authentication. Used by Postgres for row-level-security (RLS).",
      "secret": false,
      "strategy": "default",
      "default": "authenticated"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_INVITE",
      "service": "Supabase Auth",
      "description": "Where to redirect users from emails. Relative path within Kong.",
      "secret": false,
      "strategy": "default",
      "default": "/auth/v1/verify"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_INVITE",
      "service": "Supabase Auth",
      "description": "Invite email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "AUTH_LOCAL_MAILER_TEMPLATES_URL",
      "service": "Supabase Auth",
      "description": "Local path within the Auth docker container to fetch email templates.",
      "secret": false,
      "strategy": "default",
      "default": "http://localhost:8080"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_RECOVERY",
      "service": "Supabase Auth",
      "description": "Where to redirect users from emails. Relative path within Kong.",
      "secret": false,
      "strategy": "default",
      "default": "/auth/v1/verify"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_RECOVERY",
      "service": "Supabase Auth",
      "description": "Forgot password email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_MAGIC_LINK",
      "service": "Supabase Auth",
      "description": "Magic link signin email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_CONFIRMATION",
      "service": "Supabase Auth",
      "description": "Where to redirect users from emails. Relative path within Kong.",
      "secret": false,
      "strategy": "default",
      "default": "/auth/v1/verify"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE",
      "service": "Supabase Auth",
      "description": "Where to redirect users from emails. Relative path within Kong.",
      "secret": false,
      "strategy": "default",
      "default": "/auth/v1/verify"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_CONFIRMATION",
      "service": "Supabase Auth",
      "description": "Confirm signup email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_EMAIL_CHANGE",
      "service": "Supabase Auth",
      "description": "Email change email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_SUBJECTS_REAUTHENTICATION",
      "service": "Supabase Auth",
      "description": "The default subject for the OTP email is cringe and needs to be overridden.",
      "secret": false,
      "strategy": "default",
      "default": "Your One-Time Passcode"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_REAUTHENTICATION",
      "service": "Supabase Auth",
      "description": "Password change OTP template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_EMAIL_CHANGED_NOTIFICATION",
      "service": "Supabase Auth",
      "description": "Email changed notification email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_PHONE_CHANGED_NOTIFICATION",
      "service": "Supabase Auth",
      "description": "Phone changed notification email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_IDENTITY_LINKED_NOTIFICATION",
      "service": "Supabase Auth",
      "description": "Identity linked notification email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_PASSWORD_CHANGED_NOTIFICATION",
      "service": "Supabase Auth",
      "description": "Password changed notification email template.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_IDENTITY_UNLINKED_NOTIFICATION",
      "service": "Supabase Auth",
      "description": "Identity unlinked notification email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_ENROLLED_NOTIFICATION",
      "service": "Supabase Auth",
      "description": "MFA factor enrolled notification email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION",
      "service": "Supabase Auth",
      "description": "When set to \"true\", when a user hasn't manually signed in for 24 hours, in order to change their password, they must provide a OTP from their email or phone.",
      "secret": true,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_UNENROLLED_NOTIFICATION",
      "service": "Supabase Auth",
      "description": "MFA factor unenrolled notification email template.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "MinIO",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "9000"
    },
    {
      "key": "S3_ID",
      "service": "MinIO",
      "description": "S3 id for other services to reference.",
      "secret": false,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "S3_SECRET",
      "service": "MinIO",
      "description": "S3 secret for other services to reference.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CONSOLE_PORT",
      "service": "MinIO",
      "description": "Port for the MinIO admin console. Public networking over HTTP must be turned on for the service, and pointed at port 9001.",
      "secret": false,
      "strategy": "default",
      "default": "9001"
    },
    {
      "key": "MINIO_ROOT_USER",
      "service": "MinIO",
      "description": "S3 id.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STORAGE_S3_BUCKET",
      "service": "MinIO",
      "description": "name of top-level bucket. objects are stored in a structure of <top-level-bucket>/<tenant>/<supabase-bucket>/<object>",
      "secret": false,
      "strategy": "default",
      "default": "default-bucket"
    },
    {
      "key": "MINIO_ROOT_PASSWORD",
      "service": "MinIO",
      "description": "S3 secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "Supabase Studio",
      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "HOSTNAME",
      "service": "Supabase Studio",
      "description": "Defines the network interface that the server binds to when it starts.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "POSTGRES_DB",
      "service": "Supabase Studio",
      "description": "DB name within Postgres.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_URL",
      "service": "Supabase Studio",
      "description": "Private url for Kong.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_HOST",
      "service": "Supabase Studio",
      "description": "DB private network host.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_PORT",
      "service": "Supabase Studio",
      "description": "DB port.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "AUTH_JWT_SECRET",
      "service": "Supabase Studio",
      "description": "Project JWT secret.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGRST_DB_SCHEMAS",
      "service": "Supabase Studio",
      "description": "Provide a value for PGRST_DB_SCHEMAS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGRST_DB_MAX_ROWS",
      "service": "Supabase Studio",
      "description": "Provide a value for PGRST_DB_MAX_ROWS.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "Supabase Studio",
      "description": "Postgres password for DB superuser.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_ANON_KEY",
      "service": "Supabase Studio",
      "description": "Project anon key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PG_META_CRYPTO_KEY",
      "service": "Supabase Studio",
      "description": "Encryption key for securing connection strings between Studio and Postgres Meta.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STUDIO_PG_META_URL",
      "service": "Supabase Studio",
      "description": "Private url for Postgres Meta.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SUPABASE_PUBLIC_URL",
      "service": "Supabase Studio",
      "description": "Public url for Kong.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DEFAULT_PROJECT_NAME",
      "service": "Supabase Studio",
      "description": "Project name which appears in the browser tab for Supabase Studio.",
      "secret": false,
      "strategy": "default",
      "default": "PG On Rails"
    },
    {
      "key": "SUPABASE_SERVICE_KEY",
      "service": "Supabase Studio",
      "description": "Project service role key.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DEFAULT_ORGANIZATION_NAME",
      "service": "Supabase Studio",
      "description": "Organization name which appears in the browser tab for Supabase Studio",
      "secret": false,
      "strategy": "default",
      "default": "My Org"
    },
    {
      "key": "ENABLED_FEATURES_LOGS_ALL",
      "service": "Supabase Studio",
      "description": "Not using Logflare analytics on Railway",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGRST_DB_EXTRA_SEARCH_PATH",
      "service": "Supabase Studio",
      "description": "Provide a value for PGRST_DB_EXTRA_SEARCH_PATH.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SNIPPETS_MANAGEMENT_FOLDER",
      "service": "Supabase Studio",
      "description": "Local filepath in the container for SQL snippets",
      "secret": false,
      "strategy": "default",
      "default": "/app/snippets"
    },
    {
      "key": "EDGE_FUNCTIONS_MANAGEMENT_FOLDER",
      "service": "Supabase Studio",
      "description": "Local filepath in the container for edge functions",
      "secret": false,
      "strategy": "default",
      "default": "/app/edge-functions"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "complete-supabase-nextjs-frontend"
      }
    },
    "cli": "railway deploy --template complete-supabase-nextjs-frontend",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "5e14ce66-9fb7-472e-ac44-15067d57cedc",
            "serializedConfig": {
              "services": {
                "03bd7af6-31bb-4c7c-9c42-7f26ae6a10fc": {
                  "icon": "https://docs.postgrest.org/en/v13/_static/favicon.ico",
                  "name": "PostgREST",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/rest"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "3000"
                    },
                    "PGRST_DB_URI": {
                      "isOptional": false,
                      "description": "Private connection string for Postgres.",
                      "defaultValue": "postgres://authenticator:${{Postgres.DB_AUTHENTICATOR_PASSWORD}}@${{Postgres.RAILWAY_PRIVATE_DOMAIN}}:${{Postgres.PORT}}/${{Postgres.DB_NAME}}"
                    },
                    "PGRST_DB_SCHEMAS": {
                      "isOptional": false,
                      "description": "Schemas within Postgres that PostgREST is permitted to expose via RESTful API.",
                      "defaultValue": "public,storage,graphql_public"
                    },
                    "PGRST_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Project JWT secret.",
                      "defaultValue": "${{Postgres.JWT_SECRET}}"
                    },
                    "PGRST_DB_MAX_ROWS": {
                      "description": "Max number of rows returned by a request.",
                      "defaultValue": "1000"
                    },
                    "PGRST_SERVER_HOST": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "::"
                    },
                    "PGRST_SERVER_PORT": {
                      "isOptional": false,
                      "description": "The port that PostgREST listens at.",
                      "defaultValue": "${{PORT}}"
                    },
                    "PGRST_DB_ANON_ROLE": {
                      "isOptional": false,
                      "description": "Anon role used in JWTs.",
                      "defaultValue": "anon"
                    },
                    "PGRST_DB_USE_LEGACY_GUCS": {
                      "isOptional": false,
                      "description": "Whether to use legacy Grand Unified Scheme (GUC) variables. Keep set to \"false\".",
                      "defaultValue": "false"
                    },
                    "PGRST_APP_SETTINGS_JWT_EXP": {
                      "isOptional": false,
                      "description": "Time before refreshing sessions. Defaults to an hour.",
                      "defaultValue": "${{Postgres.JWT_EXPIRY}}"
                    },
                    "PGRST_DB_EXTRA_SEARCH_PATH": {
                      "description": "Extra schemas added to the search_path of every request.",
                      "defaultValue": "public"
                    },
                    "PGRST_APP_SETTINGS_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Project JWT secret.",
                      "defaultValue": "${{Postgres.JWT_SECRET}}"
                    }
                  }
                },
                "18830522-62fd-4bab-8bdd-73785046181e": {
                  "icon": "https://supabase.com/favicon/favicon-196x196.png",
                  "name": "Edge Functions",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/functions"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "9000"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Project JWT secret.",
                      "defaultValue": "${{Postgres.JWT_SECRET}}"
                    },
                    "VERIFY_JWT": {
                      "isOptional": false,
                      "description": "Whether to verify if a JWT is legit on every request.",
                      "defaultValue": "false"
                    },
                    "SUPABASE_URL": {
                      "isOptional": false,
                      "description": "Private url for Kong.",
                      "defaultValue": "http://${{Kong.RAILWAY_PRIVATE_DOMAIN}}:${{Kong.PORT}}"
                    },
                    "SUPABASE_DB_URL": {
                      "isOptional": false,
                      "description": "Private url for directly querying Postgres.",
                      "defaultValue": "postgresql://postgres:${{Postgres.DB_SUPERUSER_PASSWORD}}@${{Postgres.RAILWAY_PRIVATE_DOMAIN}}:${{Postgres.PORT}}/${{Postgres.DB_NAME}}"
                    },
                    "EDGE_RUNTIME_PORT": {
                      "isOptional": false,
                      "description": "The port that Edge Functions will listen at.",
                      "defaultValue": "${{PORT}}"
                    },
                    "SUPABASE_ANON_KEY": {
                      "isOptional": false,
                      "description": "Project anon key.",
                      "defaultValue": "${{Postgres.SUPABASE_ANON_KEY}}"
                    },
                    "EDGE_RUNTIME_LISTEN": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "::"
                    },
                    "SUPABASE_SECRET_KEYS": {
                      "description": "New opaque API keys",
                      "defaultValue": "{\"default\":\"${{Postgres.SUPABASE_SECRET_KEY}}\"}"
                    },
                    "SUPABASE_PUBLISHABLE_KEYS": {
                      "description": "New opaque API keys",
                      "defaultValue": "{\"default\":\"${{Postgres.SUPABASE_PUBLISHABLE_KEY}}\"}"
                    },
                    "SUPABASE_SERVICE_ROLE_KEY": {
                      "isOptional": false,
                      "description": "Project service role key.",
                      "defaultValue": "${{Postgres.SUPABASE_SERVICE_KEY}}"
                    }
                  }
                },
                "3c7eb48b-1db3-4613-973c-017d42255821": {
                  "icon": "https://supabase.com/favicon/favicon-196x196.png",
                  "name": "Supabase Storage",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/storage"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "5000"
                    },
                    "ANON_KEY": {
                      "isOptional": false,
                      "description": "Project anon key.",
                      "defaultValue": "${{Postgres.SUPABASE_ANON_KEY}}"
                    },
                    "TENANT_ID": {
                      "isOptional": false,
                      "description": "Self-hosted storage tenant.",
                      "defaultValue": "default-tenant"
                    },
                    "SERVER_HOST": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "::"
                    },
                    "SERVER_PORT": {
                      "isOptional": false,
                      "description": "The port Supabase Storage listens at.",
                      "defaultValue": "${{PORT}}"
                    },
                    "SERVICE_KEY": {
                      "isOptional": false,
                      "description": "Project service key.",
                      "defaultValue": "${{Postgres.SUPABASE_SERVICE_KEY}}"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "Postgres connection string.",
                      "defaultValue": "postgres://supabase_storage_admin:${{Postgres.DB_STORAGE_PASSWORD}}@${{Postgres.RAILWAY_PRIVATE_DOMAIN}}:${{Postgres.PORT}}/${{Postgres.DB_NAME}}"
                    },
                    "DB_ANON_ROLE": {
                      "isOptional": false,
                      "description": "DB anon role used in JWTs",
                      "defaultValue": "anon"
                    },
                    "IMGPROXY_URL": {
                      "isOptional": false,
                      "description": "Private url for imgproxy.",
                      "defaultValue": "http://${{imgproxy.RAILWAY_PRIVATE_DOMAIN}}:${{imgproxy.PORT}}"
                    },
                    "TUS_URL_PATH": {
                      "isOptional": false,
                      "description": "Resumable uploads url path.",
                      "defaultValue": "/upload/resumable"
                    },
                    "DB_SUPER_USER": {
                      "isOptional": false,
                      "description": "DB superuser role (also \"supabase_admin\")",
                      "defaultValue": "postgres"
                    },
                    "POSTGREST_URL": {
                      "isOptional": false,
                      "description": "Private url for PostgREST.",
                      "defaultValue": "http://${{PostgREST.RAILWAY_PRIVATE_DOMAIN}}:${{PostgREST.PORT}}"
                    },
                    "TUS_PART_SIZE": {
                      "isOptional": false,
                      "description": "Resumable uploads part size bytes.",
                      "defaultValue": "50"
                    },
                    "AUTH_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Project JWT secret.",
                      "defaultValue": "${{Postgres.JWT_SECRET}}"
                    },
                    "DB_SERVICE_ROLE": {
                      "isOptional": false,
                      "description": "DB service role used in JWTs",
                      "defaultValue": "service_role"
                    },
                    "FILE_SIZE_LIMIT": {
                      "isOptional": false,
                      "description": "File size",
                      "defaultValue": "52428800"
                    },
                    "STORAGE_BACKEND": {
                      "isOptional": false,
                      "description": "Storage backend. Can also be \"file\" but must be \"s3\" on Railway.",
                      "defaultValue": "s3"
                    },
                    "DB_INSTALL_ROLES": {
                      "isOptional": false,
                      "description": "Whether to install storage DB roles.",
                      "defaultValue": "false"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "S3 id.",
                      "defaultValue": "${{MinIO.S3_ID}}"
                    },
                    "DATABASE_POOL_URL": {
                      "isOptional": false,
                      "description": "PgBouncer connection string.",
                      "defaultValue": "postgres://supabase_storage_admin:${{Postgres.DB_STORAGE_PASSWORD}}@${{PgBouncer.RAILWAY_PRIVATE_DOMAIN}}:${{PgBouncer.PORT}}/${{Postgres.DB_NAME}}"
                    },
                    "SERVER_ADMIN_PORT": {
                      "isOptional": false,
                      "description": "The port to access Storage admin functions.",
                      "defaultValue": "5001"
                    },
                    "STORAGE_S3_BUCKET": {
                      "isOptional": false,
                      "description": "name of top-level bucket. objects are stored in a structure of <top-level-bucket>/<tenant>/<supabase-bucket>/<object>",
                      "defaultValue": "${{MinIO.STORAGE_S3_BUCKET}}"
                    },
                    "STORAGE_S3_REGION": {
                      "isOptional": false,
                      "description": "S3 region doesn't matter for our self-hosted S3-compatible storage.",
                      "defaultValue": "default-region"
                    },
                    "TUS_URL_EXPIRY_MS": {
                      "isOptional": false,
                      "description": "Resumable uploads url expiry milliseconds.",
                      "defaultValue": "3600000"
                    },
                    "AUTH_JWT_ALGORITHM": {
                      "isOptional": false,
                      "description": "The algorithm used to sign JWTs.",
                      "defaultValue": "HS256"
                    },
                    "STORAGE_S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "URL for S3-compatible storage.",
                      "defaultValue": "http://${{MinIO.RAILWAY_PRIVATE_DOMAIN}}:${{MinIO.PORT}}"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "S3 secret.",
                      "defaultValue": "${{MinIO.S3_SECRET}}"
                    },
                    "DB_AUTHENTICATED_ROLE": {
                      "isOptional": false,
                      "description": "DB role for logged-in users, used in JWTs",
                      "defaultValue": "authenticated"
                    },
                    "STORAGE_S3_MAX_SOCKETS": {
                      "isOptional": false,
                      "description": "Max socket connections with S3-compatible storage.",
                      "defaultValue": "200"
                    },
                    "UPLOAD_FILE_SIZE_LIMIT": {
                      "isOptional": false,
                      "description": "File size",
                      "defaultValue": "524288000"
                    },
                    "IMGPROXY_REQUEST_TIMEOUT": {
                      "isOptional": false,
                      "description": "imgproxy request timeout.",
                      "defaultValue": "15"
                    },
                    "IMGPROXY_HTTP_MAX_SOCKETS": {
                      "isOptional": false,
                      "description": "Max socket connections to imgproxy.",
                      "defaultValue": "500"
                    },
                    "S3_PROTOCOL_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "S3 id for storage's managing access to consumers",
                      "defaultValue": "{{S3_PROTOCOL_ACCESS_KEY_ID}}"
                    },
                    "DB_ALLOW_MIGRATION_REFRESH": {
                      "isOptional": false,
                      "description": "Refresh migration hashes on mismatch",
                      "defaultValue": "true"
                    },
                    "DATABASE_CONNECTION_TIMEOUT": {
                      "isOptional": false,
                      "description": "Timeout seconds for Postgres connections.",
                      "defaultValue": "3000"
                    },
                    "STORAGE_S3_FORCE_PATH_STYLE": {
                      "isOptional": false,
                      "description": "Use the path style to reference storage objects.",
                      "defaultValue": "true"
                    },
                    "IMAGE_TRANSFORMATION_ENABLED": {
                      "isOptional": false,
                      "description": "Enable use of imgproxy.",
                      "defaultValue": "true"
                    },
                    "S3_PROTOCOL_ACCESS_KEY_SECRET": {
                      "isOptional": false,
                      "description": "S3 secret for storage's managing access to consumers",
                      "defaultValue": "{{S3_PROTOCOL_ACCESS_KEY_SECRET}}"
                    },
                    "UPLOAD_FILE_SIZE_LIMIT_STANDARD": {
                      "isOptional": false,
                      "description": "File size",
                      "defaultValue": "52428800"
                    },
                    "UPLOAD_SIGNED_URL_EXPIRATION_TIME": {
                      "isOptional": false,
                      "description": "The time window in seconds a consumer has to download a storage object via signed url.",
                      "defaultValue": "120"
                    },
                    "IMAGE_TRANSFORMATION_LIMIT_MAX_SIZE": {
                      "isOptional": false,
                      "description": "imgproxy max dimensions",
                      "defaultValue": "2000"
                    },
                    "IMAGE_TRANSFORMATION_LIMIT_MIN_SIZE": {
                      "isOptional": false,
                      "description": "imgproxy min dimensions",
                      "defaultValue": "0"
                    }
                  }
                },
                "50faa9fa-2a42-4e07-a1e1-8a01c894ba2c": {
                  "icon": "https://devicons.railway.app/postgres",
                  "name": "Postgres",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/db"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "5432"
                    },
                    "PGDATA": {
                      "isOptional": false,
                      "description": "Local filepath to persist data.",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGPORT": {
                      "isOptional": false,
                      "description": "Port that Postgres listens at.",
                      "defaultValue": "${{PORT}}"
                    },
                    "DB_NAME": {
                      "description": "Database name within the Postgres server.",
                      "defaultValue": "postgres"
                    },
                    "JWT_EXP": {
                      "isOptional": false,
                      "description": "The Postgres JWT extension config uses \"JWT_EXP\".",
                      "defaultValue": "${{JWT_EXPIRY}}"
                    },
                    "JWT_EXPIRY": {
                      "description": "Time before sessions are refreshed. Default one hour.",
                      "defaultValue": "3600"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Please visit the Supabase self-hosting tool in a new tab to generate a JWT secret and keys: https://supabase.com/docs/guides/self-hosting/docker#generate-and-configure-api-keys",
                      "defaultValue": "{{JWT_SECRET}}"
                    },
                    "PGDATABASE": {
                      "isOptional": false,
                      "description": "Database name within the Postgres server.",
                      "defaultValue": "${{DB_NAME}}"
                    },
                    "PGPASSWORD": {
                      "isOptional": false,
                      "description": "Main DB password.",
                      "defaultValue": "${{DB_SUPERUSER_PASSWORD}}"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Database name within the Postgres server.",
                      "defaultValue": "${{DB_NAME}}"
                    },
                    "POSTGRES_HOST": {
                      "isOptional": false,
                      "description": "Local socket address to run at when performing internal migrations on start.",
                      "defaultValue": "/var/run/postgresql"
                    },
                    "POSTGRES_PORT": {
                      "isOptional": false,
                      "description": "Port that Postgres listens at.",
                      "defaultValue": "${{PORT}}"
                    },
                    "DB_AUTH_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password for the auth_admin role.",
                      "defaultValue": "{{DB_AUTH_PASSWORD}}"
                    },
                    "LISTEN_ADDRESSES": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "*"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Main DB password.",
                      "defaultValue": "${{DB_SUPERUSER_PASSWORD}}"
                    },
                    "SUPABASE_ANON_KEY": {
                      "description": "Please visit the Supabase self-hosting tool in a new tab to generate a JWT secret and keys: https://supabase.com/docs/guides/self-hosting/docker#generate-and-configure-api-keys",
                      "defaultValue": "{{SUPABASE_ANON_KEY}}"
                    },
                    "DB_STORAGE_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password for the storage_admin role.",
                      "defaultValue": "{{DB_STORAGE_PASSWORD}}"
                    },
                    "DB_WEBHOOKS_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password for the functions_admin role (this name might be confusing, the functions_admin role is for webhooks, not edge functions).",
                      "defaultValue": "{{DB_WEBHOOKS_PASSWORD}}"
                    },
                    "SUPABASE_SERVICE_KEY": {
                      "description": "Please visit the Supabase self-hosting tool in a new tab to generate a JWT secret and keys: https://supabase.com/docs/guides/self-hosting/docker#generate-and-configure-api-keys",
                      "defaultValue": "{{SUPABASE_SERVICE_KEY}}"
                    },
                    "DB_PGBOUNCER_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password for the pgbouncer role.",
                      "defaultValue": "{{DB_PGBOUNCER_PASSWORD}}"
                    },
                    "DB_SUPERUSER_PASSWORD": {
                      "description": "Postgres password for the postgres and supabase_admin roles.",
                      "defaultValue": "{{DB_SUPERUSER_PASSWORD}}"
                    },
                    "DB_AUTHENTICATOR_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password for the authenticator role.",
                      "defaultValue": "{{DB_AUTHENTICATOR_PASSWORD}}"
                    },
                    "DB_PUBLIC_CONNECTION_STRING": {
                      "description": "Public connection string to access the DB.",
                      "defaultValue": "postgres://postgres:${{DB_SUPERUSER_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}/${{DB_NAME}}"
                    },
                    "DB_PRIVATE_CONNECTION_STRING": {
                      "description": "Private network connection string to access the DB.",
                      "defaultValue": "postgres://postgres:${{DB_SUPERUSER_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:${{PORT}}/${{DB_NAME}}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "5432": {}
                    }
                  },
                  "volumeMounts": {
                    "50faa9fa-2a42-4e07-a1e1-8a01c894ba2c": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "53ba3591-e3d7-4274-ae72-5870cb5dd50b": {
                  "icon": "https://devicons.railway.app/postgres",
                  "name": "PgBouncer",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/pgbouncer"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "5432"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Private network host for Postgres.",
                      "defaultValue": "${{Postgres.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Port that Postgres listens at.",
                      "defaultValue": "${{Postgres.PORT}}"
                    },
                    "DB_USER": {
                      "isOptional": false,
                      "description": "The Postgres role that PgBouncer connects to Postgres as before executing client transactions.",
                      "defaultValue": "pgbouncer"
                    },
                    "AUTH_TYPE": {
                      "isOptional": false,
                      "description": "The Postgres password encryption type that PgBouncer should use to authenticate connecting clients. This must be \"scram-sha-256\" because that's how Supabase Postgres encrypts passwords.",
                      "defaultValue": "scram-sha-256"
                    },
                    "POOL_MODE": {
                      "isOptional": false,
                      "description": "Postgres connection pool mode. Options are \"session\", \"transaction\" and \"statement\"",
                      "defaultValue": "transaction"
                    },
                    "AUTH_QUERY": {
                      "isOptional": false,
                      "description": "The query that PgBouncer uses to authenticate connecting clients within Postgres. The pgbouncer.get_auth() function is created within the Postgres DB automatically.",
                      "defaultValue": "SELECT * FROM pgbouncer.get_auth($1)"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password for DB user.",
                      "defaultValue": "${{Postgres.DB_PGBOUNCER_PASSWORD}}"
                    },
                    "LISTEN_ADDR": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "*"
                    },
                    "LISTEN_PORT": {
                      "isOptional": false,
                      "description": "The port that PgBouncer listens at.",
                      "defaultValue": "${{PORT}}"
                    },
                    "MAX_CLIENT_CONN": {
                      "isOptional": false,
                      "description": "The maximum number of client connections that PgBouncer will accept simultaneously.",
                      "defaultValue": "100"
                    },
                    "DEFAULT_POOL_SIZE": {
                      "isOptional": false,
                      "description": "The number of server connections that PgBouncer maintains per database in its pool.",
                      "defaultValue": "20"
                    },
                    "PGBOUNCER_PUBLIC_CONNECTION_STRING": {
                      "description": "Public connection string to access the connection pooler.",
                      "defaultValue": "postgres://postgres:${{Postgres.DB_SUPERUSER_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}/${{Postgres.DB_NAME}}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "5432": {}
                    }
                  }
                },
                "7377e153-6385-4f45-9f91-1a44edc92d84": {
                  "icon": "https://github.com/Kong.png",
                  "name": "Kong",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/kong"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "8000"
                    },
                    "AUTH_HOST": {
                      "isOptional": false,
                      "description": "Auth host for routing.",
                      "defaultValue": "${{Supabase Auth.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "AUTH_PORT": {
                      "isOptional": false,
                      "description": "Auth port for routing.",
                      "defaultValue": "${{Supabase Auth.PORT}}"
                    },
                    "META_HOST": {
                      "isOptional": false,
                      "description": "PG Meta host for routing.",
                      "defaultValue": "${{Postgres Meta.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "META_PORT": {
                      "isOptional": false,
                      "description": "PG Meta port for routing.",
                      "defaultValue": "${{Postgres Meta.PORT}}"
                    },
                    "REST_HOST": {
                      "isOptional": false,
                      "description": "REST host for routing.",
                      "defaultValue": "${{PostgREST.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REST_PORT": {
                      "isOptional": false,
                      "description": "REST port for routing.",
                      "defaultValue": "${{PostgREST.PORT}}"
                    },
                    "STUDIO_HOST": {
                      "isOptional": false,
                      "description": "Studio host for routing.",
                      "defaultValue": "${{Supabase Studio.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "STUDIO_PORT": {
                      "isOptional": false,
                      "description": "Studio port for routing.",
                      "defaultValue": "${{Supabase Studio.PORT}}"
                    },
                    "KONG_PLUGINS": {
                      "isOptional": false,
                      "description": "Plugins that Kong will load and make available at runtime.",
                      "defaultValue": "request-transformer,cors,key-auth,acl,basic-auth,request-termination,ip-restriction,post-function"
                    },
                    "STORAGE_HOST": {
                      "isOptional": false,
                      "description": "Storage host for routing.",
                      "defaultValue": "${{Supabase Storage.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "STORAGE_PORT": {
                      "isOptional": false,
                      "description": "Storage port for routing.",
                      "defaultValue": "${{Supabase Storage.PORT}}"
                    },
                    "KONG_DATABASE": {
                      "isOptional": false,
                      "description": "Setting to \"off\" enables DB-less mode, loading config from kong.yml instead of a database. Ideal for containerized, version-controlled deployments.",
                      "defaultValue": "off"
                    },
                    "REALTIME_HOST": {
                      "isOptional": false,
                      "description": "Realtime host for routing.",
                      "defaultValue": "${{Supabase Realtime.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REALTIME_PORT": {
                      "isOptional": false,
                      "description": "Realtime port for routing.",
                      "defaultValue": "${{Supabase Realtime.PORT}}"
                    },
                    "ANALYTICS_HOST": {
                      "description": "Analytics host for routing. There is currently no analytics server in the template.",
                      "defaultValue": "stub"
                    },
                    "ANALYTICS_PORT": {
                      "description": "Analytics port for routing. There is currently no analytics server in the template.",
                      "defaultValue": "4000"
                    },
                    "FUNCTIONS_HOST": {
                      "isOptional": false,
                      "description": "Functions host for routing.",
                      "defaultValue": "${{Edge Functions.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "FUNCTIONS_PORT": {
                      "isOptional": false,
                      "description": "Functions port for routing.",
                      "defaultValue": "${{Edge Functions.PORT}}"
                    },
                    "KONG_DNS_ORDER": {
                      "isOptional": false,
                      "description": "Defines the priority sequence Kong uses when resolving hostnames through DNS.",
                      "defaultValue": "AAAA,LAST,A,CNAME"
                    },
                    "KONG_PROXY_LISTEN": {
                      "isOptional": false,
                      "description": "Specifies the network addresses and ports on which Kong’s proxy interface listens for incoming traffic.",
                      "defaultValue": "[::]:${{PORT}} reuseport backlog=16384, 0.0.0.0:${{PORT}} reuseport backlog=16384"
                    },
                    "SUPABASE_ANON_KEY": {
                      "description": "Project anon key.",
                      "defaultValue": "${{Postgres.SUPABASE_ANON_KEY}}"
                    },
                    "DASHBOARD_PASSWORD": {
                      "isOptional": false,
                      "description": "Password to access Supabase Studio.",
                      "defaultValue": "{{DASHBOARD_PASSWORD}}"
                    },
                    "DASHBOARD_USERNAME": {
                      "isOptional": false,
                      "description": "Username to access Supabase Studio.",
                      "defaultValue": "pgonrails"
                    },
                    "SUPABASE_SERVICE_KEY": {
                      "description": "Project service role key.",
                      "defaultValue": "${{Postgres.SUPABASE_SERVICE_KEY}}"
                    },
                    "KONG_PROXY_ACCESS_LOG": {
                      "defaultValue": "/dev/stdout combined"
                    },
                    "KONG_DNS_NOT_FOUND_TTL": {
                      "defaultValue": "1"
                    },
                    "KONG_DECLARATIVE_CONFIG": {
                      "isOptional": false,
                      "description": "Local filepath to kong.yml",
                      "defaultValue": "/usr/local/kong/kong.yml"
                    },
                    "KONG_NGINX_WORKER_PROCESSES": {
                      "isOptional": false,
                      "description": "Sets the number of Nginx worker processes Kong spawns to handle incoming network connections and process requests. Setting to \"auto\" will match the number of CPU cores, for max cuncurrency and higher memory overhead.",
                      "defaultValue": "2"
                    },
                    "KONG_NGINX_PROXY_PROXY_BUFFERS": {
                      "isOptional": false,
                      "description": "Number and size of in-memory buffers to handle responses from upstream services. If the upstream response (headers + initial body) fits within this buffer size, it’s handled entirely in memory — faster and more efficient.",
                      "defaultValue": "64 160k"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8000": {
                        "port": 8000
                      }
                    }
                  }
                },
                "7998b8f9-a300-4460-90a6-bed8cc1355e8": {
                  "icon": "https://docs.imgproxy.net/img/icon.svg",
                  "name": "imgproxy",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/imgproxy"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "5001"
                    },
                    "IMGPROXY_BIND": {
                      "isOptional": false,
                      "description": "Defines the network interface and port that the server bind to when it starts.",
                      "defaultValue": "[::]:${{PORT}}"
                    },
                    "IMGPROXY_USE_S3": {
                      "isOptional": false,
                      "description": "Use S3-compatible storage to read images before transforming them.",
                      "defaultValue": "true"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "S3 id.",
                      "defaultValue": "${{MinIO.S3_ID}}"
                    },
                    "IMGPROXY_USE_ETAG": {
                      "isOptional": false,
                      "description": "Enable or disable the use of ETag HTTP headers when serving images through the proxy.",
                      "defaultValue": "true"
                    },
                    "IMGPROXY_AUTO_WEBP": {
                      "description": "Enable WebP support detection. When the file extension is omitted in the imgproxy URL and browser supports WebP, imgproxy will use it as the resulting format.",
                      "defaultValue": "true"
                    },
                    "IMGPROXY_S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "URL for S3-compatible storage.",
                      "defaultValue": "http://${{MinIO.RAILWAY_PRIVATE_DOMAIN}}:${{MinIO.PORT}}"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "S3 secret.",
                      "defaultValue": "${{MinIO.S3_SECRET}}"
                    },
                    "IMGPROXY_JPEG_PROGRESSIVE": {
                      "isOptional": false,
                      "description": "Enables progressive JPEG compression.",
                      "defaultValue": "true"
                    },
                    "IMGPROXY_IGNORE_SSL_VERIFICATION": {
                      "isOptional": false,
                      "description": "Disable SSL verification, so imgproxy can be used in an environment with self-signed SSL certificates.",
                      "defaultValue": "true"
                    }
                  }
                },
                "80d653f3-2b68-43f2-bab9-c4ffec87a846": {
                  "icon": "https://tanstack.com/favicon.ico",
                  "name": "Site",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/site"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "5173"
                    },
                    "HOSTNAME": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "::"
                    },
                    "SITE_URL": {
                      "description": "Public url for the site, usable server-side only for some AI skills that use this in development.",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "SUPABASE_URL": {
                      "isOptional": false,
                      "description": "Private url for Kong.",
                      "defaultValue": "http://${{Kong.RAILWAY_PRIVATE_DOMAIN}}:${{Kong.PORT}}"
                    },
                    "SUPABASE_ANON_KEY": {
                      "defaultValue": "${{Postgres.SUPABASE_ANON_KEY}}"
                    },
                    "VITE_SUPABASE_URL": {
                      "defaultValue": "https://${{Kong.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DEPENDS_ON_STORAGE": {
                      "description": "Ensure that Storage has started and run its DB migrations before Site does.",
                      "defaultValue": "${{Supabase Storage.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "NEXT_PUBLIC_SITE_URL": {
                      "isOptional": false,
                      "description": "Public url for the site.",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "VITE_SUPABASE_ANON_KEY": {
                      "defaultValue": "${{Postgres.SUPABASE_ANON_KEY}}"
                    },
                    "NEXT_PUBLIC_SUPABASE_URL": {
                      "isOptional": false,
                      "description": "Public url for Kong.",
                      "defaultValue": "https://${{Kong.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "SUPABASE_SERVICE_ROLE_KEY": {
                      "isOptional": false,
                      "description": "Project service role key FOR USE ON THE SERVER ONLY.",
                      "defaultValue": "${{Postgres.SUPABASE_SERVICE_KEY}}"
                    },
                    "DB_PRIVATE_CONNECTION_STRING": {
                      "description": "Private network connection string to run DB migrations on startup.",
                      "defaultValue": "${{Postgres.DB_PRIVATE_CONNECTION_STRING}}"
                    },
                    "NEXT_PUBLIC_SUPABASE_ANON_KEY": {
                      "isOptional": false,
                      "description": "Project anon key which can safely be in a user's browser.",
                      "defaultValue": "${{Postgres.SUPABASE_ANON_KEY}}"
                    },
                    "VITE_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION": {
                      "defaultValue": "${{\"Supabase Auth\".GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION}}"
                    },
                    "NEXT_PUBLIC_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION": {
                      "description": "Whether to require a one-time passcode during password change. Read from the Auth service ENV config.",
                      "defaultValue": "${{Supabase Auth.GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:5173": {
                        "port": 5173
                      }
                    }
                  }
                },
                "828be08f-90e1-4d65-8c79-8b97c3cf3b4a": {
                  "icon": "https://supabase.com/favicon/favicon-196x196.png",
                  "name": "Supabase Realtime",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/realtime"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "4000"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Private network host for Postgres.",
                      "defaultValue": "${{Postgres.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DB_NAME": {
                      "isOptional": false,
                      "description": "Database name within the Postgres server.",
                      "defaultValue": "${{Postgres.DB_NAME}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "Port that Postgres can be accessed at.",
                      "defaultValue": "${{Postgres.PORT}}"
                    },
                    "DB_USER": {
                      "isOptional": false,
                      "description": "Postgres role to access the DB as.",
                      "defaultValue": "supabase_admin"
                    },
                    "APP_NAME": {
                      "isOptional": false,
                      "description": "Realtime server name.",
                      "defaultValue": "realtime"
                    },
                    "DNS_NODES": {
                      "isOptional": false,
                      "description": "A list of DNS server nodes or resolvers to use for name resolution in distributed or clustered environments.",
                      "defaultValue": "''"
                    },
                    "DB_ENC_KEY": {
                      "isOptional": false,
                      "description": "Key used to encrypt sensitive fields in _realtime.tenants and _realtime.extensions tables.",
                      "defaultValue": "{{DB_ENC_KEY}}"
                    },
                    "ERL_AFLAGS": {
                      "isOptional": false,
                      "description": "Set to either \"-proto_dist inet_tcp\" or \"-proto_dist inet6_tcp\" depending on whether or not your network uses IPv4 or IPv6, respectively.",
                      "defaultValue": "-proto_dist inet6_tcp"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password for DB user.",
                      "defaultValue": "${{Postgres.DB_SUPERUSER_PASSWORD}}"
                    },
                    "RUN_JANITOR": {
                      "isOptional": false,
                      "description": "Do you want to janitor tasks to run",
                      "defaultValue": "true"
                    },
                    "RLIMIT_NOFILE": {
                      "isOptional": false,
                      "description": "Maximum number of concurrent open network connections or open files.",
                      "defaultValue": "10000"
                    },
                    "API_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Project JWT secret.",
                      "defaultValue": "${{Postgres.JWT_SECRET}}"
                    },
                    "SEED_SELF_HOST": {
                      "isOptional": false,
                      "description": "Create a tenant for self-hosting on startup.",
                      "defaultValue": "true"
                    },
                    "SECRET_KEY_BASE": {
                      "isOptional": false,
                      "description": "Secret used by the server to sign cookies.",
                      "defaultValue": "{{SECRET_KEY_BASE}}"
                    },
                    "METRICS_JWT_SECRET": {
                      "description": "JWT secret used to authenticate requests to the metrics endpoint.",
                      "defaultValue": "${{Postgres.JWT_SECRET}}"
                    },
                    "SELF_HOST_TENANT_NAME": {
                      "isOptional": false,
                      "description": "Realtime tenant name for self-hosting. MUST MATCH THE SUBDOMAIN OF THIS SERVICE AS IT APPEARS IN THE RAILWAY PRIVATE NETWORK. This service was named \"Supabase Realtime\" in the project so that it will automatically deploy with the url of \"supabase-realtime.railway.internal\" in the private network.",
                      "defaultValue": "supabase-realtime"
                    },
                    "DB_AFTER_CONNECT_QUERY": {
                      "isOptional": false,
                      "description": "DB query to run on connect.",
                      "defaultValue": "SET search_path TO _realtime"
                    }
                  }
                },
                "b7d908e1-c87a-45ec-a50b-7e86f73fda6f": {
                  "icon": "https://supabase.com/favicon/favicon-196x196.png",
                  "name": "Postgres Meta",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/meta"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "8080"
                    },
                    "CRYPTO_KEY": {
                      "description": "Encryption key for securing connection strings between Studio and Postgres Meta.",
                      "defaultValue": "{{CRYPTO_KEY}}"
                    },
                    "PG_META_HOST": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "::"
                    },
                    "PG_META_PORT": {
                      "isOptional": false,
                      "description": "The port that PG Meta listens on.",
                      "defaultValue": "${{PORT}}"
                    },
                    "PG_META_DB_HOST": {
                      "isOptional": false,
                      "description": "DB networking host.",
                      "defaultValue": "${{Postgres.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PG_META_DB_NAME": {
                      "isOptional": false,
                      "description": "Database name within Postgres.",
                      "defaultValue": "${{Postgres.DB_NAME}}"
                    },
                    "PG_META_DB_PORT": {
                      "isOptional": false,
                      "description": "DB port.",
                      "defaultValue": "${{Postgres.PORT}}"
                    },
                    "PG_META_DB_USER": {
                      "isOptional": false,
                      "description": "The Postgres role that PG Meta will make queries as.",
                      "defaultValue": "supabase_admin"
                    },
                    "PG_META_DB_PASSWORD": {
                      "isOptional": false,
                      "description": "The Postgres password for DB user.",
                      "defaultValue": "${{Postgres.DB_SUPERUSER_PASSWORD}}"
                    }
                  }
                },
                "c60ad27a-40fb-417c-ac55-67279bd36b89": {
                  "icon": "https://supabase.com/favicon/favicon-196x196.png",
                  "name": "Supabase Auth",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/auth"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "9999"
                    },
                    "GOTRUE_JWT_AUD": {
                      "isOptional": false,
                      "description": "the \"aud\" key on every JWT payload.",
                      "defaultValue": "authenticated"
                    },
                    "GOTRUE_JWT_EXP": {
                      "isOptional": false,
                      "description": "Time before refreshing sessions. Default one hour.",
                      "defaultValue": "${{Postgres.JWT_EXPIRY}}"
                    },
                    "GOTRUE_API_HOST": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "::"
                    },
                    "GOTRUE_API_PORT": {
                      "isOptional": false,
                      "description": "The port that Auth listens at.",
                      "defaultValue": "${{PORT}}"
                    },
                    "GOTRUE_SITE_URL": {
                      "isOptional": false,
                      "description": "Public url for site for Auth redirects.",
                      "defaultValue": "https://${{Site.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "API_EXTERNAL_URL": {
                      "isOptional": false,
                      "description": "Public url for Kong for redirects.",
                      "defaultValue": "https://${{Kong.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "GOTRUE_DB_DRIVER": {
                      "isOptional": false,
                      "description": "Must be \"postgres\".",
                      "defaultValue": "postgres"
                    },
                    "GOTRUE_SMTP_HOST": {
                      "isOptional": true,
                      "description": "SMTP server for transactional emails.",
                      "defaultValue": "smtp.gmail.com"
                    },
                    "GOTRUE_SMTP_PASS": {
                      "isOptional": true,
                      "description": "SMTP password for authentication with the server.",
                      "defaultValue": "abcd efgh ijkl mnop"
                    },
                    "GOTRUE_SMTP_PORT": {
                      "isOptional": true,
                      "description": "The port your SMTP provider listens at.",
                      "defaultValue": "587"
                    },
                    "GOTRUE_SMTP_USER": {
                      "isOptional": true,
                      "description": "SMTP user for authentication with the server.",
                      "defaultValue": "myapp@gmail.com"
                    },
                    "GOTRUE_JWT_ISSUER": {
                      "description": "Value for the 'iss' field in session tokens",
                      "defaultValue": "${{API_EXTERNAL_URL}}/auth/v1"
                    },
                    "GOTRUE_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Project JWT secret.",
                      "defaultValue": "${{Postgres.JWT_SECRET}}"
                    },
                    "GOTRUE_DB_DATABASE_URL": {
                      "isOptional": false,
                      "description": "Postgres connection string.",
                      "defaultValue": "postgres://supabase_auth_admin:${{Postgres.DB_AUTH_PASSWORD}}@${{Postgres.RAILWAY_PRIVATE_DOMAIN}}:${{Postgres.PORT}}/${{Postgres.DB_NAME}}"
                    },
                    "GOTRUE_JWT_ADMIN_ROLES": {
                      "isOptional": false,
                      "description": "Admin role to include in service_role JWTs.",
                      "defaultValue": "service_role"
                    },
                    "GOTRUE_SMTP_ADMIN_EMAIL": {
                      "isOptional": true,
                      "description": "Email address to receive troubleshooting emails.",
                      "defaultValue": "johndoe@gmail.com"
                    },
                    "GOTRUE_SMTP_SENDER_NAME": {
                      "isOptional": false,
                      "description": "Transactional email sender name.",
                      "defaultValue": "PG On Rails"
                    },
                    "GOTRUE_MAILER_AUTOCONFIRM": {
                      "isOptional": false,
                      "description": "Set to \"true\" to disable emails, which can be useful in development. Set to \"false\" to require email confirmations. NOTE - SMTP traffic on Railway is only allowed for the Pro Plan and above.",
                      "defaultValue": "true"
                    },
                    "GOTRUE_MAILER_EXTERNAL_HOSTS": {
                      "isOptional": false,
                      "description": "Auth should expect requests from these hosts.",
                      "defaultValue": "${{Kong.RAILWAY_PRIVATE_DOMAIN}},${{Kong.RAILWAY_PUBLIC_DOMAIN}},${{Site.RAILWAY_PRIVATE_DOMAIN}},${{Site.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "GOTRUE_JWT_DEFAULT_GROUP_NAME": {
                      "isOptional": false,
                      "description": "The default role that is given to users in their access token after authentication. Used by Postgres for row-level-security (RLS).",
                      "defaultValue": "authenticated"
                    },
                    "GOTRUE_MAILER_URLPATHS_INVITE": {
                      "isOptional": false,
                      "description": "Where to redirect users from emails. Relative path within Kong.",
                      "defaultValue": "/auth/v1/verify"
                    },
                    "GOTRUE_MAILER_TEMPLATES_INVITE": {
                      "isOptional": false,
                      "description": "Invite email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/invite.html"
                    },
                    "AUTH_LOCAL_MAILER_TEMPLATES_URL": {
                      "isOptional": false,
                      "description": "Local path within the Auth docker container to fetch email templates.",
                      "defaultValue": "http://localhost:8080"
                    },
                    "GOTRUE_MAILER_URLPATHS_RECOVERY": {
                      "isOptional": false,
                      "description": "Where to redirect users from emails. Relative path within Kong.",
                      "defaultValue": "/auth/v1/verify"
                    },
                    "GOTRUE_MAILER_TEMPLATES_RECOVERY": {
                      "isOptional": false,
                      "description": "Forgot password email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/recovery.html"
                    },
                    "GOTRUE_MAILER_TEMPLATES_MAGIC_LINK": {
                      "isOptional": false,
                      "description": "Magic link signin email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/magiclink.html"
                    },
                    "GOTRUE_MAILER_URLPATHS_CONFIRMATION": {
                      "isOptional": false,
                      "description": "Where to redirect users from emails. Relative path within Kong.",
                      "defaultValue": "/auth/v1/verify"
                    },
                    "GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE": {
                      "isOptional": false,
                      "description": "Where to redirect users from emails. Relative path within Kong.",
                      "defaultValue": "/auth/v1/verify"
                    },
                    "GOTRUE_MAILER_TEMPLATES_CONFIRMATION": {
                      "isOptional": false,
                      "description": "Confirm signup email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/confirmation.html"
                    },
                    "GOTRUE_MAILER_TEMPLATES_EMAIL_CHANGE": {
                      "isOptional": false,
                      "description": "Email change email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/emailchange.html"
                    },
                    "GOTRUE_MAILER_SUBJECTS_REAUTHENTICATION": {
                      "isOptional": false,
                      "description": "The default subject for the OTP email is cringe and needs to be overridden.",
                      "defaultValue": "Your One-Time Passcode"
                    },
                    "GOTRUE_MAILER_TEMPLATES_REAUTHENTICATION": {
                      "isOptional": false,
                      "description": "Password change OTP template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/reauthentication.html"
                    },
                    "GOTRUE_MAILER_TEMPLATES_EMAIL_CHANGED_NOTIFICATION": {
                      "isOptional": false,
                      "description": "Email changed notification email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/emailchanged.html"
                    },
                    "GOTRUE_MAILER_TEMPLATES_PHONE_CHANGED_NOTIFICATION": {
                      "isOptional": false,
                      "description": "Phone changed notification email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/phonechanged.html"
                    },
                    "GOTRUE_MAILER_TEMPLATES_IDENTITY_LINKED_NOTIFICATION": {
                      "description": "Identity linked notification email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/identitylinked.html"
                    },
                    "GOTRUE_MAILER_TEMPLATES_PASSWORD_CHANGED_NOTIFICATION": {
                      "isOptional": false,
                      "description": "Password changed notification email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/passwordchanged.html"
                    },
                    "GOTRUE_MAILER_TEMPLATES_IDENTITY_UNLINKED_NOTIFICATION": {
                      "description": "Identity unlinked notification email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/identityunlinked.html"
                    },
                    "GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_ENROLLED_NOTIFICATION": {
                      "isOptional": false,
                      "description": "MFA factor enrolled notification email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/mfafactorenrolled.html"
                    },
                    "GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION": {
                      "isOptional": false,
                      "description": "When set to \"true\", when a user hasn't manually signed in for 24 hours, in order to change their password, they must provide a OTP from their email or phone.",
                      "defaultValue": "false"
                    },
                    "GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_UNENROLLED_NOTIFICATION": {
                      "isOptional": false,
                      "description": "MFA factor unenrolled notification email template.",
                      "defaultValue": "${{AUTH_LOCAL_MAILER_TEMPLATES_URL}}/mfafactorunenrolled.html"
                    }
                  }
                },
                "d0e9df4b-7597-4008-a13f-82ca1888e11c": {
                  "icon": "https://cdn.prod.website-files.com/681c8426519d8db8f867c1e8/681c8426519d8db8f867c1f2_favicon-32x32.png",
                  "name": "MinIO",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/minio"
                  },
                  "variables": {
                    "PORT": {
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "9000"
                    },
                    "S3_ID": {
                      "description": "S3 id for other services to reference.",
                      "defaultValue": "{{S3_ID}}"
                    },
                    "S3_SECRET": {
                      "description": "S3 secret for other services to reference.",
                      "defaultValue": "{{S3_SECRET}}"
                    },
                    "CONSOLE_PORT": {
                      "description": "Port for the MinIO admin console. Public networking over HTTP must be turned on for the service, and pointed at port 9001.",
                      "defaultValue": "9001"
                    },
                    "MINIO_ROOT_USER": {
                      "isOptional": false,
                      "description": "S3 id.",
                      "defaultValue": "${{S3_ID}}"
                    },
                    "STORAGE_S3_BUCKET": {
                      "isOptional": false,
                      "description": "name of top-level bucket. objects are stored in a structure of <top-level-bucket>/<tenant>/<supabase-bucket>/<object>",
                      "defaultValue": "default-bucket"
                    },
                    "MINIO_ROOT_PASSWORD": {
                      "isOptional": false,
                      "description": "S3 secret.",
                      "defaultValue": "${{S3_SECRET}}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "9000": {}
                    },
                    "serviceDomains": {
                      "<hasDomain>:9001": {
                        "port": 9001
                      }
                    }
                  },
                  "volumeMounts": {
                    "d0e9df4b-7597-4008-a13f-82ca1888e11c": {
                      "mountPath": "/data"
                    }
                  }
                },
                "f72010dc-6686-4bfd-bc0a-8b59747fe1d9": {
                  "icon": "https://supabase.com/favicon/favicon-196x196.png",
                  "name": "Supabase Studio",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/BenIsenstein/pgonrails",
                    "rootDirectory": "/studio"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "All PG On Rails services declare PORT to standardize building urls within the Railway private network.",
                      "defaultValue": "3000"
                    },
                    "HOSTNAME": {
                      "isOptional": false,
                      "description": "Defines the network interface that the server binds to when it starts.",
                      "defaultValue": "::"
                    },
                    "POSTGRES_DB": {
                      "description": "DB name within Postgres.",
                      "defaultValue": "${{Postgres.DB_NAME}}"
                    },
                    "SUPABASE_URL": {
                      "isOptional": false,
                      "description": "Private url for Kong.",
                      "defaultValue": "http://${{Kong.RAILWAY_PRIVATE_DOMAIN}}:${{Kong.PORT}}"
                    },
                    "POSTGRES_HOST": {
                      "description": "DB private network host.",
                      "defaultValue": "${{Postgres.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "POSTGRES_PORT": {
                      "description": "DB port.",
                      "defaultValue": "${{Postgres.PORT}}"
                    },
                    "OPENAI_API_KEY": {
                      "isOptional": true,
                      "description": "API key to use the AI assistant in Supabase Studio and be billed from your OpenAI account.",
                      "defaultValue": ""
                    },
                    "AUTH_JWT_SECRET": {
                      "isOptional": false,
                      "description": "Project JWT secret.",
                      "defaultValue": "${{Postgres.JWT_SECRET}}"
                    },
                    "PGRST_DB_SCHEMAS": {
                      "defaultValue": "${{PostgREST.PGRST_DB_SCHEMAS}}"
                    },
                    "PGRST_DB_MAX_ROWS": {
                      "defaultValue": "${{PostgREST.PGRST_DB_MAX_ROWS}}"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Postgres password for DB superuser.",
                      "defaultValue": "${{Postgres.DB_SUPERUSER_PASSWORD}}"
                    },
                    "SUPABASE_ANON_KEY": {
                      "isOptional": false,
                      "description": "Project anon key.",
                      "defaultValue": "${{Postgres.SUPABASE_ANON_KEY}}"
                    },
                    "PG_META_CRYPTO_KEY": {
                      "description": "Encryption key for securing connection strings between Studio and Postgres Meta.",
                      "defaultValue": "${{Postgres Meta.CRYPTO_KEY}}"
                    },
                    "STUDIO_PG_META_URL": {
                      "isOptional": false,
                      "description": "Private url for Postgres Meta.",
                      "defaultValue": "http://${{Postgres Meta.RAILWAY_PRIVATE_DOMAIN}}:${{Postgres Meta.PORT}}"
                    },
                    "SUPABASE_PUBLIC_URL": {
                      "isOptional": false,
                      "description": "Public url for Kong.",
                      "defaultValue": "https://${{Kong.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DEFAULT_PROJECT_NAME": {
                      "isOptional": false,
                      "description": "Project name which appears in the browser tab for Supabase Studio.",
                      "defaultValue": "PG On Rails"
                    },
                    "SUPABASE_SERVICE_KEY": {
                      "isOptional": false,
                      "description": "Project service role key.",
                      "defaultValue": "${{Postgres.SUPABASE_SERVICE_KEY}}"
                    },
                    "DEFAULT_ORGANIZATION_NAME": {
                      "isOptional": false,
                      "description": "Organization name which appears in the browser tab for Supabase Studio",
                      "defaultValue": "My Org"
                    },
                    "ENABLED_FEATURES_LOGS_ALL": {
                      "description": "Not using Logflare analytics on Railway",
                      "defaultValue": "false"
                    },
                    "PGRST_DB_EXTRA_SEARCH_PATH": {
                      "defaultValue": "${{PostgREST.PGRST_DB_EXTRA_SEARCH_PATH}}"
                    },
                    "SNIPPETS_MANAGEMENT_FOLDER": {
                      "description": "Local filepath in the container for SQL snippets",
                      "defaultValue": "/app/snippets"
                    },
                    "EDGE_FUNCTIONS_MANAGEMENT_FOLDER": {
                      "description": "Local filepath in the container for edge functions",
                      "defaultValue": "/app/edge-functions"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 13,
    "needs_volume": true
  },
  "generated_at": "2026-09-15T10:14:39.124Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-14T02:58:32.095Z",
  "success_rate_30d": 0,
  "validation": {
    "last_run_id": "run_89beb1568317442ca91e",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": false,
        "detail": "BUILDING,BUILDING,QUEUED,BUILDING,BUILDING,QUEUED,BUILDING,FAILED,BUILDING,BUILDING,BUILDING,BUILDING,BUILDING"
      }
    ]
  }
}
