Skip to main content
Coming SoonCustom form configuration is planned for a future release. Currently, forms are handled automatically by the experience widget based on your experience settings.

Form Types

Landing pages support several form types depending on the context:
Form TypePurposeAvailability
Experience EntryJoin queue, enter draw, place bidAutomatic (via widget)
Email CaptureCollect email addressesComing soon
Contact FormGeneral inquiriesComing soon
SurveyCollect feedbackComing soon

Experience Entry Forms

The experience widget automatically displays the appropriate form based on authentication requirements.

Guest Entry

For experiences that allow guest access:
┌─────────────────────────────────────────────────┐
│  Join the Queue                                 │
│                                                 │
│  ┌─────────────────────────────────────────┐   │
│  │ Email (optional)                        │   │
│  └─────────────────────────────────────────┘   │
│                                                 │
│            [ Join Now ]                         │
│                                                 │
└─────────────────────────────────────────────────┘

Authenticated Entry

For experiences requiring email or phone verification:
┌─────────────────────────────────────────────────┐
│  Join the Queue                                 │
│                                                 │
│  ┌─────────────────────────────────────────┐   │
│  │ Email                                   │   │
│  └─────────────────────────────────────────┘   │
│                                                 │
│            [ Send Code ]                        │
│                                                 │
│  ─────── or ───────                            │
│                                                 │
│  ┌─────────────────────────────────────────┐   │
│  │ Phone Number                            │   │
│  └─────────────────────────────────────────┘   │
│                                                 │
│            [ Send Code ]                        │
│                                                 │
└─────────────────────────────────────────────────┘

OTP Verification

After submitting email or phone:
┌─────────────────────────────────────────────────┐
│  Verify Your Email                              │
│                                                 │
│  We sent a code to [email protected]
│                                                 │
│  ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐          │
│  │   │ │   │ │   │ │   │ │   │ │   │          │
│  └───┘ └───┘ └───┘ └───┘ └───┘ └───┘          │
│                                                 │
│            [ Verify & Join ]                    │
│                                                 │
│  Didn't receive it? [Resend Code]              │
│                                                 │
└─────────────────────────────────────────────────┘

Access Code Forms

For experiences with access code requirements:

Required Access Code

┌─────────────────────────────────────────────────┐
│  VIP Access Required                            │
│                                                 │
│  Enter your access code to continue             │
│                                                 │
│  ┌─────────────────────────────────────────┐   │
│  │ Access Code                             │   │
│  └─────────────────────────────────────────┘   │
│                                                 │
│            [ Continue ]                         │
│                                                 │
└─────────────────────────────────────────────────┘

Optional Access Code

┌─────────────────────────────────────────────────┐
│  Join the Queue                                 │
│                                                 │
│  ┌─────────────────────────────────────────┐   │
│  │ Email                                   │   │
│  └─────────────────────────────────────────┘   │
│                                                 │
│  Have an access code? (optional)               │
│  ┌─────────────────────────────────────────┐   │
│  │ Access Code                             │   │
│  └─────────────────────────────────────────┘   │
│                                                 │
│            [ Join Now ]                         │
│                                                 │
└─────────────────────────────────────────────────┘

Auction Bidding Forms

For auction experiences:
┌─────────────────────────────────────────────────┐
│  Place Your Bid                                 │
│                                                 │
│  Current Bid: $150.00                           │
│  Minimum Bid: $160.00                           │
│                                                 │
│  ┌─────────────────────────────────────────┐   │
│  │ $ Your Bid                              │   │
│  └─────────────────────────────────────────┘   │
│                                                 │
│  ☐ Enable auto-rebid up to $______            │
│                                                 │
│            [ Place Bid ]                        │
│                                                 │
└─────────────────────────────────────────────────┘

Form Validation

All forms include built-in validation:

Email Validation

{
  type: "email",
  required: true,
  validation: {
    pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
    message: "Please enter a valid email address"
  }
}

Phone Validation

{
  type: "phone",
  required: true,
  validation: {
    international: true,
    message: "Please enter a valid phone number"
  }
}

Access Code Validation

{
  type: "accessCode",
  required: true | false,  // Based on experience settings
  validation: {
    serverSide: true,  // Validated against database
    message: "Invalid or expired access code"
  }
}

Error Handling

Forms display contextual error messages:
ErrorDisplay
Required field empty”This field is required”
Invalid email format”Please enter a valid email”
Invalid access code”Invalid or expired access code”
Rate limited”Too many attempts. Please wait.”
Server error”Something went wrong. Please try again.”
┌─────────────────────────────────────────────────┐
│  Join the Queue                                 │
│                                                 │
│  ┌─────────────────────────────────────────┐   │
│  │ Email                                   │   │
│  └─────────────────────────────────────────┘   │
│  ⚠️ Please enter a valid email address         │
│                                                 │
│            [ Join Now ]                         │
│                                                 │
└─────────────────────────────────────────────────┘

Form Theming

Forms inherit theme settings from your landing page:
ElementTheme Property
Input background--ff-color-background
Input border--ff-color-muted
Input text--ff-color-text
Label text--ff-color-muted
Button--ff-color-primary
Error textSystem red (accessibility)

Coming Soon: Custom Forms

Future releases will include:

Custom Field Types

FieldDescription
TextSingle-line text input
TextareaMulti-line text input
EmailEmail with validation
PhonePhone with country code
SelectDropdown selection
CheckboxSingle checkbox
Checkbox GroupMultiple checkboxes
RadioRadio button group
DateDate picker
FileFile upload

Form Actions

ActionDescription
Submit to APISend data to your endpoint
Send EmailNotify on submission
Add to AudienceAdd consumer to Fanfare audience
WebhookTrigger external integrations

Conditional Logic

Show/hide fields based on responses:
{
  field: "companySize",
  showIf: {
    field: "customerType",
    equals: "business"
  }
}

Current Workarounds

Until custom forms are available:

External Form Embeds

Embed forms from external providers:
<!-- Example: Typeform embed -->
<div data-tf-live="01234567890"></div>
<script src="//embed.typeform.com/next/embed.js"></script>

Webhook Integration

Use Fanfare webhooks to capture data when consumers join experiences:
// Webhook payload includes consumer data
{
  event: "consumer.joined",
  data: {
    consumerId: "cons_...",
    email: "[email protected]",
    experienceId: "exp_...",
    metadata: { ... }
  }
}
See Webhooks for setup instructions.

Next Steps