Feedback & Surveys template

Let visitors report broken pages with a screenshot and the page URL

Import a Laravel website feedback form for Filament to capture page URLs, issue types, and screenshots, then route reports to your team.

Open this template in the demo builder 7 fields, 3 required. Free demo account, no card.

Updated

This Laravel website feedback form gives visitors a direct way to report a broken page, confusing content, or a visual problem. Import it into FilaForms when your application needs the page context, issue type, and a screenshot in one submission record.

It collects the page URL, feedback type, and a screenshot. The field table below shows the imported structure. Your team can review the submission in Filament, identify the affected page, and send the report into the workflow that owns the fix.

This works best when a visitor can describe a problem while the page remains open. A captured URL prevents support staff from asking which route the visitor meant. A feedback type gives triage a starting category. A screenshot preserves the visual evidence available to the reporter.

Storyblok and OnePoll's 2022 survey found that 60% of consumers abandon purchases because of poor website user experience. That makes a short reporting path useful for teams that maintain pages connected to sign-up, checkout, or account tasks.

Use this template when feedback should stay with your application records. FilaForms is a Laravel form builder for Filament that stores submissions in your database. Reviewers get an admin view without a separate feedback service.

Fields in this template (7 fields, 3 required)

Field types used: Link, Toggle Buttons, Textarea, File Upload, Select, Email. Every field is editable in the builder after import.

What Happened

Field Type Required Validation
Page URL page_url Link Yes required
Feedback Type feedback_type Toggle Buttons, 5 options Yes required
Tell Us More details Textarea Yes required | min:10
Screenshot screenshot File Upload No none

Your Setup

Field Type Required Validation
Device device Select, 4 options No none
Browser browser Select, 5 options No none
Email Address email Email No email

Turn reports into an owned maintenance workflow

The field table below groups page context separately from the report itself. Reviewers first see where the visitor encountered the issue. They can then use the feedback type to decide whether the report belongs with content, design, support, or engineering.

Keep the feedback type options aligned with the queues your team actually uses. A vague catch-all category produces reports that require another classification step. A small set of familiar categories lets a reviewer route a report quickly while preserving the reporter's original wording.

Treat the page URL as evidence, not as a guaranteed reproduction path. The visitor may be signed in, using a locale, or carrying query parameters that change the result. Compare the URL with the account and request context your application already records before you decide that a page defect exists.

The screenshot is a static file, not a live DOM snapshot. It shows what the reporter chose to include, not console errors or a way to reproduce the bug. Ask for browser details through a follow-up process when a visual report needs more technical investigation.

Do not make the form carry every diagnostic question. A visitor can report a broken page in seconds when the request stays focused. Your internal review can request a screen recording, device details, or reproduction steps after triage identifies a report worth investigating.

Adapt the template for a mobile app

For a mobile app, replace page_url with a screen_name select that matches your app's own navigation. A URL often has no useful meaning to someone using a native screen. A screen name lets the reporter identify the place they saw without translating your navigation into a web address.

Use labels that visitors recognise from the app. Match tab names, menu labels, and screen titles. Keep historic option values understandable when navigation changes, because past reports still need to tell a reviewer where the original issue appeared.

The feedback_type and screenshot fields still serve the same purpose in an app variant. The type directs the report to the right reviewer. The screenshot gives that reviewer the visible state, even when the current release has already changed.

Avoid treating the screenshot as a substitute for version information. A screenshot can show the UI, but it cannot identify a release build or device behaviour by itself. Connect the form to the application context you already collect if a report needs that level of diagnosis.

Route submissions in your Laravel application

FilaForms emits FormSubmitted after a visitor submits website feedback. Listen for FilaForms\Core\Events\FormSubmitted and read page_url, feedback_type, and screenshot from the submission data. The listener can record the report in your logs before you replace that action with your own triage workflow.

Save this listener as app/Listeners/LogWebsiteFeedback.php. Laravel 12 discovers listeners in app/Listeners automatically.

<?php

namespace App\Listeners;

use FilaForms\Core\Events\FormSubmitted;
use Illuminate\Support\Facades\Log;

final class LogWebsiteFeedback
{
    public function handle(FormSubmitted $event): void
    {
        $data = $event->submission->data;

        $pageUrl = $data['page_url'] ?? null;
        $feedbackType = $data['feedback_type'] ?? null;
        $screenshot = $data['screenshot'] ?? null;

        Log::info('Website feedback received', [
            'form_id' => $event->form->getKey(),
            'submission_id' => $event->submission->getKey(),
            'page_url' => $pageUrl,
            'feedback_type' => $feedbackType,
            'screenshot' => $screenshot,
        ]);
    }
}

Route different feedback types to the people who can act on them. A content report may need an editor. A page failure may need an engineer. Keep the original submission available when a reviewer creates a ticket, because the screenshot and page URL explain why the work started.

Set a review cadence before publishing the form. A fast acknowledgement can help support reports. A weekly review may suit small visual issues. The best destination depends on whether your team fixes pages through a support queue, a content workflow, or an engineering backlog.

Use the FilaForms features for Laravel and Filament to decide where notifications, conditional fields, and submission analytics fit your maintenance process. The template supplies the reporting structure. Your application supplies ownership, response time, and the work that resolves the report.

When this template is the wrong tool

Choose a different reporting approach when your team needs technical telemetry from the visitor's browser. This template records what the visitor submits. It does not collect console errors, network failures, session replay, or an automatic reproduction path.

It is also the wrong tool when the report must prove that an issue affects every visitor. A single submission identifies an experience worth checking. Your team still needs monitoring, tests, and direct investigation to establish scope and cause.

Use this form for direct reports that need page context and a visible record. Use your own diagnostic tools when you need browser-level evidence or automated error collection. That division keeps the visitor form short and keeps technical investigation with the systems built to support it.

Use this template in your own application

With FilaForms installed, one call creates the form with every field, rule, and setting listed above. Then edit it in the builder.

use FilaForms\Core\Support\FormTemplates;

$form = FormTemplates::createFormFromTemplate('website-feedback');
Template schema (JSON)
{
    "name": "Website Feedback Form",
    "description": "Catch usability problems with page context and severity",
    "icon": "heroicon-o-computer-desktop",
    "category": "Feedback & Surveys",
    "popularity": "High",
    "sections": [
        {
            "name": "What Happened",
            "fields": [
                {
                    "label": "Page URL",
                    "type": "link",
                    "code": "page_url",
                    "required": true,
                    "placeholder": "https://example.com/pricing",
                    "width": "100"
                },
                {
                    "label": "Feedback Type",
                    "type": "toggle-buttons",
                    "code": "feedback_type",
                    "required": true,
                    "options": [
                        {
                            "value": "Confusing"
                        },
                        {
                            "value": "Broken"
                        },
                        {
                            "value": "Slow"
                        },
                        {
                            "value": "Suggestion"
                        },
                        {
                            "value": "Praise"
                        }
                    ],
                    "width": "100"
                },
                {
                    "label": "Tell Us More",
                    "type": "textarea",
                    "code": "details",
                    "required": true,
                    "validation": [
                        {
                            "name": "min",
                            "parameters": [
                                "10"
                            ]
                        }
                    ],
                    "width": "100"
                },
                {
                    "label": "Screenshot",
                    "type": "file-upload",
                    "code": "screenshot",
                    "required": false,
                    "width": "100"
                }
            ]
        },
        {
            "name": "Your Setup",
            "fields": [
                {
                    "label": "Device",
                    "type": "select",
                    "code": "device",
                    "required": false,
                    "options": [
                        {
                            "value": "Desktop"
                        },
                        {
                            "value": "Laptop"
                        },
                        {
                            "value": "Tablet"
                        },
                        {
                            "value": "Phone"
                        }
                    ],
                    "width": "50"
                },
                {
                    "label": "Browser",
                    "type": "select",
                    "code": "browser",
                    "required": false,
                    "options": [
                        {
                            "value": "Chrome"
                        },
                        {
                            "value": "Safari"
                        },
                        {
                            "value": "Firefox"
                        },
                        {
                            "value": "Edge"
                        },
                        {
                            "value": "Other"
                        }
                    ],
                    "width": "50"
                },
                {
                    "label": "Email Address",
                    "type": "email",
                    "code": "email",
                    "required": false,
                    "description": "Only if you want a reply",
                    "validation": [
                        {
                            "name": "email",
                            "parameters": []
                        }
                    ],
                    "width": "50"
                }
            ]
        }
    ]
}

Frequently asked questions

What does this Laravel website feedback form collect?
It collects the page URL, feedback type, and a screenshot. The field table below shows the imported structure.
Can I adapt this website feedback form for a mobile app?
Yes. Replace page_url with a screen_name select that matches your app's own navigation.
How do I route website feedback in my Laravel application?
Listen for FilaForms\\Core\\Events\\FormSubmitted and read page_url, feedback_type, and screenshot from the submission data.
What does the screenshot show?
The screenshot is a static file, not a live DOM snapshot. It shows what the reporter chose to include, not console errors or a way to reproduce the bug.

More templates