Field types catalog
The form builder ships with 17 field types. They split into three buckets: input fields that collect data from the visitor, choice fields that constrain the input to a list, and display fields that don't take any input at all but help structure the form.

When you click + Field in the toolbar, you get a menu showing all of them. Pick whichever fits.
Input fields
These accept free-form input — a name, a phone number, an essay.
Text
A single-line input. Best for names, titles, short answers ("What's your favourite worship song?"). The most-used field type by far.
Validation: min_length, max_length. If you set both, the field rejects submissions outside the range.
Textarea
A multi-line input. Best for prayer requests, comments, longer story-style answers. Defaults to three rows tall — it grows automatically as the visitor types.
Validation: same as Text — min_length, max_length.
Email
A text field validated against an email regex (anything@anything.tld). Wrong-format input shows an error on blur.
The form submission flow also automatically uses an email field's value as the submitter_email on the resulting submission row — that's what shows up in the Email column in the submissions table. If you have multiple email fields, the first one with a value wins.
Phone
A text field that accepts a phone number. There's no enforced format because phone validation is messy internationally — but it shows a phone-style keyboard on mobile.
Number
A numeric input with optional min, max, and step. Best for counts ("How many people are coming?"), ages, ratings on a custom scale.
The step value controls the granularity — step: 1 only allows whole numbers, step: 0.5 allows halves.
Date
A date picker. Defaults to today's date in the placeholder. Stores as an ISO date string (YYYY-MM-DD).
Time
A time picker. Stores as HH:MM (24-hour internally; the visitor's locale controls how it's displayed).
URL
A text field validated against https?://.... Useful for "Link to your testimony video" or "Your social media."
File upload
Lets the visitor attach a single file. Uploads go to the form-uploads Supabase storage bucket at the path {org_id}/submissions/{submission_id}/{field_id}/{filename}.
Config:
- Allowed file types — checkbox presets for PDF, Images, Documents, Spreadsheets, plus a custom-extensions text box (
.dwg, .ai, .zip). Defaults to PDF + common image formats. - Max file size (MB) — capped at 100MB. Defaults to 5MB.
If the visitor's file fails either check, the form shows an inline error before they can submit.
Rating
A star-rating control. Visitors tap stars; the value stored is the count selected. The number of stars is configurable from 1–10 (max_stars), defaults to 5.
Best for "How would you rate today's service?" or "Rate the small-group experience."
Choice fields
These constrain the visitor's answer to a list of options you control. You add options in the Type Options section of the field config — click + Add option to add rows.
Select (single)
A dropdown. The visitor picks one option. Best when you have more than five options and don't want them all visible.
Multi-select
A dropdown that allows multiple selections. Selected values are stored as an array.
Radio
Like Select, but renders as a vertical list of radio buttons. The visitor picks one. Best when you have two to five options and want them all visible.
Checkbox
This one's dual-purpose:
- No options configured — renders as a single yes/no checkbox. Used for things like "I agree to be contacted." When marked required, the visitor must tick it to submit.
- Options configured — renders as a list of checkboxes; the visitor can tick any number. Stored as an array of selected values.
Display fields
These don't collect anything. They structure the form.
Heading
A larger-text section header inside a section. Configurable level: H2, H3, or H4. Useful when you've got a single long section but want a visual break inside it ("Personal info" then a few fields, then "Your request" then more fields).
Headings are not required, are not validated, and never appear in submissions. They're pure layout.
Divider
A horizontal rule. Useful between conceptually-different groups of fields when you don't want a heading. Even less data than a heading — no label, no config.
Hidden
A field that doesn't show to the visitor but submits a default value with the submission. Configurable default_value in the field config.
Use cases:
- Tag every submission with the source — e.g. a hidden field
source = "youth-camp-flyer"so you can tell which submissions came from which flyer - Pre-fill a value via URL query string (advanced — requires a custom website-builder block; not yet supported in the standalone form URL)
- Track a campaign code without asking the visitor to type it
Quick decision table
| You want… | Field type |
|---|---|
| A short answer | Text |
| A paragraph answer | Textarea |
| A required email for contact | |
| A phone number | Phone |
| A count, age, or quantity | Number |
| A booking date | Date |
| A start time | Time |
| A link | URL |
| A signed photo / waiver / PDF | File upload |
| A 1–5 satisfaction score | Rating |
| Pick one from many | Select or Radio |
| Pick many from many | Multi-select or Checkbox (with options) |
| A consent tickbox | Checkbox (no options) |
| Section break | Heading or Divider |
| Silent metadata | Hidden |
What's not in the catalog
A few field types that come up sometimes but aren't built in:
- Signature pad — not yet supported. For waivers, ask the visitor to type their name into a Text field labelled "Type your name to sign."
- Conditional logic ("show this field only if the previous one is yes") — not yet supported. If you need branching, build two separate forms and share the right link based on the situation.
- Repeating groups ("add another attendee") — not supported. Ask for a count in a Number field instead.
These are tracked on the roadmap; the form builder is still maturing.
