Field types reference
The 12 core field types supported in Motivation Form, with frontmatter examples.
Every field in a form is defined as an item in the fields array of your .md frontmatter. All fields share a common set of properties.
Building a survey? The Survey syntax page covers 7 additional types —
rating,scale,nps,yes_no,ranking,matrix, andstatement— plus media embedding and conditional logic (show_if).
Common properties
| Property | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Snake_case identifier. Used as the key in response payloads. Must be unique within the form. |
type | string | Yes | One of the 12 types below. |
label | string | Yes | Displayed above the field. |
required | boolean | No | If true, form cannot be submitted without a value. Default: false. |
placeholder | string | No | Hint text inside the field (text, email, textarea, number only). |
help_text | string | No | Secondary text displayed below the field. |
step | number | No | Groups fields into multi-step form pages. Fields with the same step appear together. |
text
Single-line text input.
- id: company_name
type: text
label: Company name
required: true
placeholder: Acme Corp
help_text: Legal entity name as it appears on your registration.Single-line input with email format validation.
- id: contact_email
type: email
label: Work email
required: true
placeholder: you@company.comtextarea
Multi-line text input.
- id: description
type: textarea
label: Campaign description
required: true
placeholder: Describe your campaign goals and target audience.number
Numeric input. Accepts integers and decimals.
- id: budget_usd
type: number
label: Budget (USD)
placeholder: "50000"
help_text: Approximate total budget for this campaign.radio
Single-choice selection from a predefined list. Renders as radio buttons.
- id: campaign_type
type: radio
label: Campaign type
required: true
options:
- CEX listing
- OTC partnership
- Influencer campaign
- Media coveragecheckbox
Multi-choice selection. Renders as checkboxes. Response value is an array of selected options.
- id: regions
type: checkbox
label: Target regions
options:
- North America
- Europe
- Asia Pacific
- Latin America
- Middle East & Africaselect
Single-choice selection rendered as a dropdown.
- id: timeline
type: select
label: Desired launch timeline
required: true
options:
- Within 2 weeks
- 1 month
- 1–3 months
- Flexibledate
Date picker. Response value is an ISO 8601 date string (YYYY-MM-DD).
- id: launch_date
type: date
label: Target launch date
help_text: The date you want the campaign to go live.image
File upload restricted to image formats. The file is uploaded directly to Supabase Storage; the response payload contains the storage URL.
- id: logo
type: image
label: Brand logo
accept:
- image/png
- image/jpeg
- image/svg+xml
max_mb: 5
help_text: Upload a PNG or SVG for best quality.video
File upload restricted to video formats. The file is uploaded directly to Supabase Storage; the response payload contains the storage URL.
- id: demo_video
type: video
label: Product walkthrough
accept:
- video/mp4
- video/webm
max_mb: 50
help_text: Upload a short walkthrough or screen recording.audio
Audio response. The respondent either uploads an audio file or records one in-browser (microphone permission is requested only when they click Record). Either path produces a file, and the response payload contains the storage URL — identical to video/file.
- id: voice_note
type: audio
label: Record or upload a voice note
accept:
- audio/webm
- audio/mpeg
- audio/wav
max_mb: 25
help_text: Tap Record to capture audio, or upload an existing clip.In-browser recording falls back gracefully: if the browser lacks MediaRecorder or the respondent denies microphone access, the field shows a message and the upload path still works.
file
General file upload. Use accept to restrict MIME types. Like image, the payload contains the storage URL.
- id: brief_pdf
type: file
label: Campaign brief (PDF)
accept:
- application/pdf
max_mb: 20
help_text: Upload your full campaign brief as a PDF.code
Code snippet input. Renders as a monospace textarea and stores the submitted snippet as text.
- id: integration_snippet
type: code
label: Paste your current integration code
language: typescript
max_lines: 16
help_text: Include only the relevant block.Multi-step forms
Group fields into pages with the step property. All fields sharing the same step value appear on the same page. Steps must be positive integers, and fields without a step are placed on step 1.
fields:
- id: name
type: text
label: Your name
required: true
step: 1
- id: email
type: email
label: Email
required: true
step: 1
- id: campaign_type
type: radio
label: Campaign type
options: [CEX, OTC, Media]
step: 2
- id: brief
type: textarea
label: Campaign brief
step: 2
- id: logo
type: image
label: Brand logo
step: 3