{
  "manifest_version": "1.0.0",
  "template": {
    "id": "e8e52c3e-ab29-4783-9a90-371e64bf6d18",
    "slug": "dump-keep",
    "name": "Dump Keep",
    "description": "Encrypted PostgreSQL backups to Google Drive or S3. Runs on a cron.",
    "url": "https://railway.com/deploy/dump-keep",
    "upstream": {
      "image": "ghcr.io/pecatatoshev/dump-keep:latest"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "Dump Keep",
      "source": {
        "image": "ghcr.io/pecatatoshev/dump-keep:latest"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "RETENTION",
      "service": "Dump Keep",
      "description": "Retention durations as daily,weekly,monthly (e.g. 7d,4w,24m). none disables pruning.",
      "secret": false,
      "strategy": "default",
      "default": "7d,4w,24m"
    },
    {
      "key": "S3_REGION",
      "service": "Dump Keep",
      "description": "Region (e.g. us-east-1). Required when STORAGE_BACKEND=s3.",
      "secret": false,
      "strategy": "default",
      "default": "us-east-1"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "Dump Keep",
      "description": "S3 endpoint URL (e.g. https://s3.amazonaws.com). Required when STORAGE_BACKEND=s3.",
      "secret": false,
      "strategy": "default",
      "default": "https://s3.amazonaws.com"
    },
    {
      "key": "POSTGRES_URL",
      "service": "Dump Keep",
      "description": "PostgreSQL superuser connection string. If using Railway Postgres, add it to your project first, then reference it with ${{Postgres.DATABASE_URL}} here.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "AGE_RECIPIENT",
      "service": "Dump Keep",
      "description": "age public key (age1...). Generate with age-keygen.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "S3_PATH_STYLE",
      "service": "Dump Keep",
      "description": "Use path-style addressing (true for MinIO). Default: false.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "SKIP_DATABASES",
      "service": "Dump Keep",
      "description": "Comma-separated database names to skip (e.g. postgres,test_db). Default is disabling postgres db, as all services write to railway db.",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "STORAGE_BACKEND",
      "service": "Dump Keep",
      "description": "Storage backend: gdrive or s3.",
      "secret": false,
      "strategy": "default",
      "default": "s3"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "dump-keep"
      }
    },
    "cli": "railway deploy --template dump-keep",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "e8e52c3e-ab29-4783-9a90-371e64bf6d18",
            "serializedConfig": {
              "services": {
                "10750b12-b6d8-4bd3-9949-c10ef8707538": {
                  "icon": "https://cdn-icons-png.flaticon.com/512/6713/6713079.png",
                  "name": "Dump Keep",
                  "deploy": {
                    "cronSchedule": "0 0 * * *"
                  },
                  "source": {
                    "image": "ghcr.io/pecatatoshev/dump-keep:latest"
                  },
                  "variables": {
                    "RETENTION": {
                      "description": "Retention durations as daily,weekly,monthly (e.g. 7d,4w,24m). none disables pruning.",
                      "defaultValue": "7d,4w,24m"
                    },
                    "S3_BUCKET": {
                      "isOptional": true,
                      "description": "Bucket name (must already exist). Required when STORAGE_BACKEND=s3.",
                      "defaultValue": ""
                    },
                    "S3_PREFIX": {
                      "isOptional": true,
                      "description": "Key prefix for all backups (e.g. backups/postgres/).",
                      "defaultValue": ""
                    },
                    "S3_REGION": {
                      "isOptional": true,
                      "description": "Region (e.g. us-east-1). Required when STORAGE_BACKEND=s3.",
                      "defaultValue": "us-east-1"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": true,
                      "description": "S3 endpoint URL (e.g. https://s3.amazonaws.com). Required when STORAGE_BACKEND=s3.",
                      "defaultValue": "https://s3.amazonaws.com"
                    },
                    "POSTGRES_URL": {
                      "description": "PostgreSQL superuser connection string. If using Railway Postgres, add it to your project first, then reference it with ${{Postgres.DATABASE_URL}} here.",
                      "defaultValue": "{{POSTGRES_URL}}"
                    },
                    "AGE_RECIPIENT": {
                      "description": "age public key (age1...). Generate with age-keygen.",
                      "defaultValue": "{{AGE_RECIPIENT}}"
                    },
                    "S3_ACCESS_KEY": {
                      "isOptional": true,
                      "description": "S3 access key. Required when STORAGE_BACKEND=s3.",
                      "defaultValue": ""
                    },
                    "S3_PATH_STYLE": {
                      "isOptional": true,
                      "description": "Use path-style addressing (true for MinIO). Default: false.",
                      "defaultValue": "false"
                    },
                    "S3_SECRET_KEY": {
                      "isOptional": true,
                      "description": "S3 secret key. Required when STORAGE_BACKEND=s3.",
                      "defaultValue": ""
                    },
                    "GDRIVE_SA_JSON": {
                      "isOptional": true,
                      "description": "Google service account JSON (full file content). Required when STORAGE_BACKEND=gdrive.",
                      "defaultValue": ""
                    },
                    "SKIP_DATABASES": {
                      "isOptional": true,
                      "description": "Comma-separated database names to skip (e.g. postgres,test_db). Default is disabling postgres db, as all services write to railway db.",
                      "defaultValue": "postgres"
                    },
                    "HEALTHCHECK_URL": {
                      "isOptional": true,
                      "description": "healthchecks.io ping URL for failure alerts.",
                      "defaultValue": ""
                    },
                    "STORAGE_BACKEND": {
                      "description": "Storage backend: gdrive or s3.",
                      "defaultValue": "s3"
                    },
                    "GDRIVE_FOLDER_ID": {
                      "isOptional": true,
                      "description": "Parent folder ID for backups. Unset = drive root.",
                      "defaultValue": ""
                    },
                    "SLACK_WEBHOOK_URL": {
                      "isOptional": true,
                      "description": "Slack webhook for failure/heartbeat notifications.",
                      "defaultValue": ""
                    },
                    "DISCORD_WEBHOOK_URL": {
                      "isOptional": true,
                      "description": "Discord webhook for failure/heartbeat notifications.",
                      "defaultValue": ""
                    },
                    "GDRIVE_SHARED_DRIVE_ID": {
                      "isOptional": true,
                      "description": "Shared Drive ID from the folder URL. Required when STORAGE_BACKEND=gdrive.",
                      "defaultValue": ""
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 1,
    "needs_volume": false
  },
  "generated_at": "2026-09-20T16:14:49.616Z",
  "generator_version": "0.1.0"
}
