{
  "manifest_version": "1.0.0",
  "template": {
    "id": "a4bde00c-3835-492d-9932-6ab2faa77b5d",
    "slug": "serverless-forms",
    "name": "Serverless Forms",
    "description": "NodeJS app to send HTML form submissions by email",
    "url": "https://railway.com/deploy/serverless-forms",
    "upstream": {
      "repo_url": "https://github.com/lexoyo/serverless-forms"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "serverless-forms",
      "source": {
        "repo": "https://github.com/lexoyo/serverless-forms"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "TO",
      "service": "serverless-forms",
      "description": "Email address to send the form to (your email), or a list of email addresses separated by commas, or an array of token / email addresses",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "FROM",
      "service": "serverless-forms",
      "description": "Email address to use as sender address",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "MESSAGE",
      "service": "serverless-forms",
      "description": "Message to displayed after the form submission. May contain HTML.",
      "secret": false,
      "strategy": "default",
      "default": "Thank you for your submission"
    },
    {
      "key": "REDIRECT",
      "service": "serverless-forms",
      "description": "If set to true, the server will redirect to the URL provided in the thanks hidden field of the form",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "DISCLAIMER",
      "service": "serverless-forms",
      "description": "Disclaimer to add at the end of the email. May contain HTML.",
      "secret": false,
      "strategy": "default",
      "default": "A form has been submited on your website. This is an automated email. Please do not reply to this email"
    },
    {
      "key": "EMAIL_HOST",
      "service": "serverless-forms",
      "description": "SMTP config: hostname or IP address to connect to (defaults to ‘localhost’)",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "EMAIL_PASS",
      "service": "serverless-forms",
      "description": "SMTP config: your email password",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "EMAIL_PORT",
      "service": "serverless-forms",
      "description": "SMTP config: port to connect to (defaults to 587 if \"is secure\" is false or 465 if true)",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "EMAIL_USER",
      "service": "serverless-forms",
      "description": "SMTP config: your email logi",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "REDIRECT_DOMAINS",
      "service": "serverless-forms",
      "description": "Comma separated list of domains for which the server will redirect to the URL provided in the thanks hidden field of the form",
      "secret": false,
      "strategy": "default",
      "default": "[]"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "serverless-forms"
      }
    },
    "cli": "railway deploy --template serverless-forms",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "a4bde00c-3835-492d-9932-6ab2faa77b5d",
            "serializedConfig": {
              "services": {
                "c6aa5d4b-71b9-4765-9aec-27d1233b3291": {
                  "icon": null,
                  "name": "serverless-forms",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "lexoyo/serverless-forms",
                    "branch": null,
                    "rootDirectory": null
                  },
                  "variables": {
                    "TO": {
                      "isOptional": false,
                      "description": "Email address to send the form to (your email), or a list of email addresses separated by commas, or an array of token / email addresses",
                      "defaultValue": "{{TO}}"
                    },
                    "FROM": {
                      "isOptional": false,
                      "description": "Email address to use as sender address",
                      "defaultValue": "{{FROM}}"
                    },
                    "HOOK": {
                      "isOptional": true,
                      "description": "URL to send the form data to as a POST request, or a json object with tokens as keys and { \"url\": \"string\", \"headers\": { \"name\": \"value\" } } as values. The form can have an optional hidden field with the name token and the value of the token. If the token is found in the object, the form data will be sent to the corresponding URL.",
                      "defaultValue": ""
                    },
                    "MESSAGE": {
                      "isOptional": true,
                      "description": "Message to displayed after the form submission. May contain HTML.",
                      "defaultValue": "Thank you for your submission"
                    },
                    "REDIRECT": {
                      "isOptional": true,
                      "description": "If set to true, the server will redirect to the URL provided in the thanks hidden field of the form",
                      "defaultValue": "false"
                    },
                    "DISCLAIMER": {
                      "isOptional": true,
                      "description": "Disclaimer to add at the end of the email. May contain HTML.",
                      "defaultValue": "A form has been submited on your website. This is an automated email. Please do not reply to this email"
                    },
                    "EMAIL_HOST": {
                      "isOptional": false,
                      "description": "SMTP config: hostname or IP address to connect to (defaults to ‘localhost’)",
                      "defaultValue": "{{EMAIL_HOST}}"
                    },
                    "EMAIL_PASS": {
                      "isOptional": false,
                      "description": "SMTP config: your email password",
                      "defaultValue": "{{EMAIL_PASS}}"
                    },
                    "EMAIL_PORT": {
                      "isOptional": false,
                      "description": "SMTP config: port to connect to (defaults to 587 if \"is secure\" is false or 465 if true)",
                      "defaultValue": "{{EMAIL_PORT}}"
                    },
                    "EMAIL_USER": {
                      "isOptional": false,
                      "description": "SMTP config: your email logi",
                      "defaultValue": "{{EMAIL_USER}}"
                    },
                    "SITE_FIELD": {
                      "isOptional": true,
                      "description": "Name of the field in the form which contains the site name (used in the email subject)",
                      "defaultValue": ""
                    },
                    "HONEY_FIELD": {
                      "isOptional": true,
                      "description": "Name of the field in the form which is a honeypot (if filled, the form will be considered as spam)",
                      "defaultValue": ""
                    },
                    "TOKEN_FIELD": {
                      "isOptional": true,
                      "description": "Name of the field in the form which contains the token",
                      "defaultValue": ""
                    },
                    "THANKS_FIELD": {
                      "isOptional": true,
                      "description": "Name of the field in the form which contains the URL to redirect to after the form submission",
                      "defaultValue": ""
                    },
                    "REDIRECT_DOMAINS": {
                      "isOptional": true,
                      "description": "Comma separated list of domains for which the server will redirect to the URL provided in the thanks hidden field of the form",
                      "defaultValue": "[]"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 1,
    "needs_volume": false
  },
  "generated_at": "2026-09-14T22:14:43.073Z",
  "generator_version": "0.1.0"
}
