{
  "manifest_version": "1.0.0",
  "template": {
    "id": "b16e1381-a086-45ed-96f2-dbe33f0b753c",
    "slug": "deskcommcrm",
    "name": "DeskcommCRM",
    "description": "WhatsApp sales CRM with AI agents and a self-hosted Supabase, all in one",
    "url": "https://railway.com/deploy/deskcommcrm",
    "upstream": {
      "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-app:1.0.1"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "storage",
      "source": {
        "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-storage:1.0.1"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/storage",
      "http": false
    },
    {
      "name": "rest",
      "source": {
        "image": "postgrest/postgrest:v14.17"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "worker",
      "source": {
        "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-worker:1.0.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "app",
      "source": {
        "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-app:1.0.1"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "realtime",
      "source": {
        "image": "supabase/realtime:v2.134.10"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "srh",
      "source": {
        "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-srh:1.0.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "auth",
      "source": {
        "image": "supabase/gotrue:v2.196.0"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "db",
      "source": {
        "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-db:1.0.1"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "scheduler",
      "source": {
        "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-scheduler:1.0.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "waha",
      "source": {
        "image": "devlikeapro/waha:latest-2026.7.2"
      },
      "needs_volume": true,
      "volume_mount_path": "/app/.sessions",
      "http": false
    },
    {
      "name": "redis",
      "source": {
        "image": "valkey/valkey:8.1.10-alpine"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "kong",
      "source": {
        "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-kong:1.0.1"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "storage",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "5000"
    },
    {
      "key": "JWT_SECRET",
      "service": "storage",
      "description": "Provide a value for JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_URL",
      "service": "storage",
      "description": "Provide a value for DATABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGREST_URL",
      "service": "storage",
      "description": "Provide a value for POSTGREST_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "STORAGE_PUBLIC_URL",
      "service": "storage",
      "description": "Provide a value for STORAGE_PUBLIC_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PGRST_DB_URI",
      "service": "rest",
      "description": "Provide a value for PGRST_DB_URI.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGRST_DB_SCHEMAS",
      "service": "rest",
      "description": "Provide a value for PGRST_DB_SCHEMAS.",
      "secret": false,
      "strategy": "default",
      "default": "public,storage,graphql_public"
    },
    {
      "key": "PGRST_JWT_SECRET",
      "service": "rest",
      "description": "Provide a value for PGRST_JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGRST_DB_MAX_ROWS",
      "service": "rest",
      "description": "Provide a value for PGRST_DB_MAX_ROWS.",
      "secret": false,
      "strategy": "default",
      "default": "1000"
    },
    {
      "key": "PGRST_SERVER_HOST",
      "service": "rest",
      "description": "Provide a value for PGRST_SERVER_HOST.",
      "secret": false,
      "strategy": "default",
      "default": "*6"
    },
    {
      "key": "PGRST_SERVER_PORT",
      "service": "rest",
      "description": "Provide a value for PGRST_SERVER_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "PGRST_DB_ANON_ROLE",
      "service": "rest",
      "description": "Provide a value for PGRST_DB_ANON_ROLE.",
      "secret": false,
      "strategy": "default",
      "default": "anon"
    },
    {
      "key": "PGRST_DB_USE_LEGACY_GUCS",
      "service": "rest",
      "description": "Provide a value for PGRST_DB_USE_LEGACY_GUCS.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PGRST_APP_SETTINGS_JWT_EXP",
      "service": "rest",
      "description": "Provide a value for PGRST_APP_SETTINGS_JWT_EXP.",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "PGRST_DB_EXTRA_SEARCH_PATH",
      "service": "rest",
      "description": "Provide a value for PGRST_DB_EXTRA_SEARCH_PATH.",
      "secret": false,
      "strategy": "default",
      "default": "public"
    },
    {
      "key": "APP_LOCALE",
      "service": "worker",
      "description": "Provide a value for APP_LOCALE.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "JWT_SECRET",
      "service": "worker",
      "description": "Provide a value for JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SENTRY_DSN",
      "service": "worker",
      "description": "Provide a value for SENTRY_DSN.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WAHA_API_KEY",
      "service": "worker",
      "description": "Provide a value for WAHA_API_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "AI_CRED_AES_KEY",
      "service": "worker",
      "description": "Provide a value for AI_CRED_AES_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "INTERNAL_SECRET",
      "service": "worker",
      "description": "Provide a value for INTERNAL_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_DB_URL",
      "service": "worker",
      "description": "Provide a value for SUPABASE_DB_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "LGPD_SIGNING_KEY",
      "service": "worker",
      "description": "Provide a value for LGPD_SIGNING_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WAHA_HMAC_SECRET",
      "service": "worker",
      "description": "Provide a value for WAHA_HMAC_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WAHA_API_BASE_URL",
      "service": "worker",
      "description": "Provide a value for WAHA_API_BASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CPF_ENCRYPTION_KEY",
      "service": "worker",
      "description": "Provide a value for CPF_ENCRYPTION_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEXT_PUBLIC_APP_URL",
      "service": "worker",
      "description": "Provide a value for NEXT_PUBLIC_APP_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "INTERNAL_CRON_SECRET",
      "service": "worker",
      "description": "Provide a value for INTERNAL_CRON_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SUPABASE_INTERNAL_URL",
      "service": "worker",
      "description": "Provide a value for SUPABASE_INTERNAL_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WAHA_WEBHOOK_BASE_URL",
      "service": "worker",
      "description": "Provide a value for WAHA_WEBHOOK_BASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "UPSTASH_REDIS_REST_URL",
      "service": "worker",
      "description": "Provide a value for UPSTASH_REDIS_REST_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WAHA_BYO_ENCRYPTION_KEY",
      "service": "worker",
      "description": "Provide a value for WAHA_BYO_ENCRYPTION_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NEXT_PUBLIC_SUPABASE_URL",
      "service": "worker",
      "description": "Provide a value for NEXT_PUBLIC_SUPABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "UPSTASH_REDIS_REST_TOKEN",
      "service": "worker",
      "description": "Provide a value for UPSTASH_REDIS_REST_TOKEN.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "IMPERSONATE_COOKIE_SECRET",
      "service": "worker",
      "description": "Provide a value for IMPERSONATE_COOKIE_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "NUVEMSHOP_OAUTH_ENCRYPTION_KEY",
      "service": "worker",
      "description": "Provide a value for NUVEMSHOP_OAUTH_ENCRYPTION_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "app",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "APP_LOCALE",
      "service": "app",
      "description": "Language of the app and of the first organisation: pt-BR or es.",
      "secret": false,
      "strategy": "default",
      "default": "pt-BR"
    },
    {
      "key": "JWT_SECRET",
      "service": "app",
      "description": "Provide a value for JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SENTRY_DSN",
      "service": "app",
      "description": "off, or your own Sentry DSN. Upstream sends error reports to its Sentry unless this is set.",
      "secret": false,
      "strategy": "default",
      "default": "off"
    },
    {
      "key": "OWNER_EMAIL",
      "service": "app",
      "description": "Your e-mail address. It becomes the owner account you sign in with.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "SIGNUP_MODE",
      "service": "app",
      "description": "Self-service signup. so_convite is invite-only; the admin screen can open it later.",
      "secret": false,
      "strategy": "default",
      "default": "so_convite"
    },
    {
      "key": "WAHA_API_KEY",
      "service": "app",
      "description": "Provide a value for WAHA_API_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "OWNER_ORG_NAME",
      "service": "app",
      "description": "Name of the first organisation.",
      "secret": false,
      "strategy": "default",
      "default": "Minha Empresa"
    },
    {
      "key": "OWNER_PASSWORD",
      "service": "app",
      "description": "The owner's first password, generated. Copy it from here to sign in, then change it in the app.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "AI_CRED_AES_KEY",
      "service": "app",
      "description": "AES-256 key for stored AI provider keys. Never change it on a running install.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "INTERNAL_SECRET",
      "service": "app",
      "description": "Provide a value for INTERNAL_SECRET.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "SUPABASE_DB_URL",
      "service": "app",
      "description": "Provide a value for SUPABASE_DB_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "LGPD_SIGNING_KEY",
      "service": "app",
      "description": "Provide a value for LGPD_SIGNING_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "WAHA_HMAC_SECRET",
      "service": "app",
      "description": "Provide a value for WAHA_HMAC_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WAHA_API_BASE_URL",
      "service": "app",
      "description": "Provide a value for WAHA_API_BASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "CPF_ENCRYPTION_KEY",
      "service": "app",
      "description": "AES-256 key for stored CPF numbers. Never change it on a running install.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "NEXT_PUBLIC_APP_URL",
      "service": "app",
      "description": "Provide a value for NEXT_PUBLIC_APP_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "INTERNAL_CRON_SECRET",
      "service": "app",
      "description": "Provide a value for INTERNAL_CRON_SECRET.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "SUPABASE_INTERNAL_URL",
      "service": "app",
      "description": "Provide a value for SUPABASE_INTERNAL_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "WAHA_WEBHOOK_BASE_URL",
      "service": "app",
      "description": "Provide a value for WAHA_WEBHOOK_BASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "UPSTASH_REDIS_REST_URL",
      "service": "app",
      "description": "Provide a value for UPSTASH_REDIS_REST_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "WAHA_BYO_ENCRYPTION_KEY",
      "service": "app",
      "description": "AES-256 key for stored WhatsApp connection credentials. Never change it on a running install.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "NEXT_PUBLIC_SUPABASE_URL",
      "service": "app",
      "description": "Provide a value for NEXT_PUBLIC_SUPABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "UPSTASH_REDIS_REST_TOKEN",
      "service": "app",
      "description": "Provide a value for UPSTASH_REDIS_REST_TOKEN.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "IMPERSONATE_COOKIE_SECRET",
      "service": "app",
      "description": "Provide a value for IMPERSONATE_COOKIE_SECRET.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "NUVEMSHOP_OAUTH_ENCRYPTION_KEY",
      "service": "app",
      "description": "Provide a value for NUVEMSHOP_OAUTH_ENCRYPTION_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "RAILWAY_HEALTHCHECK_TIMEOUT_SEC",
      "service": "app",
      "description": "The first start applies the database schema before the app listens.",
      "secret": false,
      "strategy": "default",
      "default": "900"
    },
    {
      "key": "PORT",
      "service": "realtime",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "4000"
    },
    {
      "key": "DB_HOST",
      "service": "realtime",
      "description": "Provide a value for DB_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_NAME",
      "service": "realtime",
      "description": "Provide a value for DB_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "DB_PORT",
      "service": "realtime",
      "description": "Provide a value for DB_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "DB_USER",
      "service": "realtime",
      "description": "Provide a value for DB_USER.",
      "secret": false,
      "strategy": "default",
      "default": "supabase_admin"
    },
    {
      "key": "APP_NAME",
      "service": "realtime",
      "description": "Provide a value for APP_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "realtime"
    },
    {
      "key": "DNS_NODES",
      "service": "realtime",
      "description": "Provide a value for DNS_NODES.",
      "secret": false,
      "strategy": "default",
      "default": "''"
    },
    {
      "key": "DB_ENC_KEY",
      "service": "realtime",
      "description": "Provide a value for DB_ENC_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ERL_AFLAGS",
      "service": "realtime",
      "description": "Provide a value for ERL_AFLAGS.",
      "secret": false,
      "strategy": "default",
      "default": "-proto_dist inet_tcp"
    },
    {
      "key": "DB_PASSWORD",
      "service": "realtime",
      "description": "Provide a value for DB_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RUN_JANITOR",
      "service": "realtime",
      "description": "Provide a value for RUN_JANITOR.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RLIMIT_NOFILE",
      "service": "realtime",
      "description": "Provide a value for RLIMIT_NOFILE.",
      "secret": false,
      "strategy": "default",
      "default": "10000"
    },
    {
      "key": "API_JWT_SECRET",
      "service": "realtime",
      "description": "Provide a value for API_JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SEED_SELF_HOST",
      "service": "realtime",
      "description": "Provide a value for SEED_SELF_HOST.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SECRET_KEY_BASE",
      "service": "realtime",
      "description": "Provide a value for SECRET_KEY_BASE.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "METRICS_JWT_SECRET",
      "service": "realtime",
      "description": "Provide a value for METRICS_JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SELF_HOST_TENANT_NAME",
      "service": "realtime",
      "description": "Provide a value for SELF_HOST_TENANT_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "realtime"
    },
    {
      "key": "DB_AFTER_CONNECT_QUERY",
      "service": "realtime",
      "description": "Provide a value for DB_AFTER_CONNECT_QUERY.",
      "secret": false,
      "strategy": "default",
      "default": "SET search_path TO _realtime"
    },
    {
      "key": "DISABLE_HEALTHCHECK_LOGGING",
      "service": "realtime",
      "description": "Provide a value for DISABLE_HEALTHCHECK_LOGGING.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SRH_TOKEN",
      "service": "srh",
      "description": "Provide a value for SRH_TOKEN.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "SRH_CONNECTION_STRING",
      "service": "srh",
      "description": "Provide a value for SRH_CONNECTION_STRING.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PORT",
      "service": "auth",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "9999"
    },
    {
      "key": "JWT_SECRET",
      "service": "auth",
      "description": "Signs sessions and the Supabase API keys, generated. Every Supabase service references it.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "GOTRUE_JWT_AUD",
      "service": "auth",
      "description": "Provide a value for GOTRUE_JWT_AUD.",
      "secret": false,
      "strategy": "default",
      "default": "authenticated"
    },
    {
      "key": "GOTRUE_JWT_EXP",
      "service": "auth",
      "description": "Provide a value for GOTRUE_JWT_EXP.",
      "secret": false,
      "strategy": "default",
      "default": "3600"
    },
    {
      "key": "GOTRUE_API_HOST",
      "service": "auth",
      "description": "Provide a value for GOTRUE_API_HOST.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "GOTRUE_API_PORT",
      "service": "auth",
      "description": "Provide a value for GOTRUE_API_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "9999"
    },
    {
      "key": "GOTRUE_SITE_URL",
      "service": "auth",
      "description": "Provide a value for GOTRUE_SITE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "API_EXTERNAL_URL",
      "service": "auth",
      "description": "Provide a value for API_EXTERNAL_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "GOTRUE_DB_DRIVER",
      "service": "auth",
      "description": "Provide a value for GOTRUE_DB_DRIVER.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "GOTRUE_JWT_SECRET",
      "service": "auth",
      "description": "Provide a value for GOTRUE_JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_DISABLE_SIGNUP",
      "service": "auth",
      "description": "Provide a value for GOTRUE_DISABLE_SIGNUP.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "GOTRUE_URI_ALLOW_LIST",
      "service": "auth",
      "description": "Provide a value for GOTRUE_URI_ALLOW_LIST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "GOTRUE_DB_DATABASE_URL",
      "service": "auth",
      "description": "Provide a value for GOTRUE_DB_DATABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "GOTRUE_JWT_ADMIN_ROLES",
      "service": "auth",
      "description": "Provide a value for GOTRUE_JWT_ADMIN_ROLES.",
      "secret": false,
      "strategy": "default",
      "default": "service_role"
    },
    {
      "key": "GOTRUE_MAILER_AUTOCONFIRM",
      "service": "auth",
      "description": "Provide a value for GOTRUE_MAILER_AUTOCONFIRM.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "GOTRUE_EXTERNAL_EMAIL_ENABLED",
      "service": "auth",
      "description": "Provide a value for GOTRUE_EXTERNAL_EMAIL_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "GOTRUE_EXTERNAL_PHONE_ENABLED",
      "service": "auth",
      "description": "Provide a value for GOTRUE_EXTERNAL_PHONE_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "GOTRUE_JWT_DEFAULT_GROUP_NAME",
      "service": "auth",
      "description": "Provide a value for GOTRUE_JWT_DEFAULT_GROUP_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "authenticated"
    },
    {
      "key": "GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED",
      "service": "auth",
      "description": "Provide a value for GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "db",
      "description": "Password of every Supabase database role, generated.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "TZ",
      "service": "scheduler",
      "description": "Provide a value for TZ.",
      "secret": false,
      "strategy": "default",
      "default": "UTC"
    },
    {
      "key": "INTERNAL_SECRET",
      "service": "scheduler",
      "description": "Provide a value for INTERNAL_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DESKCOMM_APP_ORIGIN",
      "service": "scheduler",
      "description": "Provide a value for DESKCOMM_APP_ORIGIN.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PORT",
      "service": "waha",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "WAHA_API_KEY",
      "service": "waha",
      "description": "Provide a value for WAHA_API_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "WHATSAPP_HOOK_URL",
      "service": "waha",
      "description": "Provide a value for WHATSAPP_HOOK_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "WHATSAPP_HOOK_HMAC",
      "service": "waha",
      "description": "Provide a value for WHATSAPP_HOOK_HMAC.",
      "secret": false,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "WHATSAPP_HOOK_EVENTS",
      "service": "waha",
      "description": "Provide a value for WHATSAPP_HOOK_EVENTS.",
      "secret": false,
      "strategy": "default",
      "default": "message.any,message.ack,message.edited,message.revoked,session.status,state.change"
    },
    {
      "key": "WAHA_DASHBOARD_ENABLED",
      "service": "waha",
      "description": "Provide a value for WAHA_DASHBOARD_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "WAHA_DASHBOARD_PASSWORD",
      "service": "waha",
      "description": "Provide a value for WAHA_DASHBOARD_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "WAHA_DASHBOARD_USERNAME",
      "service": "waha",
      "description": "Provide a value for WAHA_DASHBOARD_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "WHATSAPP_DEFAULT_ENGINE",
      "service": "waha",
      "description": "NOWEB connects without a browser, as upstream DeskcommCRM recommends.",
      "secret": false,
      "strategy": "default",
      "default": "NOWEB"
    },
    {
      "key": "WHATSAPP_SWAGGER_ENABLED",
      "service": "waha",
      "description": "Provide a value for WHATSAPP_SWAGGER_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "WHATSAPP_SWAGGER_PASSWORD",
      "service": "waha",
      "description": "Provide a value for WHATSAPP_SWAGGER_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "WHATSAPP_SWAGGER_USERNAME",
      "service": "waha",
      "description": "Provide a value for WHATSAPP_SWAGGER_USERNAME.",
      "secret": false,
      "strategy": "default",
      "default": "admin"
    },
    {
      "key": "WHATSAPP_RESTART_ALL_SESSIONS",
      "service": "waha",
      "description": "Provide a value for WHATSAPP_RESTART_ALL_SESSIONS.",
      "secret": false,
      "strategy": "default",
      "default": "True"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "redis",
      "description": "Provide a value for REDIS_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "kong",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "AUTH_HOST",
      "service": "kong",
      "description": "Provide a value for AUTH_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REST_HOST",
      "service": "kong",
      "description": "Provide a value for REST_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "JWT_SECRET",
      "service": "kong",
      "description": "Provide a value for JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "STORAGE_HOST",
      "service": "kong",
      "description": "Provide a value for STORAGE_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REALTIME_HOST",
      "service": "kong",
      "description": "Provide a value for REALTIME_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "deskcommcrm"
      }
    },
    "cli": "railway deploy --template deskcommcrm",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "b16e1381-a086-45ed-96f2-dbe33f0b753c",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "0e714fda-7382-4fac-8d29-dde4b45785f7": {
                  "icon": null,
                  "name": "storage",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-storage:1.0.1"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "5000"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{auth.JWT_SECRET}}"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "defaultValue": "postgres://supabase_storage_admin:${{db.POSTGRES_PASSWORD}}@${{db.RAILWAY_PRIVATE_DOMAIN}}:5432/postgres"
                    },
                    "POSTGREST_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{rest.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "STORAGE_PUBLIC_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{kong.RAILWAY_PUBLIC_DOMAIN}}"
                    }
                  },
                  "volumeMounts": {
                    "0e714fda-7382-4fac-8d29-dde4b45785f7": {
                      "mountPath": "/var/lib/storage"
                    }
                  }
                },
                "23d6280c-89cf-4bf0-a1b1-fc93961af5ea": {
                  "icon": null,
                  "name": "rest",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "postgrest/postgrest:v14.17"
                  },
                  "variables": {
                    "PGRST_DB_URI": {
                      "isOptional": false,
                      "defaultValue": "postgres://authenticator:${{db.POSTGRES_PASSWORD}}@${{db.RAILWAY_PRIVATE_DOMAIN}}:5432/postgres"
                    },
                    "PGRST_DB_SCHEMAS": {
                      "isOptional": false,
                      "defaultValue": "public,storage,graphql_public"
                    },
                    "PGRST_JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{auth.JWT_SECRET}}"
                    },
                    "PGRST_DB_MAX_ROWS": {
                      "isOptional": false,
                      "defaultValue": "1000"
                    },
                    "PGRST_SERVER_HOST": {
                      "isOptional": false,
                      "defaultValue": "*6"
                    },
                    "PGRST_SERVER_PORT": {
                      "isOptional": false,
                      "defaultValue": "3000"
                    },
                    "PGRST_DB_ANON_ROLE": {
                      "isOptional": false,
                      "defaultValue": "anon"
                    },
                    "PGRST_DB_USE_LEGACY_GUCS": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "PGRST_APP_SETTINGS_JWT_EXP": {
                      "isOptional": false,
                      "defaultValue": "3600"
                    },
                    "PGRST_DB_EXTRA_SEARCH_PATH": {
                      "isOptional": false,
                      "defaultValue": "public"
                    }
                  }
                },
                "2dba0d5d-9ed8-4401-bd8e-7c887179c8eb": {
                  "icon": null,
                  "name": "worker",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-worker:1.0.1"
                  },
                  "variables": {
                    "APP_LOCALE": {
                      "isOptional": false,
                      "defaultValue": "${{app.APP_LOCALE}}"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{auth.JWT_SECRET}}"
                    },
                    "SENTRY_DSN": {
                      "isOptional": false,
                      "defaultValue": "${{app.SENTRY_DSN}}"
                    },
                    "WAHA_API_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{app.WAHA_API_KEY}}"
                    },
                    "AI_CRED_AES_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{app.AI_CRED_AES_KEY}}"
                    },
                    "INTERNAL_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{app.INTERNAL_SECRET}}"
                    },
                    "SUPABASE_DB_URL": {
                      "isOptional": false,
                      "defaultValue": "${{app.SUPABASE_DB_URL}}"
                    },
                    "LGPD_SIGNING_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{app.LGPD_SIGNING_KEY}}"
                    },
                    "WAHA_HMAC_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{app.WAHA_HMAC_SECRET}}"
                    },
                    "WAHA_API_BASE_URL": {
                      "isOptional": false,
                      "defaultValue": "${{app.WAHA_API_BASE_URL}}"
                    },
                    "CPF_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{app.CPF_ENCRYPTION_KEY}}"
                    },
                    "NEXT_PUBLIC_APP_URL": {
                      "isOptional": false,
                      "defaultValue": "${{app.NEXT_PUBLIC_APP_URL}}"
                    },
                    "INTERNAL_CRON_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{app.INTERNAL_CRON_SECRET}}"
                    },
                    "SUPABASE_INTERNAL_URL": {
                      "isOptional": false,
                      "defaultValue": "${{app.SUPABASE_INTERNAL_URL}}"
                    },
                    "WAHA_WEBHOOK_BASE_URL": {
                      "isOptional": false,
                      "defaultValue": "${{app.WAHA_WEBHOOK_BASE_URL}}"
                    },
                    "UPSTASH_REDIS_REST_URL": {
                      "isOptional": false,
                      "defaultValue": "${{app.UPSTASH_REDIS_REST_URL}}"
                    },
                    "WAHA_BYO_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{app.WAHA_BYO_ENCRYPTION_KEY}}"
                    },
                    "NEXT_PUBLIC_SUPABASE_URL": {
                      "isOptional": false,
                      "defaultValue": "${{app.NEXT_PUBLIC_SUPABASE_URL}}"
                    },
                    "UPSTASH_REDIS_REST_TOKEN": {
                      "isOptional": false,
                      "defaultValue": "${{app.UPSTASH_REDIS_REST_TOKEN}}"
                    },
                    "IMPERSONATE_COOKIE_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{app.IMPERSONATE_COOKIE_SECRET}}"
                    },
                    "NUVEMSHOP_OAUTH_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{app.NUVEMSHOP_OAUTH_ENCRYPTION_KEY}}"
                    }
                  }
                },
                "40281cad-2d3d-473e-af4a-b9aebe129062": {
                  "icon": null,
                  "name": "app",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/login",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-app:1.0.1"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "3000"
                    },
                    "APP_LOCALE": {
                      "isOptional": false,
                      "description": "Language of the app and of the first organisation: pt-BR or es.",
                      "defaultValue": "pt-BR"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{auth.JWT_SECRET}}"
                    },
                    "SENTRY_DSN": {
                      "isOptional": false,
                      "description": "off, or your own Sentry DSN. Upstream sends error reports to its Sentry unless this is set.",
                      "defaultValue": "off"
                    },
                    "OWNER_EMAIL": {
                      "isOptional": false,
                      "description": "Your e-mail address. It becomes the owner account you sign in with.",
                      "defaultValue": "{{OWNER_EMAIL}}"
                    },
                    "SIGNUP_MODE": {
                      "isOptional": false,
                      "description": "Self-service signup. so_convite is invite-only; the admin screen can open it later.",
                      "defaultValue": "so_convite"
                    },
                    "WAHA_API_KEY": {
                      "isOptional": false,
                      "defaultValue": "${{waha.WAHA_API_KEY}}"
                    },
                    "OWNER_ORG_NAME": {
                      "isOptional": false,
                      "description": "Name of the first organisation.",
                      "defaultValue": "Minha Empresa"
                    },
                    "OWNER_PASSWORD": {
                      "isOptional": false,
                      "description": "The owner's first password, generated. Copy it from here to sign in, then change it in the app.",
                      "defaultValue": "{{OWNER_PASSWORD}}"
                    },
                    "RESEND_API_KEY": {
                      "isOptional": true,
                      "description": "Optional. Sends invitation and LGPD e-mails through Resend. Without it, invitation links are shown on screen."
                    },
                    "AI_CRED_AES_KEY": {
                      "isOptional": false,
                      "description": "AES-256 key for stored AI provider keys. Never change it on a running install.",
                      "defaultValue": "{{AI_CRED_AES_KEY}}"
                    },
                    "INTERNAL_SECRET": {
                      "isOptional": false,
                      "defaultValue": "{{INTERNAL_SECRET}}"
                    },
                    "SUPABASE_DB_URL": {
                      "isOptional": false,
                      "defaultValue": "postgres://postgres:${{db.POSTGRES_PASSWORD}}@${{db.RAILWAY_PRIVATE_DOMAIN}}:5432/postgres"
                    },
                    "LGPD_SIGNING_KEY": {
                      "isOptional": false,
                      "defaultValue": "{{LGPD_SIGNING_KEY}}"
                    },
                    "WAHA_HMAC_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{waha.WHATSAPP_HOOK_HMAC}}"
                    },
                    "RESEND_FROM_EMAIL": {
                      "isOptional": true,
                      "description": "Optional. Sender address on a domain verified in your Resend account."
                    },
                    "WAHA_API_BASE_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{waha.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "CPF_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "description": "AES-256 key for stored CPF numbers. Never change it on a running install.",
                      "defaultValue": "{{CPF_ENCRYPTION_KEY}}"
                    },
                    "OPENROUTER_API_KEY": {
                      "isOptional": true,
                      "description": "Optional. An instance-wide AI key for the agents. Keys can also be added per organisation in the app."
                    },
                    "NEXT_PUBLIC_APP_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "INTERNAL_CRON_SECRET": {
                      "isOptional": false,
                      "defaultValue": "{{INTERNAL_CRON_SECRET}}"
                    },
                    "SUPABASE_INTERNAL_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{kong.RAILWAY_PRIVATE_DOMAIN}}:8000"
                    },
                    "WAHA_WEBHOOK_BASE_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{RAILWAY_PRIVATE_DOMAIN}}:3000"
                    },
                    "UPSTASH_REDIS_REST_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{srh.RAILWAY_PRIVATE_DOMAIN}}:80"
                    },
                    "WAHA_BYO_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "description": "AES-256 key for stored WhatsApp connection credentials. Never change it on a running install.",
                      "defaultValue": "{{WAHA_BYO_ENCRYPTION_KEY}}"
                    },
                    "NEXT_PUBLIC_SUPABASE_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{kong.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "UPSTASH_REDIS_REST_TOKEN": {
                      "isOptional": false,
                      "defaultValue": "${{srh.SRH_TOKEN}}"
                    },
                    "IMPERSONATE_COOKIE_SECRET": {
                      "isOptional": false,
                      "defaultValue": "{{IMPERSONATE_COOKIE_SECRET}}"
                    },
                    "NUVEMSHOP_OAUTH_ENCRYPTION_KEY": {
                      "isOptional": false,
                      "defaultValue": "{{NUVEMSHOP_OAUTH_ENCRYPTION_KEY}}"
                    },
                    "RAILWAY_HEALTHCHECK_TIMEOUT_SEC": {
                      "isOptional": false,
                      "description": "The first start applies the database schema before the app listens.",
                      "defaultValue": "900"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3000": {
                        "port": 3000
                      }
                    }
                  }
                },
                "40382188-eb80-42c2-b92e-fdd52e1ec29a": {
                  "icon": null,
                  "name": "realtime",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "supabase/realtime:v2.134.10"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "4000"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{db.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DB_NAME": {
                      "isOptional": false,
                      "defaultValue": "postgres"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "defaultValue": "5432"
                    },
                    "DB_USER": {
                      "isOptional": false,
                      "defaultValue": "supabase_admin"
                    },
                    "APP_NAME": {
                      "isOptional": false,
                      "defaultValue": "realtime"
                    },
                    "DNS_NODES": {
                      "isOptional": false,
                      "defaultValue": "''"
                    },
                    "DB_ENC_KEY": {
                      "isOptional": false,
                      "defaultValue": "{{DB_ENC_KEY}}"
                    },
                    "ERL_AFLAGS": {
                      "isOptional": false,
                      "defaultValue": "-proto_dist inet_tcp"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{db.POSTGRES_PASSWORD}}"
                    },
                    "RUN_JANITOR": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "RLIMIT_NOFILE": {
                      "isOptional": false,
                      "defaultValue": "10000"
                    },
                    "API_JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{auth.JWT_SECRET}}"
                    },
                    "SEED_SELF_HOST": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "SECRET_KEY_BASE": {
                      "isOptional": false,
                      "defaultValue": "{{SECRET_KEY_BASE}}"
                    },
                    "METRICS_JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{auth.JWT_SECRET}}"
                    },
                    "SELF_HOST_TENANT_NAME": {
                      "isOptional": false,
                      "defaultValue": "realtime"
                    },
                    "DB_AFTER_CONNECT_QUERY": {
                      "isOptional": false,
                      "defaultValue": "SET search_path TO _realtime"
                    },
                    "DISABLE_HEALTHCHECK_LOGGING": {
                      "isOptional": false,
                      "defaultValue": "true"
                    }
                  }
                },
                "4c570173-bcaf-43ac-841a-4db429a25a26": {
                  "icon": null,
                  "name": "srh",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-srh:1.0.1"
                  },
                  "variables": {
                    "SRH_TOKEN": {
                      "isOptional": false,
                      "defaultValue": "{{SRH_TOKEN}}"
                    },
                    "SRH_CONNECTION_STRING": {
                      "isOptional": false,
                      "defaultValue": "redis://:${{redis.REDIS_PASSWORD}}@${{redis.RAILWAY_PRIVATE_DOMAIN}}:6379"
                    }
                  }
                },
                "656e15f0-c01e-4b3f-9fff-fa67ed6d4569": {
                  "icon": null,
                  "name": "auth",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "supabase/gotrue:v2.196.0"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "9999"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "description": "Signs sessions and the Supabase API keys, generated. Every Supabase service references it.",
                      "defaultValue": "{{JWT_SECRET}}"
                    },
                    "GOTRUE_JWT_AUD": {
                      "isOptional": false,
                      "defaultValue": "authenticated"
                    },
                    "GOTRUE_JWT_EXP": {
                      "isOptional": false,
                      "defaultValue": "3600"
                    },
                    "GOTRUE_API_HOST": {
                      "isOptional": false,
                      "defaultValue": "::"
                    },
                    "GOTRUE_API_PORT": {
                      "isOptional": false,
                      "defaultValue": "9999"
                    },
                    "GOTRUE_SITE_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{app.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "API_EXTERNAL_URL": {
                      "isOptional": false,
                      "defaultValue": "https://${{kong.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "GOTRUE_DB_DRIVER": {
                      "isOptional": false,
                      "defaultValue": "postgres"
                    },
                    "GOTRUE_JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{JWT_SECRET}}"
                    },
                    "GOTRUE_DISABLE_SIGNUP": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "GOTRUE_URI_ALLOW_LIST": {
                      "isOptional": false,
                      "defaultValue": "https://${{app.RAILWAY_PUBLIC_DOMAIN}}/**"
                    },
                    "GOTRUE_DB_DATABASE_URL": {
                      "isOptional": false,
                      "defaultValue": "postgres://supabase_auth_admin:${{db.POSTGRES_PASSWORD}}@${{db.RAILWAY_PRIVATE_DOMAIN}}:5432/postgres"
                    },
                    "GOTRUE_JWT_ADMIN_ROLES": {
                      "isOptional": false,
                      "defaultValue": "service_role"
                    },
                    "GOTRUE_MAILER_AUTOCONFIRM": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "GOTRUE_EXTERNAL_EMAIL_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "true"
                    },
                    "GOTRUE_EXTERNAL_PHONE_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "GOTRUE_JWT_DEFAULT_GROUP_NAME": {
                      "isOptional": false,
                      "defaultValue": "authenticated"
                    },
                    "GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    }
                  }
                },
                "82a84a12-e2e9-4b9b-8bc3-fa55574c0d4c": {
                  "icon": null,
                  "name": "db",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-db:1.0.1"
                  },
                  "variables": {
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Password of every Supabase database role, generated.",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "82a84a12-e2e9-4b9b-8bc3-fa55574c0d4c": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "bcadece5-8f4c-4d48-a091-0573da9bcaf4": {
                  "icon": null,
                  "name": "scheduler",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-scheduler:1.0.1"
                  },
                  "variables": {
                    "TZ": {
                      "isOptional": false,
                      "defaultValue": "UTC"
                    },
                    "INTERNAL_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{app.INTERNAL_SECRET}}"
                    },
                    "DESKCOMM_APP_ORIGIN": {
                      "isOptional": false,
                      "defaultValue": "http://${{app.RAILWAY_PRIVATE_DOMAIN}}:3000"
                    }
                  }
                },
                "c539145e-aead-4694-af20-16ae88c36024": {
                  "icon": null,
                  "name": "waha",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "devlikeapro/waha:latest-2026.7.2"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "3000"
                    },
                    "WAHA_API_KEY": {
                      "isOptional": false,
                      "defaultValue": "{{WAHA_API_KEY}}"
                    },
                    "WHATSAPP_HOOK_URL": {
                      "isOptional": false,
                      "defaultValue": "http://${{app.RAILWAY_PRIVATE_DOMAIN}}:3000/api/v1/webhooks/waha"
                    },
                    "WHATSAPP_HOOK_HMAC": {
                      "isOptional": false,
                      "defaultValue": "{{WHATSAPP_HOOK_HMAC}}"
                    },
                    "WHATSAPP_HOOK_EVENTS": {
                      "isOptional": false,
                      "defaultValue": "message.any,message.ack,message.edited,message.revoked,session.status,state.change"
                    },
                    "WAHA_DASHBOARD_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "WAHA_DASHBOARD_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{WAHA_DASHBOARD_PASSWORD}}"
                    },
                    "WAHA_DASHBOARD_USERNAME": {
                      "isOptional": false,
                      "defaultValue": "admin"
                    },
                    "WHATSAPP_DEFAULT_ENGINE": {
                      "isOptional": false,
                      "description": "NOWEB connects without a browser, as upstream DeskcommCRM recommends.",
                      "defaultValue": "NOWEB"
                    },
                    "WHATSAPP_SWAGGER_ENABLED": {
                      "isOptional": false,
                      "defaultValue": "false"
                    },
                    "WHATSAPP_SWAGGER_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{WAHA_DASHBOARD_PASSWORD}}"
                    },
                    "WHATSAPP_SWAGGER_USERNAME": {
                      "isOptional": false,
                      "defaultValue": "admin"
                    },
                    "WHATSAPP_RESTART_ALL_SESSIONS": {
                      "isOptional": false,
                      "defaultValue": "True"
                    }
                  },
                  "volumeMounts": {
                    "c539145e-aead-4694-af20-16ae88c36024": {
                      "mountPath": "/app/.sessions"
                    }
                  }
                },
                "cbae5069-5e20-41f5-98d5-c828b3fc4a40": {
                  "icon": null,
                  "name": "redis",
                  "deploy": {
                    "startCommand": "sh -c 'exec valkey-server --requirepass \"$REDIS_PASSWORD\"'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "valkey/valkey:8.1.10-alpine"
                  },
                  "variables": {
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    }
                  }
                },
                "de345902-bba3-4d4e-a1ef-de245271dbf5": {
                  "icon": null,
                  "name": "kong",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/youssefsiam38/deskcommcrm-railway-kong:1.0.1"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "defaultValue": "8000"
                    },
                    "AUTH_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{auth.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REST_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{rest.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "JWT_SECRET": {
                      "isOptional": false,
                      "defaultValue": "${{auth.JWT_SECRET}}"
                    },
                    "STORAGE_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{storage.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REALTIME_HOST": {
                      "isOptional": false,
                      "defaultValue": "${{realtime.RAILWAY_PRIVATE_DOMAIN}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8000": {
                        "port": 8000
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "app",
      "method": "GET",
      "path": "/login",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 12,
    "needs_volume": true
  },
  "generated_at": "2026-09-15T22:14:40.394Z",
  "generator_version": "0.1.0"
}
