{
  "manifest_version": "1.0.0",
  "template": {
    "id": "edfee211-2ef6-4d0c-8811-48adb8ce6fd5",
    "slug": "securo-1",
    "name": "securo",
    "description": "Privacy-first personal finance with budgets, investments and invoices",
    "url": "https://railway.com/deploy/securo-1",
    "upstream": {
      "image": "ghcr.io/securo-finance/securo-frontend:0.15.1"
    }
  },
  "services": [
    {
      "name": "redis",
      "source": {
        "image": "redis:8.10.1"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "postgres",
      "source": {
        "image": "pgvector/pgvector:0.8.6-pg16"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "http": false
    },
    {
      "name": "backend",
      "source": {
        "image": "ghcr.io/securo-finance/securo-backend:0.15.1"
      },
      "needs_volume": true,
      "volume_mount_path": "/app/data/attachments",
      "http": false
    },
    {
      "name": "frontend",
      "source": {
        "image": "ghcr.io/securo-finance/securo-frontend:0.15.1"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PGDATA",
      "service": "postgres",
      "description": "Provide a value for PGDATA.",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "POSTGRES_DB",
      "service": "postgres",
      "description": "Provide a value for POSTGRES_DB.",
      "secret": false,
      "strategy": "default",
      "default": "securo"
    },
    {
      "key": "POSTGRES_USER",
      "service": "postgres",
      "description": "Provide a value for POSTGRES_USER.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "postgres",
      "description": "Provide a value for POSTGRES_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "backend",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8000"
    },
    {
      "key": "DEBUG",
      "service": "backend",
      "description": "Provide a value for DEBUG.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "APP_NAME",
      "service": "backend",
      "description": "Provide a value for APP_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "Securo"
    },
    {
      "key": "ALGORITHM",
      "service": "backend",
      "description": "Provide a value for ALGORITHM.",
      "secret": false,
      "strategy": "default",
      "default": "HS256"
    },
    {
      "key": "LOGO_SIZE",
      "service": "backend",
      "description": "Provide a value for LOGO_SIZE.",
      "secret": false,
      "strategy": "default",
      "default": "128"
    },
    {
      "key": "REDIS_URL",
      "service": "backend",
      "description": "Provide a value for REDIS_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SECRET_KEY",
      "service": "backend",
      "description": "Provide a value for SECRET_KEY.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "OIDC_SCOPES",
      "service": "backend",
      "description": "Provide a value for OIDC_SCOPES.",
      "secret": false,
      "strategy": "default",
      "default": "openid email profile"
    },
    {
      "key": "DATABASE_URL",
      "service": "backend",
      "description": "Provide a value for DATABASE_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "FRONTEND_URL",
      "service": "backend",
      "description": "Provide a value for FRONTEND_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "FX_SYNC_MODE",
      "service": "backend",
      "description": "Provide a value for FX_SYNC_MODE.",
      "secret": false,
      "strategy": "default",
      "default": "on_demand"
    },
    {
      "key": "OIDC_ENABLED",
      "service": "backend",
      "description": "Provide a value for OIDC_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "AGENTS_ENABLED",
      "service": "backend",
      "description": "Provide a value for AGENTS_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "OIDC_SYNC_ROLES",
      "service": "backend",
      "description": "Provide a value for OIDC_SYNC_ROLES.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "DEFAULT_CURRENCY",
      "service": "backend",
      "description": "Provide a value for DEFAULT_CURRENCY.",
      "secret": false,
      "strategy": "default",
      "default": "USD"
    },
    {
      "key": "OIDC_ROLES_CLAIM",
      "service": "backend",
      "description": "Provide a value for OIDC_ROLES_CLAIM.",
      "secret": false,
      "strategy": "default",
      "default": "groups"
    },
    {
      "key": "STORAGE_PROVIDER",
      "service": "backend",
      "description": "Provide a value for STORAGE_PROVIDER.",
      "secret": false,
      "strategy": "default",
      "default": "local"
    },
    {
      "key": "WEBAUTHN_RP_NAME",
      "service": "backend",
      "description": "Provide a value for WEBAUTHN_RP_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "Securo"
    },
    {
      "key": "SIMPLEFIN_API_URL",
      "service": "backend",
      "description": "Provide a value for SIMPLEFIN_API_URL.",
      "secret": false,
      "strategy": "default",
      "default": "https://beta-bridge.simplefin.org"
    },
    {
      "key": "SIMPLEFIN_ENABLED",
      "service": "backend",
      "description": "Provide a value for SIMPLEFIN_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "LOCAL_AUTH_ENABLED",
      "service": "backend",
      "description": "Provide a value for LOCAL_AUTH_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "OIDC_AUTO_REGISTER",
      "service": "backend",
      "description": "Provide a value for OIDC_AUTO_REGISTER.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "OIDC_PROVIDER_NAME",
      "service": "backend",
      "description": "Provide a value for OIDC_PROVIDER_NAME.",
      "secret": false,
      "strategy": "default",
      "default": "OIDC"
    },
    {
      "key": "STORAGE_LOCAL_PATH",
      "service": "backend",
      "description": "Provide a value for STORAGE_LOCAL_PATH.",
      "secret": false,
      "strategy": "default",
      "default": "/app/data/attachments"
    },
    {
      "key": "TRUSTED_PROXY_HOPS",
      "service": "backend",
      "description": "Provide a value for TRUSTED_PROXY_HOPS.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "REGISTRATION_ENABLED",
      "service": "backend",
      "description": "Provide a value for REGISTRATION_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SUPPORTED_CURRENCIES",
      "service": "backend",
      "description": "Provide a value for SUPPORTED_CURRENCIES.",
      "secret": false,
      "strategy": "default",
      "default": "USD,EUR,GBP,BRL,CAD,AUD,CHF,ARS,JPY,MXN,INR,SEK,DKK,NOK,PLN,CZK,HUF,RON,CRC,IDR,COP,CLP,DOP,RUB,GTQ,PHP,UAH,NZD,VND,SGD,AZN,TRY,PKR"
    },
    {
      "key": "AGENTS_MCP_JWT_SECRET",
      "service": "backend",
      "description": "Provide a value for AGENTS_MCP_JWT_SECRET.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AGENTS_EMBEDDING_MODEL",
      "service": "backend",
      "description": "Provide a value for AGENTS_EMBEDDING_MODEL.",
      "secret": false,
      "strategy": "default",
      "default": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
    },
    {
      "key": "AGENTS_OLLAMA_BASE_URL",
      "service": "backend",
      "description": "Provide a value for AGENTS_OLLAMA_BASE_URL.",
      "secret": false,
      "strategy": "default",
      "default": "http://ollama:11434"
    },
    {
      "key": "ENABLE_BANKING_API_URL",
      "service": "backend",
      "description": "Provide a value for ENABLE_BANKING_API_URL.",
      "secret": false,
      "strategy": "default",
      "default": "https://api.enablebanking.com"
    },
    {
      "key": "TESOURO_DIRETO_ENABLED",
      "service": "backend",
      "description": "Provide a value for TESOURO_DIRETO_ENABLED.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "AGENTS_DEFAULT_PROVIDER",
      "service": "backend",
      "description": "Provide a value for AGENTS_DEFAULT_PROVIDER.",
      "secret": false,
      "strategy": "default",
      "default": "ollama"
    },
    {
      "key": "STORAGE_MAX_FILE_SIZE_MB",
      "service": "backend",
      "description": "Provide a value for STORAGE_MAX_FILE_SIZE_MB.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "AGENTS_EMBEDDING_PROVIDER",
      "service": "backend",
      "description": "Provide a value for AGENTS_EMBEDDING_PROVIDER.",
      "secret": false,
      "strategy": "default",
      "default": "native"
    },
    {
      "key": "STORAGE_ALLOWED_EXTENSIONS",
      "service": "backend",
      "description": "Provide a value for STORAGE_ALLOWED_EXTENSIONS.",
      "secret": false,
      "strategy": "default",
      "default": "jpg,jpeg,png,webp,gif,heic,pdf"
    },
    {
      "key": "ACCESS_TOKEN_EXPIRE_MINUTES",
      "service": "backend",
      "description": "Provide a value for ACCESS_TOKEN_EXPIRE_MINUTES.",
      "secret": true,
      "strategy": "default",
      "default": "1440"
    },
    {
      "key": "OIDC_REQUIRE_VERIFIED_EMAIL",
      "service": "backend",
      "description": "Provide a value for OIDC_REQUIRE_VERIFIED_EMAIL.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "AGENTS_MCP_EXTERNAL_TTL_DAYS",
      "service": "backend",
      "description": "Provide a value for AGENTS_MCP_EXTERNAL_TTL_DAYS.",
      "secret": false,
      "strategy": "default",
      "default": "90"
    },
    {
      "key": "OIDC_EXISTING_USER_LINK_MODE",
      "service": "backend",
      "description": "Provide a value for OIDC_EXISTING_USER_LINK_MODE.",
      "secret": false,
      "strategy": "default",
      "default": "disabled"
    },
    {
      "key": "AGENTS_KNOWLEDGE_STORAGE_PATH",
      "service": "backend",
      "description": "Provide a value for AGENTS_KNOWLEDGE_STORAGE_PATH.",
      "secret": false,
      "strategy": "default",
      "default": "/app/data/agent_knowledge"
    },
    {
      "key": "WEBAUTHN_CHALLENGE_TTL_SECONDS",
      "service": "backend",
      "description": "Provide a value for WEBAUTHN_CHALLENGE_TTL_SECONDS.",
      "secret": false,
      "strategy": "default",
      "default": "300"
    },
    {
      "key": "STORAGE_MAX_ATTACHMENTS_PER_INVOICE",
      "service": "backend",
      "description": "Provide a value for STORAGE_MAX_ATTACHMENTS_PER_INVOICE.",
      "secret": false,
      "strategy": "default",
      "default": "20"
    },
    {
      "key": "STORAGE_MAX_ATTACHMENTS_PER_TRANSACTION",
      "service": "backend",
      "description": "Provide a value for STORAGE_MAX_ATTACHMENTS_PER_TRANSACTION.",
      "secret": false,
      "strategy": "default",
      "default": "10"
    },
    {
      "key": "PORT",
      "service": "frontend",
      "description": "Provide a value for PORT.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "BACKEND_URL",
      "service": "frontend",
      "description": "Provide a value for BACKEND_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "FRONTEND_URL",
      "service": "frontend",
      "description": "Provide a value for FRONTEND_URL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "NGINX_ENTRYPOINT_LOCAL_RESOLVERS",
      "service": "frontend",
      "description": "Provide a value for NGINX_ENTRYPOINT_LOCAL_RESOLVERS.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "securo-1"
      }
    },
    "cli": "railway deploy --template securo-1",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "edfee211-2ef6-4d0c-8811-48adb8ce6fd5",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "1c344cc7-4066-4bb6-b499-ac5cf81b95b2": {
                  "icon": null,
                  "name": "redis",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "redis:8.10.1"
                  },
                  "variables": {}
                },
                "51d545dc-faa5-478a-beba-3c95ce2d7b0a": {
                  "icon": null,
                  "name": "postgres",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "pgvector/pgvector:0.8.6-pg16"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "POSTGRES_DB": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "securo"
                    },
                    "POSTGRES_USER": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "postgres"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "51d545dc-faa5-478a-beba-3c95ce2d7b0a": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "be42a260-5f43-4656-b398-5594f8155d54": {
                  "icon": null,
                  "name": "backend",
                  "deploy": {
                    "startCommand": "sh -c 'alembic upgrade head && exec uvicorn app.main:app --host 0.0.0.0 --port 8000'",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/securo-finance/securo-backend:0.15.1",
                    "autoUpdates": {
                      "type": "patch",
                      "schedule": [
                        {
                          "day": 0,
                          "endHour": 24,
                          "startHour": 0
                        },
                        {
                          "day": 6,
                          "endHour": 24,
                          "startHour": 0
                        }
                      ]
                    }
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "8000"
                    },
                    "DEBUG": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "false"
                    },
                    "APP_NAME": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "Securo"
                    },
                    "ALGORITHM": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "HS256"
                    },
                    "LOGO_SIZE": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "128"
                    },
                    "REDIS_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "redis://${{redis.RAILWAY_PRIVATE_DOMAIN}}:6379/0"
                    },
                    "SECRET_KEY": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "{{SECRET_KEY}}"
                    },
                    "OIDC_SCOPES": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "openid email profile"
                    },
                    "DATABASE_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "postgresql+asyncpg://postgres:${{postgres.POSTGRES_PASSWORD}}@${{postgres.RAILWAY_PRIVATE_DOMAIN}}:5432/securo"
                    },
                    "FRONTEND_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "https://${{frontend.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "FX_SYNC_MODE": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "on_demand"
                    },
                    "OIDC_ENABLED": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "false"
                    },
                    "AGENTS_ENABLED": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "false"
                    },
                    "OIDC_CLIENT_ID": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "WEBAUTHN_RP_ID": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "OIDC_SYNC_ROLES": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "false"
                    },
                    "WEBAUTHN_ORIGIN": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "DEFAULT_CURRENCY": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "USD"
                    },
                    "OIDC_ADMIN_ROLES": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "OIDC_ROLES_CLAIM": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "groups"
                    },
                    "PLUGGY_CLIENT_ID": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "STORAGE_PROVIDER": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "local"
                    },
                    "WEBAUTHN_RP_NAME": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "Securo"
                    },
                    "OIDC_REDIRECT_URI": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "SIMPLEFIN_API_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "https://beta-bridge.simplefin.org"
                    },
                    "SIMPLEFIN_ENABLED": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "false"
                    },
                    "STORAGE_S3_BUCKET": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "STORAGE_S3_REGION": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "LOCAL_AUTH_ENABLED": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "true"
                    },
                    "OIDC_AUTO_REGISTER": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "true"
                    },
                    "OIDC_CLIENT_SECRET": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "OIDC_DISCOVERY_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "OIDC_PROVIDER_NAME": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "OIDC"
                    },
                    "STORAGE_LOCAL_PATH": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "/app/data/attachments"
                    },
                    "TRUSTED_PROXY_HOPS": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "1"
                    },
                    "AGENTS_DEFAULT_MODEL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "PLUGGY_CLIENT_SECRET": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "REGISTRATION_ENABLED": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "true"
                    },
                    "SUPPORTED_CURRENCIES": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "USD,EUR,GBP,BRL,CAD,AUD,CHF,ARS,JPY,MXN,INR,SEK,DKK,NOK,PLN,CZK,HUF,RON,CRC,IDR,COP,CLP,DOP,RUB,GTQ,PHP,UAH,NZD,VND,SGD,AZN,TRY,PKR"
                    },
                    "AGENTS_MCP_JWT_SECRET": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "{{AGENTS_MCP_JWT_SECRET}}"
                    },
                    "AGENTS_OPENAI_API_KEY": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "ENABLE_BANKING_APP_ID": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "STORAGE_S3_ACCESS_KEY": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "STORAGE_S3_SECRET_KEY": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "AGENTS_BUILTIN_MCP_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "AGENTS_EMBEDDING_MODEL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
                    },
                    "AGENTS_OLLAMA_BASE_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "http://ollama:11434"
                    },
                    "ENABLE_BANKING_API_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "https://api.enablebanking.com"
                    },
                    "TESOURO_DIRETO_ENABLED": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "true"
                    },
                    "AGENTS_DEFAULT_PROVIDER": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "ollama"
                    },
                    "AGENTS_EXTERNAL_MCP_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "OIDC_WORKSPACE_ROLE_MAP": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "STORAGE_S3_ENDPOINT_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "AGENTS_ANTHROPIC_API_KEY": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "AGENTS_EXTRA_MCP_SERVERS": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "OPENEXCHANGERATES_APP_ID": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "STORAGE_MAX_FILE_SIZE_MB": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "10"
                    },
                    "AGENTS_EMBEDDING_PROVIDER": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "native"
                    },
                    "PLUGGY_OAUTH_REDIRECT_URI": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "ENABLE_BANKING_PRIVATE_KEY": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "STORAGE_ALLOWED_EXTENSIONS": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "jpg,jpeg,png,webp,gif,heic,pdf"
                    },
                    "ACCESS_TOKEN_EXPIRE_MINUTES": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "1440"
                    },
                    "OIDC_REQUIRE_VERIFIED_EMAIL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "true"
                    },
                    "AGENTS_MCP_EXTERNAL_TTL_DAYS": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "90"
                    },
                    "AGENTS_OPENAI_COMPAT_API_KEY": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "OIDC_EXISTING_USER_LINK_MODE": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "disabled"
                    },
                    "AGENTS_KNOWLEDGE_STORAGE_PATH": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "/app/data/agent_knowledge"
                    },
                    "AGENTS_OPENAI_COMPAT_BASE_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "WEBAUTHN_CHALLENGE_TTL_SECONDS": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "300"
                    },
                    "ENABLE_BANKING_PRIVATE_KEY_FILE": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "ENABLE_BANKING_OAUTH_REDIRECT_URI": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": ""
                    },
                    "STORAGE_MAX_ATTACHMENTS_PER_INVOICE": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "20"
                    },
                    "STORAGE_MAX_ATTACHMENTS_PER_TRANSACTION": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "10"
                    }
                  },
                  "volumeMounts": {
                    "be42a260-5f43-4656-b398-5594f8155d54": {
                      "mountPath": "/app/data/attachments"
                    }
                  }
                },
                "c5a11c25-aaeb-4cc3-a557-f6caddabae92": {
                  "icon": null,
                  "name": "frontend",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "ghcr.io/securo-finance/securo-frontend:0.15.1",
                    "autoUpdates": {
                      "type": "patch",
                      "schedule": [
                        {
                          "day": 0,
                          "endHour": 24,
                          "startHour": 0
                        },
                        {
                          "day": 6,
                          "endHour": 24,
                          "startHour": 0
                        }
                      ]
                    }
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "8080"
                    },
                    "BACKEND_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "http://${{backend.RAILWAY_PRIVATE_DOMAIN}}:8000"
                    },
                    "FRONTEND_URL": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "https://${{frontend.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "NGINX_ENTRYPOINT_LOCAL_RESOLVERS": {
                      "isOptional": true,
                      "description": "",
                      "defaultValue": "1"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 4,
    "needs_volume": true
  },
  "generated_at": "2026-09-20T04:14:40.089Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-20T02:29:15.788Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_4ddc8e211bf14e008a14",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 37,
    "typical_build_seconds": 0,
    "typical_start_seconds": 20,
    "slowest_service": "backend"
  }
}
