Workflows

Step-by-step workflows

Panel path in the starter is /admin. Navigation group: Forms.

Create a form (admin)

  1. Open Forms and click Create.
  2. Choose Blank form or Template on the start page.
  3. Core templates: Contact Us, Customer Feedback. Pro templates (wizard/tabs/pages/accordion) show a PRO badge.
  4. After create you land on the visual designer (edit page), not the list.

Build in the visual designer

  1. The edit page is a 3-panel designer: pages + palette (left), canvas (center), inspector (right).
  2. Add Content blocks (headings, banners, footers) and Fields from the palette.
  3. Use the header bar for name, layout, publish/active, save, and open preview.
  4. Configure the Thank you page from the left nav — Card (Core) or Review Card / Connect (Pro).
  5. Set per-field input masks (Pro) in the inspector for text, phone, and number fields.
  6. Form header/footer slots repeat chrome on every public page.
Empty schema on create If you save with no sections, the page inserts a default “Details” section with no fields so the schema is never empty.

Publish and share

  1. Turn Published on (and keep Active on). Save.
  2. On the list, Open appears for published+active forms (new tab). The view page has Open public form.
  3. Share the URL shown under the form name (e.g. /forms/contact-us).

Unpublished forms stay in the admin but 404 for guests.

Capture data on the public form

  1. Open the public URL. The page uses the package layout and CSS (no Filament theme required).
  2. Wizard / pages: complete the step, click Next or Save and continue. Only that section is validated. Drafts restore if the visitor comes back in the same session.
  3. Tabs: switch sections freely; everything validates on Submit.
  4. Accordion: expand/collapse sections; everything validates on Submit.
  5. Required fields show an asterisk. Errors appear under the field.
  6. On success, the success message displays. If a redirect URL is set, a Continue link appears (the visitor is not force-redirected).

Review submissions

  1. Open Submissions, or the Submissions relation on a form’s view/edit.
  2. Header charts: submissions over the last 14 days, and status doughnut.
  3. Tabs: Table / New / Reviewed / Archived.
  4. Filters: form (on the global list), status, submitted between dates, Field contains (internal field name + substring).
  5. Open a row to see labeled answers (option values mapped to labels). Mark Reviewed or Archive.
  6. Bulk: change status, archive, export selected, delete (audit logged).

Statuses: New (warning), Reviewed (success), Archived (gray), Spam (danger).

Export CSV / Excel / PDF

  1. On the submissions list, click Export (needs export_form_submissions once Shield has created it).
  2. Choose CSV, Excel (XML), or PDF.
  3. A notification shows the absolute path on the exports disk (default storage/app/form-builder-exports/). Download from the server or copy the file.
  4. Or select rows and use Export selected.

Clone, JSON export, import custom fields

Clone (admin)

List action Clone copies schema and settings, generates a new UUID/slug/path, and leaves the copy unpublished.

Export JSON (admin)

On Edit, Export JSON writes storage/app/form-builder-exports/{slug}.json using document().

CLI import/export

php artisan form-builder:export --slug=contact-us
php artisan form-builder:import storage/app/form-builder-export.json --publish

Import from Dynamic Fields (developer)

There is no Filament button in v1.0.0. In tinker, a seeder, or your own action:

$form = \Spiggle\FormBuilder\Models\Form::query()->where('slug', 'contact-us')->first();
$form->importCustomFields([1, 2, 3]); // custom_fields.id values

Fields append to the last section as a snapshot. Later edits in Custom Fields do not update the form. Submissions still go to form_builder_submissions, never custom_field_values.

Validate and store from code

$rules = app(\Spiggle\FormBuilder\Services\ValidationBuilder::class)->rules($form);
$ok = Validator::make(['data' => $payload], $rules)->passes();

app(\Spiggle\FormBuilder\Services\SubmissionManager::class)
    ->capture($form, $payload, request(), ['source' => 'api']);

Listen to Spiggle\FormBuilder\Events\FormSubmitted to send mail to notify_emails (addresses are stored on the form; v1 does not send mail by itself).