Motivation Form

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, and statement — plus media embedding and conditional logic (show_if).

Common properties

PropertyTypeRequiredDescription
idstringYesSnake_case identifier. Used as the key in response payloads. Must be unique within the form.
typestringYesOne of the 12 types below.
labelstringYesDisplayed above the field.
requiredbooleanNoIf true, form cannot be submitted without a value. Default: false.
placeholderstringNoHint text inside the field (text, email, textarea, number only).
help_textstringNoSecondary text displayed below the field.
stepnumberNoGroups 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.

email

Single-line input with email format validation.

- id: contact_email
  type: email
  label: Work email
  required: true
  placeholder: you@company.com

textarea

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 coverage

checkbox

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 & Africa

select

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
    - Flexible

date

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

On this page