{
  "manifest_version": "1.0.0",
  "template": {
    "id": "a898bdf9-c08e-46bf-8ff8-7345aa569437",
    "slug": "Pnu7Xd",
    "name": "appflowy-cloud",
    "description": "Appflowy cloud services for self-hosting. ",
    "url": "https://railway.com/deploy/Pnu7Xd",
    "upstream": {
      "repo_url": "https://github.com/zahin-mohammad/appflowy-caddy"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "redis",
      "source": {
        "image": "bitnami/redis:7.2.5"
      },
      "needs_volume": true,
      "volume_mount_path": "/bitnami",
      "tcp_ports": [
        6379
      ],
      "http": false
    },
    {
      "name": "postgres",
      "source": {
        "repo": "https://github.com/zahin-mohammad/appflowy-postgres"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "gotrue",
      "source": {
        "image": "appflowyinc/gotrue"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "appflowy_caddy",
      "source": {
        "repo": "https://github.com/zahin-mohammad/appflowy-caddy"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "minio_console",
      "source": {
        "repo": "https://github.com/railwayapp-templates/minio-console"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "appflowy_cloud",
      "source": {
        "repo": "https://github.com/zahin-mohammad/AppFlowy-Cloud"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "appflowy_admin_frontend",
      "source": {
        "repo": "https://github.com/zahin-mohammad/AppFlowy-Cloud"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "appflowy_ai",
      "source": {
        "image": "appflowyinc/appflowy_ai:latest"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "minio",
      "source": {
        "image": "minio/minio:latest"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "REDISHOST",
      "service": "redis",
      "description": "Railway Private Domain Name.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDISPORT",
      "service": "redis",
      "description": "Port to connect to Redis.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "REDISUSER",
      "service": "redis",
      "description": "Default user to connect to Redis.",
      "secret": false,
      "strategy": "default",
      "default": "default"
    },
    {
      "key": "REDIS_URL",
      "service": "redis",
      "description": "URL to connect to Redis over the private network.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDISPASSWORD",
      "service": "redis",
      "description": "Password to connect to Redis.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "redis",
      "description": "Password to connect to Redis.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "redis",
      "description": "Start Redis process as root to allow for writing to the volume",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "REDIS_PUBLIC_URL",
      "service": "redis",
      "description": "Public URL to connect to Redis, needed for the Data panel.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_RDB_POLICY",
      "service": "redis",
      "description": "Set a RDB snapshot policy.",
      "secret": false,
      "strategy": "default",
      "default": "3600#1 300#100 60#10000"
    },
    {
      "key": "REDIS_AOF_ENABLED",
      "service": "redis",
      "description": "Disable writing to AOF file.",
      "secret": false,
      "strategy": "default",
      "default": "no"
    },
    {
      "key": "RAILWAY_RUN_AS_ROOT",
      "service": "redis",
      "description": "Start Redis process as root to allow for writing to the volume",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PGDATA",
      "service": "postgres",
      "description": "Provide a value for PGDATA.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGHOST",
      "service": "postgres",
      "description": "Provide a value for PGHOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGPORT",
      "service": "postgres",
      "description": "Provide a value for PGPORT.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "PGUSER",
      "service": "postgres",
      "description": "Provide a value for PGUSER.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATABASE",
      "service": "postgres",
      "description": "Provide a value for PGDATABASE.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPASSWORD",
      "service": "postgres",
      "description": "Provide a value for PGPASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "mat9qswvbzhsc2bpmn9bx9sx"
    },
    {
      "key": "POSTGRES_DB",
      "service": "postgres",
      "description": "Provide a value for POSTGRES_DB.",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "DATABASE_URL",
      "service": "postgres",
      "description": "Provide a value for DATABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_USER",
      "service": "postgres",
      "description": "Provide a value for POSTGRES_USER.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "SSL_CERT_DAYS",
      "service": "postgres",
      "description": "Provide a value for SSL_CERT_DAYS.",
      "secret": false,
      "strategy": "default",
      "default": "820"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "postgres",
      "description": "Provide a value for POSTGRES_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "ZxEsIlgoSrxEDwOMpGtkCtlCaMVZsoHg"
    },
    {
      "key": "DATABASE_PUBLIC_URL",
      "service": "postgres",
      "description": "Provide a value for DATABASE_PUBLIC_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILWAY_DOCKERFILE_PATH",
      "service": "postgres",
      "description": "Provide a value for RAILWAY_DOCKERFILE_PATH.",
      "secret": false,
      "strategy": "default",
      "default": "./Dockerfile.latest"
    },
    {
      "key": "PORT",
      "service": "gotrue",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "9999"
    },
    {
      "key": "DATABASE_URL",
      "service": "gotrue",
      "description": "Provide a value for DATABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "GOTRUE_JWT_EXP",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_JWT_EXP.",
      "secret": false,
      "strategy": "default",
      "default": "7200"
    },
    {
      "key": "URI_ALLOW_LIST",
      "service": "gotrue",
      "description": "Provide a value for URI_ALLOW_LIST.",
      "secret": false,
      "strategy": "default",
      "default": "*"
    },
    {
      "key": "GOTRUE_SITE_URL",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_SITE_URL.",
      "secret": false,
      "strategy": "default",
      "default": "appflowy-flutter://"
    },
    {
      "key": "API_EXTERNAL_URL",
      "service": "gotrue",
      "description": "Provide a value for API_EXTERNAL_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "GOTRUE_DB_DRIVER",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_DB_DRIVER.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "GOTRUE_SMTP_HOST",
      "service": "gotrue",
      "description": "The SMTP server. Ex. smtp.gmail.com",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "GOTRUE_SMTP_PASS",
      "service": "gotrue",
      "description": "The SMTP users password. Ex. password123",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "GOTRUE_SMTP_PORT",
      "service": "gotrue",
      "description": "The SMTP server port. Ex. 465 for gmail.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "GOTRUE_SMTP_USER",
      "service": "gotrue",
      "description": "The SMTP user email. Ex. app@my-domain.com",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "GOTRUE_JWT_SECRET",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_JWT_SECRET.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "GOTRUE_SMTP_ADMIN_EMAIL",
      "service": "gotrue",
      "description": "The admin for this deployment. Ex. admin@my-domain.com",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "RAILWAY_DOCKERFILE_PATH",
      "service": "gotrue",
      "description": "Provide a value for RAILWAY_DOCKERFILE_PATH.",
      "secret": false,
      "strategy": "default",
      "default": "./docker/gotrue/Dockerfile"
    },
    {
      "key": "GOTRUE_MAILER_AUTOCONFIRM",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_MAILER_AUTOCONFIRM.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "GOTRUE_SMTP_MAX_FREQUENCY",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_SMTP_MAX_FREQUENCY.",
      "secret": false,
      "strategy": "default",
      "default": "5s"
    },
    {
      "key": "GOTRUE_RATE_LIMIT_EMAIL_SENT",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_RATE_LIMIT_EMAIL_SENT.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_INVITE",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_MAILER_URLPATHS_INVITE.",
      "secret": false,
      "strategy": "default",
      "default": "/gotrue/verify"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_RECOVERY",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_MAILER_URLPATHS_RECOVERY.",
      "secret": false,
      "strategy": "default",
      "default": "/gotrue/verify"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_CONFIRMATION",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_MAILER_URLPATHS_CONFIRMATION.",
      "secret": false,
      "strategy": "default",
      "default": "/gotrue/verify"
    },
    {
      "key": "GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE",
      "service": "gotrue",
      "description": "Provide a value for GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE.",
      "secret": false,
      "strategy": "default",
      "default": "/gotrue/verify"
    },
    {
      "key": "PORT",
      "service": "appflowy_caddy",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "80"
    },
    {
      "key": "ENV_MINIO",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_MINIO.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENV_GOTRUE",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_GOTRUE.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENV_MINIO_PORT",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_MINIO_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ENV_APPFLOWY_AI",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_APPFLOWY_AI.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENV_GOTRUE_PORT",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_GOTRUE_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ENV_ADMIN_FRONTEND",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_ADMIN_FRONTEND.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENV_APPFLOWY_CLOUD",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_APPFLOWY_CLOUD.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ENV_APPFLOWY_AI_PORT",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_APPFLOWY_AI_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ENV_ADMIN_FRONTEND_PORT",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_ADMIN_FRONTEND_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ENV_APPFLOWY_CLOUD_PORT",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENV_APPFLOWY_CLOUD_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILWAY_DOCKERFILE_PATH",
      "service": "appflowy_caddy",
      "description": "Provide a value for RAILWAY_DOCKERFILE_PATH.",
      "secret": false,
      "strategy": "default",
      "default": "./Dockerfile"
    },
    {
      "key": "ENABLEALPINEPRIVATE_NETWORKING",
      "service": "appflowy_caddy",
      "description": "Provide a value for ENABLEALPINEPRIVATE_NETWORKING.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PORT",
      "service": "minio_console",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "9001"
    },
    {
      "key": "PASSWORD",
      "service": "minio_console",
      "description": "Provide a value for PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "USERNAME",
      "service": "minio_console",
      "description": "Provide a value for USERNAME.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CONSOLE_MINIO_SERVER",
      "service": "minio_console",
      "description": "Provide a value for CONSOLE_MINIO_SERVER.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "appflowy_cloud",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "RUST_LOG",
      "service": "appflowy_cloud",
      "description": "Provide a value for RUST_LOG.",
      "secret": false,
      "strategy": "default",
      "default": "debug"
    },
    {
      "key": "DATABASE_URL",
      "service": "appflowy_cloud",
      "description": "Provide a value for DATABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_REDIS_URI",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_REDIS_URI.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_S3_BUCKET",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_S3_BUCKET.",
      "secret": false,
      "strategy": "default",
      "default": "appflowy"
    },
    {
      "key": "APPFLOWY_S3_REGION",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_S3_REGION.",
      "secret": false,
      "strategy": "default",
      "default": "us-east-1"
    },
    {
      "key": "APPFLOWY_ENVIRONMENT",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_ENVIRONMENT.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "APPFLOWY_DATABASE_URL",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_DATABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_S3_MINIO_URL",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_S3_MINIO_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_S3_USE_MINIO",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_S3_USE_MINIO.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "GOTRUE_ADMIN_PASSWORD",
      "service": "appflowy_cloud",
      "description": "Provide a value for GOTRUE_ADMIN_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_S3_ACCESS_KEY",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_S3_ACCESS_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_S3_SECRET_KEY",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_S3_SECRET_KEY.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_ACCESS_CONTROL",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_ACCESS_CONTROL.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "APPFLOWY_AI_SERVER_HOST",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_AI_SERVER_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "APPFLOWY_AI_SERVER_PORT",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_AI_SERVER_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_GOTRUE_EXT_URL",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_GOTRUE_EXT_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "APPFLOWY_GOTRUE_JWT_EXP",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_GOTRUE_JWT_EXP.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILWAY_DOCKERFILE_PATH",
      "service": "appflowy_cloud",
      "description": "Provide a value for RAILWAY_DOCKERFILE_PATH.",
      "secret": false,
      "strategy": "default",
      "default": "Dockerfile"
    },
    {
      "key": "APPFLOWY_GOTRUE_BASE_URL",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_GOTRUE_BASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "APPFLOWY_APPLICATION_HOST",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_APPLICATION_HOST.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "APPFLOWY_APPLICATION_PORT",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_APPLICATION_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "APPFLOWY_MAILER_SMTP_HOST",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_MAILER_SMTP_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_MAILER_SMTP_PORT",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_MAILER_SMTP_PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_S3_CREATE_BUCKET",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_S3_CREATE_BUCKET.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "APPFLOWY_GOTRUE_JWT_SECRET",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_GOTRUE_JWT_SECRET.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_GOTRUE_ADMIN_EMAIL",
      "service": "appflowy_cloud",
      "description": "The admin user",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "APPFLOWY_MAILER_SMTP_PASSWORD",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_MAILER_SMTP_PASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_MAILER_SMTP_USERNAME",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_MAILER_SMTP_USERNAME.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_WEBSOCKET_MAILBOX_SIZE",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_WEBSOCKET_MAILBOX_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "6000"
    },
    {
      "key": "APPFLOWY_DATABASE_MAX_CONNECTIONS",
      "service": "appflowy_cloud",
      "description": "Provide a value for APPFLOWY_DATABASE_MAX_CONNECTIONS.",
      "secret": false,
      "strategy": "default",
      "default": "40"
    },
    {
      "key": "PORT",
      "service": "appflowy_admin_frontend",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "ADMIN_FRONTEND_HOST",
      "service": "appflowy_admin_frontend",
      "description": "Provide a value for ADMIN_FRONTEND_HOST.",
      "secret": false,
      "strategy": "default",
      "default": "::"
    },
    {
      "key": "ADMIN_FRONTEND_PORT",
      "service": "appflowy_admin_frontend",
      "description": "Provide a value for ADMIN_FRONTEND_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "RAILWAY_DOCKERFILE_PATH",
      "service": "appflowy_admin_frontend",
      "description": "Provide a value for RAILWAY_DOCKERFILE_PATH.",
      "secret": false,
      "strategy": "default",
      "default": "./admin_frontend/Dockerfile"
    },
    {
      "key": "ADMIN_FRONTEND_REDIS_URL",
      "service": "appflowy_admin_frontend",
      "description": "Provide a value for ADMIN_FRONTEND_REDIS_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ADMIN_FRONTEND_GOTRUE_URL",
      "service": "appflowy_admin_frontend",
      "description": "Provide a value for ADMIN_FRONTEND_GOTRUE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ADMIN_FRONTEND_APPFLOWY_CLOUD_URL",
      "service": "appflowy_admin_frontend",
      "description": "Provide a value for ADMIN_FRONTEND_APPFLOWY_CLOUD_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PORT",
      "service": "appflowy_ai",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "5001"
    },
    {
      "key": "OPENAI_API_KEY",
      "service": "appflowy_ai",
      "description": "Your Open AI api key",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "APPFLOWY_AI_REDIS_URL",
      "service": "appflowy_ai",
      "description": "Redis URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_AI_SERVER_PORT",
      "service": "appflowy_ai",
      "description": "Provide a value for APPFLOWY_AI_SERVER_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "5001"
    },
    {
      "key": "APPFLOWY_AI_DATABASE_URL",
      "service": "appflowy_ai",
      "description": "Database URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "APPFLOWY_LOCAL_AI_TEST_ENABLED",
      "service": "appflowy_ai",
      "description": "Provide a value for APPFLOWY_LOCAL_AI_TEST_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PORT",
      "service": "minio",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_ROOT_USER",
      "service": "minio",
      "description": "Provide a value for MINIO_ROOT_USER.",
      "secret": false,
      "strategy": "default",
      "default": "JXIfNdmbABLuHhN5fqnpEzjxDNUJPTtX"
    },
    {
      "key": "MINIO_PUBLIC_HOST",
      "service": "minio",
      "description": "Provide a value for MINIO_PUBLIC_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "MINIO_PUBLIC_PORT",
      "service": "minio",
      "description": "Provide a value for MINIO_PUBLIC_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "443"
    },
    {
      "key": "MINIO_PRIVATE_HOST",
      "service": "minio",
      "description": "Provide a value for MINIO_PRIVATE_HOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MINIO_PRIVATE_PORT",
      "service": "minio",
      "description": "Provide a value for MINIO_PRIVATE_PORT.",
      "secret": false,
      "strategy": "default",
      "default": "9000"
    },
    {
      "key": "MINIO_ROOT_PASSWORD",
      "service": "minio",
      "description": "Provide a value for MINIO_ROOT_PASSWORD.",
      "secret": true,
      "strategy": "default",
      "default": "D4OmUojHZ2LfASucL7lGkp8GpwHd25BX1o3iucg5IzEwXUlQ"
    },
    {
      "key": "MINIO_PUBLIC_ENDPOINT",
      "service": "minio",
      "description": "Provide a value for MINIO_PUBLIC_ENDPOINT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_PRIVATE_ENDPOINT",
      "service": "minio",
      "description": "Provide a value for MINIO_PRIVATE_ENDPOINT.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MINIO_BROWSER_REDIRECT_URL",
      "service": "minio",
      "description": "Provide a value for MINIO_BROWSER_REDIRECT_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "Pnu7Xd"
      }
    },
    "cli": "railway deploy --template Pnu7Xd",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "a898bdf9-c08e-46bf-8ff8-7345aa569437",
            "serializedConfig": {
              "services": {
                "07bb3b5e-106a-4c7f-845e-05caaa1b515c": {
                  "icon": "https://devicons.railway.app/i/redis.svg",
                  "name": "redis",
                  "build": {},
                  "deploy": {},
                  "source": {
                    "image": "bitnami/redis:7.2.5"
                  },
                  "variables": {
                    "REDISHOST": {
                      "isOptional": false,
                      "description": "Railway Private Domain Name.",
                      "defaultValue": "${{ RAILWAY_PRIVATE_DOMAIN }}"
                    },
                    "REDISPORT": {
                      "isOptional": false,
                      "description": "Port to connect to Redis.",
                      "defaultValue": "6379"
                    },
                    "REDISUSER": {
                      "isOptional": false,
                      "description": "Default user to connect to Redis.",
                      "defaultValue": "default"
                    },
                    "REDIS_URL": {
                      "isOptional": false,
                      "description": "URL to connect to Redis over the private network.",
                      "defaultValue": "redis://default:${{ REDIS_PASSWORD }}@${{ RAILWAY_PRIVATE_DOMAIN }}:6379"
                    },
                    "REDISPASSWORD": {
                      "isOptional": false,
                      "description": "Password to connect to Redis.",
                      "defaultValue": "${{ REDIS_PASSWORD }}"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Password to connect to Redis.",
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "description": "Start Redis process as root to allow for writing to the volume",
                      "defaultValue": "0"
                    },
                    "REDIS_PUBLIC_URL": {
                      "description": "Public URL to connect to Redis, needed for the Data panel.",
                      "defaultValue": "redis://default:${{ REDIS_PASSWORD }}@${{ RAILWAY_TCP_PROXY_DOMAIN }}:${{ RAILWAY_TCP_PROXY_PORT }}"
                    },
                    "REDIS_RDB_POLICY": {
                      "description": "Set a RDB snapshot policy.",
                      "defaultValue": "3600#1 300#100 60#10000"
                    },
                    "REDIS_AOF_ENABLED": {
                      "description": "Disable writing to AOF file.",
                      "defaultValue": "no"
                    },
                    "RAILWAY_RUN_AS_ROOT": {
                      "isOptional": false,
                      "description": "Start Redis process as root to allow for writing to the volume",
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "6379": {}
                    },
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "07bb3b5e-106a-4c7f-845e-05caaa1b515c": {
                      "mountPath": "/bitnami"
                    }
                  }
                },
                "267b9bf8-76d1-4f6e-ba4d-6616760470d2": {
                  "icon": "https://cdn-icons-png.flaticon.com/512/5968/5968342.png",
                  "name": "postgres",
                  "source": {
                    "repo": "zahin-mohammad/appflowy-postgres",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PGDATA": {
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGHOST": {
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PGPORT": {
                      "defaultValue": "5432"
                    },
                    "PGUSER": {
                      "defaultValue": "${{POSTGRES_USER}}"
                    },
                    "PGDATABASE": {
                      "defaultValue": "${{POSTGRES_DB}}"
                    },
                    "PGPASSWORD": {
                      "defaultValue": "mat9qswvbzhsc2bpmn9bx9sx"
                    },
                    "POSTGRES_DB": {
                      "defaultValue": "railway"
                    },
                    "DATABASE_URL": {
                      "defaultValue": "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:5432/${{PGDATABASE}}"
                    },
                    "POSTGRES_USER": {
                      "defaultValue": "postgres"
                    },
                    "SSL_CERT_DAYS": {
                      "defaultValue": "820"
                    },
                    "POSTGRES_PASSWORD": {
                      "defaultValue": "ZxEsIlgoSrxEDwOMpGtkCtlCaMVZsoHg"
                    },
                    "DATABASE_PUBLIC_URL": {
                      "defaultValue": "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}/${{PGDATABASE}}"
                    },
                    "RAILWAY_DOCKERFILE_PATH": {
                      "defaultValue": "./Dockerfile.latest"
                    }
                  },
                  "volumeMounts": {
                    "267b9bf8-76d1-4f6e-ba4d-6616760470d2": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "3095185b-3c9a-480f-b69b-dbe61fca32db": {
                  "name": "gotrue",
                  "source": {
                    "image": "appflowyinc/gotrue"
                  },
                  "variables": {
                    "PORT": {
                      "defaultValue": "9999"
                    },
                    "DATABASE_URL": {
                      "defaultValue": "postgresql://supabase_auth_admin:root@${{postgres.PGHOST}}:${{postgres.PGPORT}}/${{postgres.POSTGRES_DB}}"
                    },
                    "GOTRUE_JWT_EXP": {
                      "defaultValue": "7200"
                    },
                    "URI_ALLOW_LIST": {
                      "defaultValue": "*"
                    },
                    "GOTRUE_SITE_URL": {
                      "defaultValue": "appflowy-flutter://"
                    },
                    "API_EXTERNAL_URL": {
                      "defaultValue": "https://${{appflowy_caddy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "GOTRUE_DB_DRIVER": {
                      "defaultValue": "postgres"
                    },
                    "GOTRUE_SMTP_HOST": {
                      "description": "The SMTP server. Ex. smtp.gmail.com",
                      "defaultValue": "{{GOTRUE_SMTP_HOST}}"
                    },
                    "GOTRUE_SMTP_PASS": {
                      "description": "The SMTP users password. Ex. password123",
                      "defaultValue": "{{GOTRUE_SMTP_PASS}}"
                    },
                    "GOTRUE_SMTP_PORT": {
                      "description": "The SMTP server port. Ex. 465 for gmail.",
                      "defaultValue": "{{GOTRUE_SMTP_PORT}}"
                    },
                    "GOTRUE_SMTP_USER": {
                      "description": "The SMTP user email. Ex. app@my-domain.com",
                      "defaultValue": "{{GOTRUE_SMTP_USER}}"
                    },
                    "GOTRUE_JWT_SECRET": {
                      "defaultValue": "{{GOTRUE_JWT_SECRET}}"
                    },
                    "GOTRUE_SMTP_ADMIN_EMAIL": {
                      "description": "The admin for this deployment. Ex. admin@my-domain.com",
                      "defaultValue": "{{GOTRUE_SMTP_ADMIN_EMAIL}}"
                    },
                    "RAILWAY_DOCKERFILE_PATH": {
                      "defaultValue": "./docker/gotrue/Dockerfile"
                    },
                    "GOTRUE_MAILER_AUTOCONFIRM": {
                      "defaultValue": "false"
                    },
                    "GOTRUE_SMTP_MAX_FREQUENCY": {
                      "defaultValue": "5s"
                    },
                    "GOTRUE_RATE_LIMIT_EMAIL_SENT": {
                      "defaultValue": "10"
                    },
                    "GOTRUE_MAILER_URLPATHS_INVITE": {
                      "defaultValue": "/gotrue/verify"
                    },
                    "GOTRUE_MAILER_URLPATHS_RECOVERY": {
                      "defaultValue": "/gotrue/verify"
                    },
                    "GOTRUE_MAILER_URLPATHS_CONFIRMATION": {
                      "defaultValue": "/gotrue/verify"
                    },
                    "GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE": {
                      "defaultValue": "/gotrue/verify"
                    }
                  }
                },
                "39916c9e-a163-4234-a530-d6de389d9170": {
                  "icon": "https://www.svgrepo.com/show/373487/caddy.svg",
                  "name": "appflowy_caddy",
                  "source": {
                    "repo": "zahin-mohammad/appflowy-caddy",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PORT": {
                      "defaultValue": "80"
                    },
                    "ENV_MINIO": {
                      "defaultValue": "${{minio_console.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "ENV_GOTRUE": {
                      "description": "",
                      "defaultValue": "${{gotrue.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "ENV_MINIO_PORT": {
                      "defaultValue": "${{minio_console.PORT}}"
                    },
                    "ENV_APPFLOWY_AI": {
                      "defaultValue": "${{appflowy_ai.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "ENV_GOTRUE_PORT": {
                      "description": "",
                      "defaultValue": "${{gotrue.PORT}}"
                    },
                    "ENV_ADMIN_FRONTEND": {
                      "defaultValue": "${{appflowy_admin_frontend.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "ENV_APPFLOWY_CLOUD": {
                      "defaultValue": "${{appflowy_cloud.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "ENV_APPFLOWY_AI_PORT": {
                      "defaultValue": "${{appflowy_ai.PORT}}"
                    },
                    "ENV_ADMIN_FRONTEND_PORT": {
                      "defaultValue": "${{appflowy_admin_frontend.PORT}}"
                    },
                    "ENV_APPFLOWY_CLOUD_PORT": {
                      "defaultValue": "${{appflowy_cloud.PORT}}"
                    },
                    "RAILWAY_DOCKERFILE_PATH": {
                      "defaultValue": "./Dockerfile"
                    },
                    "ENABLEALPINEPRIVATE_NETWORKING": {
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                },
                "55f29cad-0ddd-4abe-9f08-8f66a3b1c8be": {
                  "icon": "https://min.io/resources/img/logo/MINIO_Bird.png",
                  "name": "minio_console",
                  "source": {
                    "repo": "railwayapp-templates/minio-console",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PORT": {
                      "defaultValue": "9001"
                    },
                    "PASSWORD": {
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    },
                    "USERNAME": {
                      "defaultValue": "${{minio.MINIO_ROOT_USER}}"
                    },
                    "CONSOLE_MINIO_SERVER": {
                      "defaultValue": "${{minio.MINIO_PRIVATE_ENDPOINT}}"
                    }
                  }
                },
                "67b6e679-e745-4773-b4b5-0110367b4ee0": {
                  "icon": "https://play-lh.googleusercontent.com/jky7S0U1ZcWewykJM5eg6W4UgZgnw5jeL_jPxKwQA5l6mM9UznGdUOiwE9dOAFlxmuly=w240-h480-rw",
                  "name": "appflowy_cloud",
                  "source": {
                    "repo": "zahin-mohammad/AppFlowy-Cloud",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PORT": {
                      "defaultValue": "8000"
                    },
                    "RUST_LOG": {
                      "defaultValue": "debug"
                    },
                    "DATABASE_URL": {
                      "defaultValue": "${{postgres.DATABASE_URL}}"
                    },
                    "APPFLOWY_REDIS_URI": {
                      "defaultValue": "${{redis.REDIS_URL}}"
                    },
                    "APPFLOWY_S3_BUCKET": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "appflowy"
                    },
                    "APPFLOWY_S3_REGION": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "us-east-1"
                    },
                    "APPFLOWY_ENVIRONMENT": {
                      "defaultValue": "production"
                    },
                    "APPFLOWY_DATABASE_URL": {
                      "defaultValue": "${{postgres.DATABASE_URL}}"
                    },
                    "APPFLOWY_S3_MINIO_URL": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "${{minio.MINIO_PRIVATE_ENDPOINT}}"
                    },
                    "APPFLOWY_S3_USE_MINIO": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "true"
                    },
                    "GOTRUE_ADMIN_PASSWORD": {
                      "defaultValue": "${{gotrue.GOTRUE_SMTP_PASS}}"
                    },
                    "APPFLOWY_S3_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    },
                    "APPFLOWY_S3_SECRET_KEY": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "${{minio.MINIO_ROOT_PASSWORD}}"
                    },
                    "APPFLOWY_ACCESS_CONTROL": {
                      "defaultValue": "true"
                    },
                    "APPFLOWY_AI_SERVER_HOST": {
                      "defaultValue": "http://${{appflowy_ai.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "APPFLOWY_AI_SERVER_PORT": {
                      "defaultValue": "${{appflowy_ai.PORT}}"
                    },
                    "APPFLOWY_GOTRUE_EXT_URL": {
                      "defaultValue": "https://${{caddy.RAILWAY_PUBLIC_DOMAIN}}/gotrue"
                    },
                    "APPFLOWY_GOTRUE_JWT_EXP": {
                      "defaultValue": "${{gotrue.GOTRUE_JWT_EXP}}"
                    },
                    "RAILWAY_DOCKERFILE_PATH": {
                      "defaultValue": "Dockerfile"
                    },
                    "APPFLOWY_GOTRUE_BASE_URL": {
                      "defaultValue": "http://${{gotrue.RAILWAY_PRIVATE_DOMAIN}}:${{gotrue.PORT}}"
                    },
                    "APPFLOWY_APPLICATION_HOST": {
                      "defaultValue": "::"
                    },
                    "APPFLOWY_APPLICATION_PORT": {
                      "defaultValue": "8000"
                    },
                    "APPFLOWY_MAILER_SMTP_HOST": {
                      "defaultValue": "${{gotrue.GOTRUE_SMTP_HOST}}"
                    },
                    "APPFLOWY_MAILER_SMTP_PORT": {
                      "defaultValue": "${{gotrue.GOTRUE_SMTP_PORT}}"
                    },
                    "APPFLOWY_S3_CREATE_BUCKET": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "true"
                    },
                    "APPFLOWY_GOTRUE_JWT_SECRET": {
                      "defaultValue": "${{gotrue.GOTRUE_JWT_SECRET}}"
                    },
                    "APPFLOWY_GOTRUE_ADMIN_EMAIL": {
                      "description": "The admin user",
                      "defaultValue": "{{APPFLOWY_GOTRUE_ADMIN_EMAIL}}"
                    },
                    "APPFLOWY_MAILER_SMTP_PASSWORD": {
                      "defaultValue": "${{gotrue.GOTRUE_SMTP_PASS}}"
                    },
                    "APPFLOWY_MAILER_SMTP_USERNAME": {
                      "defaultValue": "${{gotrue.GOTRUE_SMTP_USER}}"
                    },
                    "APPFLOWY_WEBSOCKET_MAILBOX_SIZE": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "6000"
                    },
                    "APPFLOWY_DATABASE_MAX_CONNECTIONS": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "40"
                    }
                  }
                },
                "8e660843-3a38-4599-8c5f-88b1b7125018": {
                  "icon": "https://play-lh.googleusercontent.com/jky7S0U1ZcWewykJM5eg6W4UgZgnw5jeL_jPxKwQA5l6mM9UznGdUOiwE9dOAFlxmuly=w240-h480-rw",
                  "name": "appflowy_admin_frontend",
                  "source": {
                    "repo": "zahin-mohammad/AppFlowy-Cloud",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "PORT": {
                      "defaultValue": "3000"
                    },
                    "ADMIN_FRONTEND_HOST": {
                      "defaultValue": "::"
                    },
                    "ADMIN_FRONTEND_PORT": {
                      "defaultValue": "3000"
                    },
                    "RAILWAY_DOCKERFILE_PATH": {
                      "defaultValue": "./admin_frontend/Dockerfile"
                    },
                    "ADMIN_FRONTEND_REDIS_URL": {
                      "defaultValue": "${{redis.REDIS_URL}}"
                    },
                    "ADMIN_FRONTEND_GOTRUE_URL": {
                      "defaultValue": "http://${{gotrue.RAILWAY_PRIVATE_DOMAIN}}:${{gotrue.PORT}}"
                    },
                    "ADMIN_FRONTEND_APPFLOWY_CLOUD_URL": {
                      "defaultValue": "http://${{appflowy_cloud.RAILWAY_PRIVATE_DOMAIN}}:${{appflowy_cloud.PORT}}"
                    }
                  }
                },
                "940bb4b6-71df-44fd-8632-469443b92939": {
                  "icon": "https://play-lh.googleusercontent.com/jky7S0U1ZcWewykJM5eg6W4UgZgnw5jeL_jPxKwQA5l6mM9UznGdUOiwE9dOAFlxmuly=w240-h480-rw",
                  "name": "appflowy_ai",
                  "source": {
                    "image": "appflowyinc/appflowy_ai:latest"
                  },
                  "variables": {
                    "PORT": {
                      "defaultValue": "5001"
                    },
                    "OPENAI_API_KEY": {
                      "description": "Your Open AI api key",
                      "defaultValue": "{{OPENAI_API_KEY}}"
                    },
                    "APPFLOWY_AI_REDIS_URL": {
                      "isOptional": false,
                      "description": "Redis URL",
                      "defaultValue": "${{redis.REDIS_URL}}"
                    },
                    "APPFLOWY_AI_SERVER_PORT": {
                      "defaultValue": "5001"
                    },
                    "APPFLOWY_AI_DATABASE_URL": {
                      "isOptional": false,
                      "description": "Database URL",
                      "defaultValue": "postgresql+psycopg://${{postgres.POSTGRES_USER}}:${{postgres.POSTGRES_PASSWORD}}@${{postgres.PGHOST}}:${{postgres.PGPORT}}/${{postgres.POSTGRES_DB}}"
                    },
                    "APPFLOWY_LOCAL_AI_TEST_ENABLED": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "false"
                    }
                  }
                },
                "f7afc810-398d-4ac1-bdbd-446ab60dec03": {
                  "icon": "https://min.io/resources/img/logo/MINIO_Bird.png",
                  "name": "minio",
                  "source": {
                    "image": "minio/minio:latest"
                  },
                  "variables": {
                    "PORT": {
                      "defaultValue": "${{MINIO_PRIVATE_PORT}}"
                    },
                    "MINIO_ROOT_USER": {
                      "defaultValue": "JXIfNdmbABLuHhN5fqnpEzjxDNUJPTtX"
                    },
                    "MINIO_PUBLIC_HOST": {
                      "defaultValue": "${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "MINIO_PUBLIC_PORT": {
                      "defaultValue": "443"
                    },
                    "MINIO_PRIVATE_HOST": {
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "MINIO_PRIVATE_PORT": {
                      "defaultValue": "9000"
                    },
                    "MINIO_ROOT_PASSWORD": {
                      "defaultValue": "D4OmUojHZ2LfASucL7lGkp8GpwHd25BX1o3iucg5IzEwXUlQ"
                    },
                    "MINIO_PUBLIC_ENDPOINT": {
                      "defaultValue": "https://${{MINIO_PUBLIC_HOST}}:${{MINIO_PUBLIC_PORT}}"
                    },
                    "MINIO_PRIVATE_ENDPOINT": {
                      "defaultValue": "http://${{MINIO_PRIVATE_HOST}}:${{MINIO_PRIVATE_PORT}}"
                    },
                    "MINIO_BROWSER_REDIRECT_URL": {
                      "defaultValue": "https://${{minio_console.RAILWAY_PUBLIC_DOMAIN}}"
                    }
                  },
                  "volumeMounts": {
                    "f7afc810-398d-4ac1-bdbd-446ab60dec03": {
                      "mountPath": "/data"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 9,
    "needs_volume": true
  },
  "generated_at": "2026-09-21T16:15:12.787Z",
  "generator_version": "0.1.0"
}
