digitalisstudios/slick-forms

A comprehensive Laravel package for building dynamic forms with an intuitive drag-and-drop interface, conditional logic, and 32 field types including searchable selects, drag-drop file uploads, and password strength indicators

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/digitalisstudios/slick-forms

v2.0.0 2025-11-05 11:38 UTC

This package is auto-updated.

Last update: 2025-11-05 19:09:10 UTC


README

Build production-ready Laravel forms without writing frontend code

A comprehensive Laravel package featuring a visual drag-and-drop form builder, 32 premium field types, advanced conditional logic, and a schema-driven architecture that makes extending effortless.

Laravel PHP Livewire License

Form Builder Interface

Drag-and-drop interface: field palette, canvas, and schema-driven properties panel, fully functional out of the box

What Makes Slick Forms Badass?

โœจ Zero Frontend Code Required

Build complex, production-ready forms through a visual interface. No Vue, React, or HTML knowledge needed. Pure Laravel and Livewire magic.

๐Ÿ“ฆ Self Contained

Although we integrate best-in-class libraries (Tom Select, Flatpickr, Quill, Ace Editor), you don't need to install them as dependencies. The entire package works right out of the box on any Laravel project that uses Livewire - zero configuration required.

๐Ÿงฉ 32 Premium Field Types

Integrated with best-in-class libraries:

  • Tom Select v2.3.1 - Searchable, keyboard-navigable dropdowns
  • Flatpickr v4.6.13 - Powerful date/time pickers with multiple formats
  • Quill v1.3.6 - Rich WYSIWYG editor for paragraph content
  • Ace Editor v1.32.2 - Code editor with syntax highlighting
  • Signature Pad v4.1.7 ๐Ÿ†• - Canvas-based signature capture
  • Leaflet v1.9.4 ๐Ÿ†• - Interactive maps with location picking
  • Plus: Password strength indicators, phone fields with country codes, dual-range sliders, rating matrices, and more

What Makes It Badass-er

๐ŸŽจ Advanced Conditional Logic

  • Visual Field Picker - Eyedropper tool to select target fields
  • 91 Operator Mappings - Field-type specific operators (text contains, number greater than, date after, etc.)
  • AND/OR Logic - Build complex conditional rules
  • Real-time Evaluation - Instant show/hide with Livewire

๐Ÿ“Š Built-in Analytics & Reporting

  • Form Performance Tracking - Views, starts, completions, conversion rates
  • Field-Level Analytics - Completion rates, drop-off points
  • Device & Browser Breakdown - User agent tracking
  • Validation Error Analysis - Most common validation failures
  • Time-Based Metrics - Average completion time, submissions over time
  • Visual Dashboards - Chart.js integration for data visualization

๐Ÿ“ฑ Bootstrap 5 Grid System

  • 6 Responsive Breakpoints - xs, sm, md, lg, xl, xxl
  • Advanced Components - Cards, tabs, accordions with full customization
  • Layout Elements - Containers, rows, columns with offsets and ordering
  • Table Layout - Grid-based structured data display

๐Ÿ”Œ Three Integration Methods

Choose the approach that fits your workflow:

  1. Built-in Routes - Ready-to-use form management UI at /slick-forms/* (can be overridden)
  2. Livewire Components - Embed <livewire:slick-forms::form-builder /> anywhere
  3. Programmatic API - Build forms via Eloquent models

๐Ÿš€ What's New in V2

Slick Forms V2 brings enterprise-grade features for advanced form workflows:

๐Ÿ“ง Email Notifications

  • Custom Templates - Design email notifications with Blade templates
  • Conditional Sending - Send emails based on form data (e.g., only for VIP customers)
  • Variable Substitution - Insert form values into subject/body with {field_name} syntax
  • Delivery Tracking - Log all sent emails with timestamps and status
  • Multiple Recipients - CC/BCC support with dynamic recipient lists

๐Ÿ”— Webhook Integrations

  • Real-time POST - Send form submissions to external APIs instantly
  • Custom Headers - Add authentication tokens, API keys, etc.
  • Payload Transformation - Map form fields to API structure
  • Retry Logic - Automatic retries with exponential backoff
  • Event Logging - Track webhook success/failure with detailed logs
  • Note: Webhook payloads contain numeric IDs for database lookups, while public-facing URLs use hashids for privacy

๐Ÿ”’ Advanced Security & Spam Protection

  • Honeypot Fields - Invisible spam traps that catch bots
  • Rate Limiting - Prevent abuse with IP-based throttling (configurable per form)
  • CAPTCHA Integration - Support for Google reCAPTCHA v2/v3 and hCaptcha
  • Spam Log Analysis - Dashboard showing blocked attempts with IP tracking
  • IP Blacklisting - Automatically block repeat offenders

๐Ÿ” Secure Hashid URLs

All forms use short, non-sequential hashid URLs:

  • Format - /form/x9kL2p (short, shareable, privacy-friendly)
  • Custom Salt - Per-form salt option for additional obfuscation
  • Signed URLs - Add signatures for time-limited, one-time access
  • Pre-fill Support - Hashid URLs work with pre-filled form data

Hashid URLs hide sequential IDs while remaining compact and shareable. Optional signed URLs add expiration and usage limits - perfect for private forms or surveys.

๐Ÿ—„๏ธ Model Binding

Populate forms from existing database records and save back on submit:

  • Auto-populate - Fill form fields from Eloquent models
  • Two-way Binding - Create new records or update existing ones
  • Dot Notation - Map nested relationships like user.profile.bio
  • Field Transformers - Apply custom logic before save (e.g., encrypt sensitive data)
  • Conditional Updates - Only update if user has permission

Perfect for edit profiles, update account settings, or any CRUD operation.

๐Ÿ“ก Dynamic Options (Cascading Dropdowns)

Load select options from external sources:

  • API Integration - Fetch options from REST endpoints
  • Database Queries - Load from Eloquent models with scopes/filters
  • Cascading Logic - Child dropdown options based on parent selection
  • Caching - Configurable TTL to reduce API calls
  • Placeholder Support - Replace {parent} in URLs for cascading

Example: Country โ†’ State โ†’ City dropdowns with real-time updates.

๐ŸŽ‰ Success Screen Customization

Control what happens after form submission:

  • Custom Messages - Display personalized thank you messages with variable substitution
  • Conditional Redirects - Route users to different pages based on their answers
  • Show Submission Data - Display submitted values with selective field hiding (e.g., hide passwords)
  • Download Buttons - Offer PDF/CSV downloads of submission data
  • Edit Links - Allow users to edit their submission after submit
  • Message Then Redirect - Show a message for X seconds, then auto-redirect
  • Variable Replacement - Use {{field_name}} and {{submission.id}} in messages/URLs

Perfect for confirmation pages, payment success screens, or multi-step workflows.

๐ŸŽจ Enhanced Field Types

Three powerful new field types for advanced use cases:

  • Signature Pad - Canvas-based signature capture with configurable pen colors and canvas size
  • Location Picker - Interactive maps powered by OpenStreetMap with search, click-to-place, and drag markers
  • Rating Matrix - Multi-item rating surveys (rate 5 products on same scale) with radio or dropdown input

๐Ÿ“š Form Versioning

Track changes and rollback when needed:

  • Version Snapshots - Save complete form state (fields, layout, pages, settings)
  • Version History - View all versions with timestamps and change summaries
  • One-Click Rollback - Restore any previous version with full data integrity
  • Nested Element Support - Properly handles complex layout hierarchies
  • Version Comparison - See what changed between any two versions
  • Submission Tracking - Know which version collected each submission

Perfect for maintaining audit trails, testing changes safely, or reverting breaking updates.

Quick Start

Get your first form running in under 2 minutes:

# Install the package
composer require digitalisstudios/slick-forms

# Run the interactive installation wizard
php artisan slick-forms:install

# The wizard will:
# - Install core tables (forms, fields, submissions)
# - Let you choose which features to enable (analytics, webhooks, email notifications, etc.)
# - Update your config file automatically

# (Optional) Seed with demo forms, templates, and fake analytics
php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\DemoFormsWithAnalyticsSeeder

# Or just seed the templates without demo data
php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\FormTemplatesSeeder

# Visit the builder
open http://your-app.test/slick-forms/manage

That's it! Start building forms immediately.

Note: Slick Forms v2.1+ uses an opt-in architecture. Only the features you select will have their database tables created. You can enable/disable features anytime by re-running php artisan slick-forms:install.

Key Features

Feature Description Learn More
Visual Form Builder Drag-and-drop interface with real-time preview Built-in
32 Field Types Text, email, select, date, signatures, maps, rating matrices, and more Field Types Reference
Conditional Logic Show/hide fields with visual picker and 91 operators Conditional Logic Guide
Advanced Layouts Bootstrap 5 grid with containers, rows, columns, cards, tabs Bootstrap Docs
Multi-Page Forms Wizard-style forms with progress tracking Multi-Page Forms Guide
Form Analytics Track submissions, conversions, drop-offs, devices Analytics Guide
Calculation Fields Auto-calculate values with formulas (SUM, AVG, etc.) Calculation Fields Guide
Repeater Fields Dynamic field groups users can add/remove Repeater Fields Guide
Input Masks Format as you type (phone, SSN, credit card) Input Masks Guide
Email Notifications ๐Ÿ†• Send custom emails on submission with templates Email Notifications Guide
Webhook Integrations ๐Ÿ†• POST submissions to external APIs with retry logic Webhooks Guide
Spam Protection ๐Ÿ†• Honeypot, rate limiting, CAPTCHA, IP blacklisting Spam Protection Guide
Hashid URLs ๐Ÿ†• Short, non-sequential URLs with optional signatures QR Codes & URLs Guide
Model Binding ๐Ÿ†• Populate forms from database, save back to models Schema Reference
Dynamic Options ๐Ÿ†• Cascading dropdowns from APIs or database queries Field Types Reference
Success Screen ๐Ÿ†• Custom messages, redirects, downloads, edit links Success Screens Guide
Signature Pad ๐Ÿ†• Canvas-based signature capture with pen customization Field Types Reference ยท Schema
Location Picker ๐Ÿ†• Interactive maps with search and marker placement Field Types Reference ยท Schema
Rating Matrix ๐Ÿ†• Multi-item rating surveys on same scale Field Types Reference ยท Schema
Form Versioning ๐Ÿ†• Snapshot, rollback, compare versions, track changes Form Versioning Guide
Form Templates 5 pre-built professional templates Templates Guide
Export Submissions CSV, Excel, PDF export Exports Guide
Form Submissions Track, view, and manage submissions with timestamps Built-in viewer
Extensibility Create custom field types in minutes with BaseFieldType Custom Field Types
Production Ready XSS prevention, CSRF protection, server-side validation Secure by design

Installation

Requirements

  • PHP 8.2 or higher
  • Laravel 11.0 or 12.0
  • Livewire 3.0
  • Bootstrap 5 (for styling)
  • Bootstrap Icons (for field type icons)

Install via Composer

composer require digitalisstudios/slick-forms

Run Installation Wizard

php artisan slick-forms:install

The interactive wizard will guide you through:

  1. Core Tables Installation - Always installed (forms, fields, submissions, analytics sessions/events)
  2. Feature Selection - Choose which features to enable:
    • ๐Ÿ“Š Analytics (tracking, dashboards, conversion funnels)
    • ๐Ÿ“ง Email Notifications (custom templates, conditional sending)
    • ๐Ÿ”— Webhooks (POST to external APIs with retry logic)
    • ๐Ÿ”’ Spam Protection Logs (honeypot, rate limiting, CAPTCHA tracking)
    • ๐Ÿ“š Form Versioning (snapshots, rollback, history)
    • ๐Ÿ“ค Exports (CSV, Excel, PDF)
  3. Config Updates - Automatically updates config/slick-forms.php with your selections

Re-running the wizard lets you enable/disable features without losing data. Disabled features keep their tables but stop functioning.

Alternative: Manual Migration

# Run all migrations at once (installs ALL features)
php artisan migrate

This creates all 18 tables regardless of feature usage. Use the wizard for a leaner installation.

Publish Configuration (Optional)

# Publish config file
php artisan vendor:publish --tag=slick-forms-config

# Publish views for customization
php artisan vendor:publish --tag=slick-forms-views

Seed Demo Forms (Optional)

# Seed with demo forms, templates, submissions, and analytics
php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\DemoFormsWithAnalyticsSeeder

This creates a complete demo environment:

  • 10 Template Forms - Contact, Lead Capture, Registration, Job Application, Event Registration, Survey, Product Order, Support Ticket, Newsletter, Booking
  • 10 Working Forms - Duplicates of templates ready for use
  • 187 Submissions - Realistic test data across all forms
  • 342 Analytics Sessions - User tracking with device/browser data
  • 4,210 Analytics Events - Views, starts, interactions, validations

Alternatively, seed just templates without demo data:

php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\FormTemplatesSeeder

Optional: Export Functionality

Slick Forms supports exporting submissions to CSV, Excel, and PDF formats. These features require optional packages:

# Install export packages
composer require maatwebsite/excel barryvdh/laravel-dompdf

What happens without these packages?

  • Export buttons are automatically hidden from the submission viewer
  • The package remains fully functional for form building and submission management
  • Users see a helpful message explaining how to enable exports

When to install:

  • You need to export submission data for analysis
  • Clients require downloadable reports
  • You want CSV/Excel integration with external tools

Usage Patterns

Choose the integration method that fits your needs:

Option 1: Built-in Routes (Recommended for Quick Start)

Perfect for admins who need a turnkey form management system.

GET  /slick-forms/manage              - List all forms
GET  /slick-forms/manage/create       - Create new form
GET  /slick-forms/builder/{form}      - Build form fields
GET  /slick-forms/form/{form}         - Display form to users
GET  /slick-forms/submissions/{form}  - View submissions

When to use: You want a standalone form builder without custom integration.

Option 2: Livewire Components (For Custom Pages)

Embed form builder, renderer, or submission viewer in your existing Livewire/Blade views.

{{-- Form Builder --}}
<livewire:slick-forms::form-builder :form-id="1" />

{{-- Form Renderer --}}
<livewire:slick-forms::form-renderer :form-id="1" />

{{-- Submission Viewer --}}
<livewire:slick-forms::submission-viewer :form-id="1" />

When to use: You need forms embedded in existing application pages.

Option 3: Programmatic API (For Developers)

Create and manage forms entirely via code.

use DigitalisStudios\SlickForms\Models\CustomForm;

// Create a form
$form = CustomForm::create([
    'name' => 'Lead Capture Form',
    'description' => 'Collect leads from landing page',
    'is_active' => true,
]);

// Add fields
$form->fields()->create([
    'field_type' => 'email',
    'label' => 'Email Address',
    'name' => 'email',
    'is_required' => true,
    'order' => 1,
]);

// Retrieve submissions
$submissions = $form->submissions()
    ->with('fieldValues')
    ->latest()
    ->get();

foreach ($submissions as $submission) {
    // Process submission data
    $email = $submission->fieldValues
        ->where('field.name', 'email')
        ->first()->value;
}

When to use: You need programmatic form creation or headless usage.

Learn more: Working with Submissions

Field Types Overview

Slick Forms includes 32 field types organized by category:

Category Fields Key Features
Input Text, Email, Number, Password, Phone, URL Password strength indicator, phone country codes
Selection Select, Radio, Checkbox, Switch, Tags Tom Select searchable dropdowns
Date/Time Date, Time, Date Range Flatpickr with multiple formats, inline calendar
Files File, Image, Video Drag-and-drop upload, image previews
Interactive Star Rating, Slider, Range, Color Picker Dual sliders, color palette
Content Header, Paragraph, Code Quill WYSIWYG, Ace Editor syntax highlighting
Advanced Calculation, Repeater, Hidden, Table Formula evaluation, dynamic rows

โ†’ Full details with examples: Field Types Reference

Documentation

Getting Started

Advanced Features

V2 Features

Component & Configuration Reference

Extending Slick Forms

External Resources

Configuration

Slick Forms includes comprehensive configuration options for routes, field types, uploads, email notifications, spam protection, webhooks, and more.

Quick Configuration

Basic configuration options (config/slick-forms.php):

return [
    // Enable/disable package routes
    'load_routes' => true,

    // Layout to extend for full-page views
    'layout' => 'layouts.app',

    // File upload settings
    'uploads' => [
        'disk' => 'public',
        'max_size' => 10240, // KB
    ],

    // Enable conditional logic
    'conditional_logic_enabled' => true,

    // V2: Email notifications
    'email' => [
        'enabled' => true,
        'queue' => true,
    ],

    // V2: Spam protection
    'spam' => [
        'honeypot' => ['enabled' => true],
        'rate_limiting' => ['enabled' => true],
    ],

    // V2: Webhooks
    'webhooks' => [
        'enabled' => true,
        'queue' => true,
    ],
];

Environment Variables

# Core
SLICK_FORMS_LOAD_ROUTES=true
SLICK_FORMS_LAYOUT=layouts.app
SLICK_FORMS_UPLOAD_DISK=public

# Email Notifications (V2)
SLICK_FORMS_EMAIL_ENABLED=true
SLICK_FORMS_EMAIL_QUEUE=true
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io

# Spam Protection (V2)
SLICK_FORMS_HONEYPOT_ENABLED=true
SLICK_FORMS_RATE_LIMIT_ENABLED=true
RECAPTCHA_SITE_KEY=your-site-key
RECAPTCHA_SECRET_KEY=your-secret-key

# Webhooks (V2)
SLICK_FORMS_WEBHOOKS_ENABLED=true
SLICK_FORMS_WEBHOOK_QUEUE=true

# URL Obfuscation (V2)
SLICK_FORMS_HASHID_SALT="${APP_KEY}"
SLICK_FORMS_HASHID_MIN_LENGTH=6

Complete Configuration Guide: See docs/CONFIGURATION.md for all settings, SMTP setup, CAPTCHA integration, and production best practices.

Route Customization

Slick Forms V2 introduces comprehensive route customization with hashid-only URLs for enhanced security and privacy.

Default Routes

All package routes use secure hashid URLs that are short, non-sequential, and shareable:

/slick-forms/manage                    - Form management dashboard
/slick-forms/builder/x9kL2p            - Form builder (hashid)
/slick-forms/form/x9kL2p               - Public form display (hashid)
/slick-forms/submissions/x9kL2p        - Submission viewer (hashid)
/slick-forms/analytics/x9kL2p          - Analytics dashboard (hashid)

Security Benefits:

  • โœ… No ID Enumeration - Hashids prevent sequential form discovery
  • โœ… No Information Leakage - Can't determine form count or creation order
  • โœ… Privacy-Friendly - URLs don't reveal internal database structure
  • โœ… Short & Shareable - 6+ characters (vs 36 for UUIDs)
  • โœ… Per-Form Salts - Optional custom salt per form for extra obfuscation

Customizing Routes

Publish the config to customize all routes, middleware, and URL segments:

php artisan vendor:publish --tag=slick-forms-config

Example 1: Change Route Prefix

// config/slick-forms.php
'routes' => [
    'prefix' => 'admin/forms',  // Changed from 'slick-forms'
    // ...
],

Now routes become: /admin/forms/manage, /admin/forms/builder/x9kL2p, etc.

Example 2: Customize URL Segments

// config/slick-forms.php
'routes' => [
    'segments' => [
        'builder' => 'editor',        // /admin/forms/editor/x9kL2p
        'manage' => 'dashboard',       // /admin/forms/dashboard
        'submissions' => 'responses',  // /admin/forms/responses/x9kL2p
        // ... customize any segment
    ],
],

Example 3: Per-Route Middleware Control

// config/slick-forms.php
'routes' => [
    'middleware' => [
        'admin' => ['web', 'auth', 'role:admin'],  // Require admin role
        'public' => ['web', 'throttle:60,1'],      // Rate limit public forms
    ],

    'builder' => [
        'middleware' => 'admin',  // Use admin middleware group
        'show' => '{builder}/{form}',
    ],

    'submissions' => [
        'middleware' => 'admin',
        // Override single route with custom middleware
        'export_csv' => [
            'uri' => '{submissions}/{form}/{export}/{csv}',
            'middleware' => ['web', 'auth', 'can:export-submissions'],
        ],
    ],
],

Example 4: Disable Package Routes (Use Your Own)

// config/slick-forms.php
'load_routes' => false,
// routes/web.php
use DigitalisStudios\SlickForms\Http\Controllers\FormBuilderController;
use DigitalisStudios\SlickForms\Http\Controllers\FormRendererController;

Route::middleware(['auth'])->prefix('admin')->group(function () {
    Route::get('/forms', [FormBuilderController::class, 'index']);
    Route::get('/forms/builder/{form}', [FormBuilderController::class, 'show']);
});

// Public form route (no auth required)
Route::get('/f/{hash}', [FormRendererController::class, 'showByHash'])
    ->name('custom.form.show');

Important: When using custom routes, all {form} and {template} parameters automatically use hashid binding. Pass model objects to route() helper and they'll be converted to hashids automatically.

Migration from Numeric IDs

Breaking Change in V2: All numeric ID and UUID routes have been removed for security.

Before (V1):

// Numeric ID routes (REMOVED)
/slick-forms/form/123
/slick-forms/builder/123

// UUID routes (REMOVED)
/slick-forms/form/550e8400-e29b-41d4-a716-446655440000

After (V2):

// Hashid routes only
/slick-forms/form/x9kL2p
/slick-forms/builder/x9kL2p

Migration Steps:

  1. Update any bookmarked URLs to use hashid format
  2. Update external integrations to use hashid URLs from your application
  3. Important: Webhook payloads intentionally contain numeric form_id and submission_id for efficient database lookups by external systems. Only public-facing URLs use hashids for privacy.

Generating Hashid URLs in Code:

use DigitalisStudios\SlickForms\Models\CustomForm;
use DigitalisStudios\SlickForms\Services\UrlObfuscationService;

$form = CustomForm::find(1);

// Method 1: Pass model to route() (automatic hashid conversion)
$url = route('slick-forms.form.show.hash', ['hash' => $form]);

// Method 2: Use UrlObfuscationService
$urlService = app(UrlObfuscationService::class);
$hashid = $urlService->encodeId($form->id);
$url = route('slick-forms.form.show.hash', ['hash' => $hashid]);

// Method 3: Use convenience method
$url = $urlService->generateFormUrl($form);

โ†’ Complete Config Reference: See config/slick-forms.php after publishing for all available options and detailed documentation.

Analytics & Reporting

Track form performance with built-in analytics:

// Access analytics dashboard
Route: /slick-forms/analytics/{form}

Metrics Tracked:

  • Form views, starts, completions
  • Conversion rates and drop-off points
  • Field completion rates
  • Device and browser breakdown
  • Common validation errors
  • Average completion time
  • Submissions over time (charts)

Requirements: No additional packages needed - fully built-in.

โ†’ Complete Guide: Analytics Documentation

Multi-Page Forms

Break long forms into steps with progress tracking:

// Enable in form settings
$form->settings = [
    'multi_page_enabled' => true,
    'progress_style' => 'steps', // or 'bar', 'breadcrumb'
];

Features:

  • Unlimited pages per form
  • Three progress indicator styles (Steps, Bar, Breadcrumbs)
  • Per-page validation
  • Next/Previous navigation
  • Page-specific fields and layout
  • Drag-and-drop page reordering

โ†’ Complete Guide: Multi-Page Forms Documentation

Form Templates

Start quickly with 10 professionally designed templates:

# Seed template forms only
php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\FormTemplatesSeeder

# Or seed templates + demo forms + submissions + analytics
php artisan db:seed --class=DigitalisStudios\\SlickForms\\Database\\Seeders\\DemoFormsWithAnalyticsSeeder

Templates Included:

  1. Contact Form - Basic contact form with name, email, phone, message
  2. Lead Capture - Lead generation with conditional logic
  3. Multi-Step Registration - Registration with tabs
  4. Job Application - Employment application with file upload
  5. Event Registration - Registration form with attendee details
  6. Customer Satisfaction Survey - Rating scales and feedback
  7. Product Order Form - Order form with repeater fields
  8. Support Ticket - Technical support request form
  9. Newsletter Signup - Email subscription with preferences
  10. Booking Form - Appointment booking with date range

Browse Templates: /slick-forms/templates (when templates exist)

โ†’ Complete Guide: Templates Documentation

Advanced Features

Calculation Fields

Auto-calculate values based on other fields:

$form->fields()->create([
    'field_type' => 'calculation',
    'name' => 'total',
    'options' => [
        'formula' => '{price} * {quantity}',
        'prefix' => '$',
        'decimal_places' => 2,
    ],
]);

Supported Operations:

  • Basic operators: +, -, *, /, %, ()
  • Functions: SUM(), AVG(), MIN(), MAX(), ROUND(), ABS()
  • Field references: {field_name}
  • Display formats: Number, Currency, Percentage

โ†’ Complete Guide: Calculation Fields Documentation

Repeater Fields

Let users add/remove groups of fields:

$form->fields()->create([
    'field_type' => 'repeater',
    'name' => 'work_experience',
    'options' => [
        'min_instances' => 1,
        'max_instances' => 10,
        'layout_style' => 'card', // or 'accordion', 'plain'
    ],
]);

Features:

  • Dynamic add/remove instances
  • Drag-to-reorder instances
  • Min/max instance limits
  • Three layout styles
  • Nested field support

โ†’ Complete Guide: Repeater Fields Documentation

Input Masks

Format input as users type:

// Available masks: phone, credit_card, ssn, date, time, currency, etc.
$field->options['input_mask'] = 'phone_us'; // (555) 123-4567
$field->options['input_mask'] = 'credit_card'; // 1234 5678 9012 3456
$field->options['input_mask'] = 'ssn'; // 123-45-6789

Mask Types:

  • Phone (US and International)
  • Credit Card (auto-detects type)
  • Date (multiple formats)
  • Time (12/24 hour)
  • Currency, Percentage
  • SSN, ZIP codes
  • Custom patterns

โ†’ Complete Guide: Input Masks Documentation

Export Submissions

Export form submissions in multiple formats:

# Install optional packages for Excel/PDF
composer require maatwebsite/excel
composer require barryvdh/laravel-dompdf

Export Formats:

  • CSV - Built-in, no packages required
  • Excel - Requires maatwebsite/excel
  • PDF - Requires barryvdh/laravel-dompdf

โ†’ Complete Guide: Exports Documentation

Database Schema

All tables use the slick_ prefix to avoid conflicts.

Opt-In Architecture (v2.1+)

Slick Forms uses a modular database structure where only the features you enable create tables. This reduces database bloat and improves performance.

Core Tables (Always Installed)

These 9 tables are always created, regardless of feature selection:

  • slick_forms - Form definitions with settings and configuration
  • slick_form_fields - Form fields with validation and conditional logic
  • slick_form_layout_elements - Layout structure (containers, rows, columns, cards, tabs, accordions, carousels)
  • slick_form_pages - Multi-page form support with progress tracking
  • slick_form_submissions - User submissions with IP tracking and metadata
  • slick_form_field_values - Submitted field values
  • slick_form_analytics_sessions - User session tracking (device, browser, timing)
  • slick_form_analytics_events - Analytics events (views, starts, interactions, validations)
  • slick_form_features - Tracks which features are installed and enabled

Optional Feature Tables

These 9 tables are only created when you enable their corresponding features:

Email Notifications Feature:

  • slick_form_email_templates - Email notification templates with variables
  • slick_form_email_logs - Email delivery tracking and status

Webhooks Feature:

  • slick_form_webhooks - Webhook endpoint configurations
  • slick_form_webhook_logs - Webhook delivery attempts and responses

Spam Protection Feature:

  • slick_form_spam_logs - Spam attempt logging with IP tracking

Versioning Feature:

  • slick_form_versions - Form version snapshots and history

Exports Feature:

  • slick_dynamic_options_cache - Cached dynamic dropdown options
  • slick_form_model_bindings - Form-to-Eloquent model mappings
  • slick_form_signed_urls - Signed URL tracking with expiration

Total: 9 core tables + up to 9 optional tables (18 maximum)

Security & Performance

Security Features

  • XSS Prevention - All user input properly escaped
  • CSRF Protection - Laravel middleware integration
  • Server-Side Validation - Never trust client-side validation
  • File Upload Validation - Type and size restrictions
  • IP Tracking - Log submission sources

Performance

  • Optimized Queries - Eager loading to prevent N+1
  • Livewire Integration - Minimal JavaScript overhead
  • Asset Management - CDN-ready third-party libraries
  • Efficient Rendering - Component-based view architecture

Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)

Note: JavaScript must be enabled for the drag-and-drop builder interface.

Roadmap

V2.1 Planned Features

  • API endpoints for headless usage (RESTful API for forms and submissions)
  • Advanced form scheduling (timezone support, recurring availability)
  • Performance monitoring dashboard (page load times, field render times)
  • Bulk operations (duplicate multiple forms, bulk delete submissions)

V3.0 Vision

  • Advanced field types:
    • File manager (browse/select existing uploaded files)
    • Drawing canvas (free-form drawing with tools)
    • Audio recorder (voice memos and audio capture)
  • Advanced permissions (team collaboration, role-based access)
  • Advanced automation (Zapier integration, custom workflows)
  • White-label customization (custom branding, logo, colors)

Contributing

Contributions are welcome! Please feel free to submit a Pull Request to the GitHub repository.

Credits

Created by: Brandon Moore

Built with:

Inspired By

No source code from the following projects was actually used, but these projects all had features that inspired this project:

License

Slick Forms is open-source software licensed under the MIT license.

Support

For issues, questions, or feature requests:

Star this repository if Slick Forms helps your project!