Forms
Basic forms
They can be constructed via the CMS without the need for developers to set them up.
Fields in basic forms can include:
- Text input
- Email input
- Textarea
- Dropdown of text options
- Checkbox group
- Radio button group
Text paragraphs and headings can be added between fields.
A basic form will include a submit button, a success message, and an error message.
CMS editor will be able to set recipient email addresses for form submissions.
Complex forms
A developer sets up the form and configures strings to be editable in the CMS.
For example: contact form is hardocded and documented on Contact Form page.
Processing form submissions
We have 2 options. Both use Cloudflare Pages Functions for the server-side handler, but they differ in portability and vendor coupling.
Option A: Cloudflare Static Forms Plugin (CF-specific)
What it is:
A Pages Plugin that intercepts forms with the data-static-form-name attribute, parses the submission, and calls a respondWith handler in a Function.
Pros:
- Fast setup for basic forms (no custom routing)
- Works well for simple email forwarding
- Officially supported and production-ready (last updated Sep 15, 2025)
Cons:
- Cloudflare-only (not portable to Netlify/Statichost)
- Still requires a Function to send email and handle validation
- Less flexible for future integrations
Best for:
- Simple forms that will stay on Cloudflare Pages
Option B: Custom Function + Brevo API/SMTP (Portable)
What it is:
A custom endpoint (e.g. /api/forms/submit) that accepts form posts, validates them, and sends email via Brevo (API or SMTP).
Pros:
- Low vendor lock-in (easy to move to Netlify, Vercel, or a custom server)
- Full control over validation, rate limiting, and spam protection
- Easy to extend for future booking API integration
- Email deliverability and GDPR tooling via Brevo
Cons:
- More setup and maintenance than the plugin
- More expensive if using Brevo API for high volume (SMTP is cheaper but less feature-rich)
Best for:
- Forms that may evolve (auto-response, integrations, advanced logic)
- Minimal friction if hosting changes
Recommendation
Use Option B (Custom Function + Brevo API/SMTP).
- It minimizes vendor lock-in while still working on Cloudflare today.
- It keeps GDPR-sensitive data flow under your control.
- It supports future integrations without re-architecture.