Forms & Interaction
At a glance
A form builder that turns any page into an interactive entry point — contact, feedback, registration interest, event RSVP — with field-level validation, submission management, branded email notifications, Turnstile-based anti-spam, CSV export and webhook delivery for CRM integration. Forms drop in as blocks anywhere a page accepts them, can be reused across pages with submissions aggregated in one inbox, and respect page-level access control server-side.
How it works
Forms live as CmsForm documents owned by a CmsSite. The form builder is a field-level editor: editors add fields (text, textarea, email, phone, select, checkbox, radio, date, file upload), set per-field validation, mark fields required, choose layout (single column, two-column responsive) and configure submit behavior (thank-you page, redirect, inline message). A form can be embedded on any CmsPage via the `form` block, which references the form by id; the same form can appear on multiple pages and aggregate submissions in one place.
Anti-spam is layered: Cloudflare Turnstile guards every submit by default, honeypot fields catch naive bots, rate limits per IP block flooding, and an optional moderation queue holds suspicious submissions for review. Submissions land in a CmsFormSubmission collection scoped to the form, viewable in admin with filters, search and CSV/Excel export. Editors configure one or more email recipients and an optional auto-reply to the submitter; templates use the site's BrandingConfig for sender-name and colors so the auto-reply matches the visual identity.
RSVP and sign-up forms get a structured event link: the form references an EventNode, captures attendee count and dietary preferences, decrements available seats, and surfaces a confirmation with calendar attachment. Submissions can trigger webhooks for federations that want to push leads into a CRM. Access control respects page gating — a members-only RSVP form only accepts submissions from authenticated members in the right groups, enforced server-side regardless of how the form is embedded.
Key capabilities
- Field-level form builder (text, email, file, select, checkbox, date, etc.)
- Drop forms on any page via the form block, reuse the same form across pages
- Turnstile anti-spam plus honeypot, rate limit and moderation queue
- Submission inbox with filters, search and CSV/Excel export
- Email notifications and branded auto-replies
- Structured RSVP/sign-up forms with seat-count and calendar attachment
- Webhook delivery for CRM integration
In practice
Eva organizes her club's autumn open day and needs a sign-up form. She opens the form builder, picks the 'Event RSVP' template, links it to the existing event, adds two custom fields for dietary requirements and t-shirt size, and sets a 60-attendee cap. She drops the form block on the event landing page, configures notifications to herself and the kitchen volunteer, and writes a friendly auto-reply with the club's brand colors.
Over the next two weeks 47 sign-ups roll in; Turnstile blocks four bot attempts she never sees. She exports the list to Excel for catering, the kitchen volunteer gets each notification in real time, and on event day she has a printed list with allergies marked. After the event she archives the form to keep her dashboard tidy.
Features in this subsystem
5| ID | Status | Features |
|---|---|---|
| F18.07.01 | Shipped | Form builder (contact, feedback, registration interest) — PL-F1807 ✅ PL-F1807 |
| F18.07.02 | Shipped | Form submissions management (view, export, notify) — PL-F1807 ✅ PL-F1807 |
| F18.07.03 | Shipped | Email notification on form submission — PL-F1807 ✅ PL-F1807 |
| F18.07.04 | Shipped | Anti-spam protection (captcha) — PL-F1807 ✅ PL-F1807 |
| F18.07.05 | Shipped | Event RSVP / sign-up forms — PL-F1807 ✅ PL-F1807 |