Forms
Last modified with commit 93ec3fb on
by Martin Jagodic.
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.