Feedback & Surveys template

Collect customer testimonials your marketing team can actually publish

Import a Laravel testimonial collection form for Filament, collect publishable customer feedback, and route consented submissions into your application.

Open this template in the demo builder 8 fields, 5 required. Free demo account, no card.

Updated

This Laravel testimonial collection form gives customers a clear place to leave a review, provide a rating, and grant permission to publish their words. Import it into FilaForms when your Laravel application needs testimonial submissions stored beside the customer records and editorial workflow you already run.

The field table below provides the imported structure, and the settings block controls how it behaves in your panel. After a customer submits the form, your team reviews the submission in FilaForms. Laravel then routes the email, rating, and publish permission into an approval workflow.

Fields in this template (8 fields, 5 required)

Field types used: Text, Email, Select, Textarea, Radio. Every field is editable in the builder after import.

Your Information

Field Type Required Validation
Full Name full_name Text Yes required
Email Address email Email Yes required
Company company Text No none
Job Title job_title Text No none

Your Testimonial

Field Type Required Validation
Overall Rating rating Select, 5 options Yes required
How long have you been a customer? customer_duration Select, 5 options No none
Your Testimonial testimonial Textarea Yes required
May we publish your testimonial? publish_permission Radio, 4 options Yes required

Turn customer feedback into approved testimonial content

The field table below separates what a customer says from the context your team needs to assess it. A review has more value when an editor can connect it to a person, understand the rating, and see whether publication is allowed. This structure gives marketing a reviewable record instead of an isolated quote copied from an inbox.

Keep the first request focused on the customer's experience. Ask for the detail that makes a quote useful on a page. That means the problem they had, the result they noticed, or the part of the product they would recommend. The reader should have enough room to write naturally. Your editor should still have enough context to decide whether the statement fits the page where it may appear.

BrightLocal's 2024 Local Consumer Review Survey found that 50% of consumers trust online reviews as much as personal recommendations from friends and family. That makes approval and attribution application work, not an afterthought. A testimonial should not move directly from a form response to a public page without someone checking its accuracy, relevance, and permission.

Use the settings block to match the collection flow to the relationship with the customer. A request sent after a successful support case can use a warmer introduction than a request sent after a new customer finishes onboarding. An account manager may ask for feedback after a milestone. A product team may request it after a customer adopts a specific feature. The form can stay consistent while the invitation and review route reflect the moment that prompted it.

Do not treat a rating as a complete editorial decision. A high rating may come with a short response that lacks useful detail. A lower rating can reveal an issue that support should handle before anyone requests permission to quote it. Review the submission as a whole, then decide whether to publish, follow up, or send the feedback to the relevant team.

Adapt the template for a consumer app

For a B2C app, drop job_title and company, then add a photo upload field so testimonials can carry a customer photo. Those business details often add friction for individual customers. A photo can provide useful context when your marketing team has permission to show it with the testimonial.

Treat that photo as separate from the written consent decision. Your review process should confirm where the image may appear and how long it may remain in use. The publish permission can help establish the intended publication path, but it does not settle every rights question around an image.

You may also adjust the follow-up copy for the channel that brought the customer to the form. A post-purchase request can ask about the buying experience. An in-app prompt can ask about the result after someone has used the product. Keep the form's purpose stable, and give each invitation enough context that the customer knows what they are being asked to share.

Avoid adding a question because it might be useful someday. Each extra request creates more information for someone to review and protect. Keep fields only when they change the editorial decision, the approval process, or the way your application routes the submission.

Route submissions through Laravel

FilaForms emits FormSubmitted after a customer submits this template. The listener below reads email, rating, and publish_permission from the submission data. It logs a compact handoff record with both model identifiers, which you can replace with your own approval action or queued workflow.

Save this listener as app/Listeners/LogTestimonialSubmission.php. Laravel 12 discovers listeners in that directory automatically.

<?php

namespace App\Listeners;

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

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

        $email = $data['email'] ?? null;
        $rating = $data['rating'] ?? null;
        $publishPermission = $data['publish_permission'] ?? null;

        Log::info('Testimonial submission received', [
            'form_id' => $event->form->getKey(),
            'submission_id' => $event->submission->getKey(),
            'email' => $email,
            'rating' => $rating,
            'publish_permission' => $publishPermission,
        ]);
    }
}

Use the handoff to create an internal review item rather than a public testimonial. An editor can verify the wording, choose the right product page, and ask for clarification when the response lacks context. A customer success owner can contact a respondent if a rating indicates an unresolved issue. Your application can preserve the original submission while related records track those decisions.

Keep publish permission visible in the review workflow. It should inform whether a quote can proceed to editorial review. It should not become an automatic publishing switch. The publish_permission field records consent to publish, not proof the testimonial is genuine or a signed photo release. Confirm provenance and any additional release requirements through the process appropriate for your organisation.

Choose a different tool when the application boundary does not fit

Choose this template when developers already run the customer-facing application and want submission data in the same database as the rest of their workflow. FilaForms is a Laravel form builder for Filament when you need visual form building with application-owned data. Review the FilaForms features for Laravel and Filament before deciding which approval steps should remain inside your application.

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('testimonial-collection');
Template schema (JSON)
{
    "name": "Testimonial Collection",
    "description": "Collect customer testimonials and reviews for social proof",
    "icon": "heroicon-o-star",
    "category": "Feedback & Surveys",
    "popularity": "High",
    "sections": [
        {
            "name": "Your Information",
            "fields": [
                {
                    "label": "Full Name",
                    "type": "text",
                    "code": "full_name",
                    "required": true,
                    "width": "50"
                },
                {
                    "label": "Email Address",
                    "type": "email",
                    "code": "email",
                    "required": true,
                    "width": "50"
                },
                {
                    "label": "Company",
                    "type": "text",
                    "code": "company",
                    "required": false,
                    "width": "50"
                },
                {
                    "label": "Job Title",
                    "type": "text",
                    "code": "job_title",
                    "required": false,
                    "width": "50"
                }
            ]
        },
        {
            "name": "Your Testimonial",
            "fields": [
                {
                    "label": "Overall Rating",
                    "type": "select",
                    "code": "rating",
                    "required": true,
                    "options": [
                        {
                            "value": "5 - Excellent"
                        },
                        {
                            "value": "4 - Very Good"
                        },
                        {
                            "value": "3 - Good"
                        },
                        {
                            "value": "2 - Fair"
                        },
                        {
                            "value": "1 - Poor"
                        }
                    ],
                    "width": "50"
                },
                {
                    "label": "How long have you been a customer?",
                    "type": "select",
                    "code": "customer_duration",
                    "required": false,
                    "options": [
                        {
                            "value": "Less than 3 months"
                        },
                        {
                            "value": "3-6 months"
                        },
                        {
                            "value": "6-12 months"
                        },
                        {
                            "value": "1-2 years"
                        },
                        {
                            "value": "2+ years"
                        }
                    ],
                    "width": "50"
                },
                {
                    "label": "Your Testimonial",
                    "type": "textarea",
                    "code": "testimonial",
                    "required": true,
                    "placeholder": "Tell us about your experience...",
                    "width": "100"
                },
                {
                    "label": "May we publish your testimonial?",
                    "type": "radio",
                    "code": "publish_permission",
                    "required": true,
                    "options": [
                        {
                            "value": "Yes, with my full name"
                        },
                        {
                            "value": "Yes, with first name only"
                        },
                        {
                            "value": "Yes, anonymously"
                        },
                        {
                            "value": "No"
                        }
                    ],
                    "width": "100"
                }
            ]
        }
    ]
}

Frequently asked questions

What happens after a customer submits this testimonial form?
Your team can review the submission in FilaForms, then use a Laravel listener to route the email, rating, and publish permission into an approval workflow.
How should I adapt this testimonial form for a B2C app?
Drop job_title and company, then add a photo upload field so testimonials can carry a customer photo.
Does publish_permission prove that a testimonial is genuine?
No. The publish_permission field records consent to publish, not proof the testimonial is genuine or a signed photo release.

More templates