Skip to main content

Dynamic Forms

Capture leads and collect data effortlessly. Build beautiful, multi-language forms without coding — contact forms, surveys, registrations, and more.

Features​

🎨 Visual Form Builder​

Create forms visually in the admin panel:

  • Drag-and-drop field arrangement
  • Live preview as you build
  • Conditional logic — show/hide fields based on responses
  • Styling options — match your brand

🌍 Multi-Language Support​

Forms are fully translatable:

  • Translate labels, placeholders, help text
  • Per-locale success messages
  • Language-specific button text
  • Automatic locale detection

📊 Submission Management​

Track and manage all submissions:

  • Inbox view — see all responses
  • Status tracking — new, read, spam, archived
  • Search & filter — find submissions quickly
  • CSV export — download for analysis
  • Email notifications — get notified of new submissions

🔒 Spam Protection​

Built-in protection:

  • Honeypot fields — invisible spam traps
  • Rate limiting — prevent abuse
  • CAPTCHA support — optional reCAPTCHA
  • IP tracking — monitor suspicious activity

Creating a Form​

  1. Go to Forms in the sidebar
  2. Click + New Form
  3. Add fields using the builder
  4. Configure settings and notifications
  5. Save as draft or Publish

Field Types​

Field TypeDescription
TextSingle line input
EmailEmail with validation
PhonePhone number input
TextareaMulti-line text
SelectDropdown menu
RadioSingle choice
CheckboxMultiple choices or agreement
FileFile upload (images, PDFs)
DateDate picker
NumberNumeric input
HiddenHidden values (tracking, source)

Embedding Forms​

In Pages (Puck Editor)​

  1. Add a Form Block to your page
  2. Select the form by slug
  3. Style as needed

In Custom Code​

import { FormRenderer } from "@/components";
import { getForm } from "@/lib/forms";

export default async function ContactPage({ params }) {
const form = await getForm("contact", params.locale);
return <FormRenderer form={form} locale={params.locale} />;
}

Direct API​

// Fetch form
const form = await fetch('/api/forms/contact?locale=en');

// Submit form
await fetch('/api/forms/contact/submit', {
method: 'POST',
body: JSON.stringify({ data: formData })
});

Email Notifications​

Configure notifications for each form:

  • To addresses — who receives submissions
  • Subject line — customizable per form
  • Reply-to — set to submitter's email
  • Confirmation emails — send thank-you to submitter

Per-Organization SMTP​

Each organization can configure their own SMTP settings:

  1. Go to Settings → SMTP
  2. Enter server details (host, port, credentials)
  3. Test connection
  4. Forms will use org-specific settings

Analytics​

Track form performance:

  • Submission count — total, today, this week
  • Conversion rate — views to submissions
  • Drop-off analysis — where users abandon
  • Response time — avg. time to complete

💡 Pro Tip

Use hidden fields to track marketing campaigns by adding UTM parameters automatically.