Laravel Content Request Form Template | FilaForms                                 [ ![Filaforms Logo](https://filaforms.app/logo.svg)FilaForms

 ](https://filaforms.app)  [ Features ](https://filaforms.app#features) [ Pricing ](https://filaforms.app/pricing) [ Blog ](https://filaforms.app/blog) [ Documentation ](https://docs.filaforms.app)  [ Try Demo ](https://filaforms.app/login) [ Buy a license ](https://filaforms.app/pricing#plans) 

 [ Features ](https://filaforms.app#features) [ Pricing ](https://filaforms.app/pricing) [ Blog ](https://filaforms.app/blog) [ Documentation ](https://docs.filaforms.app) [ Try Demo ](https://filaforms.app/login) [ Buy a license ](https://filaforms.app/pricing#plans) 

  1. [Home](https://filaforms.app)
2. /
3. [Form Templates](https://filaforms.app/templates)
4. /
5. Brief a writer with everything they need before they start

 Agency &amp; Freelance template

Brief a writer with everything they need before they start
==========================================================

Import a Laravel content request form template for Filament, collect complete writer briefs, and route each request into your application.

 [ Open this template in the demo builder ](https://filaforms.app/app/templates/content-request) 12 fields, 7 required. Free demo account, no card. 

 Updated September 2, 2026

 This Laravel content request form gives a requester one place to provide the context a writer needs before work begins. Import it into FilaForms, then use the field table below to collect a deadline, the brief, and whether legal review is required.

After somebody submits the form, FilaForms stores the brief in your application. A Laravel listener can route the deadline, brief, and legal review status to the writer who owns it. That keeps requests close to the projects, clients, and people your team already manages.

The field table below separates the work request from the review decision. A writer can first understand the requested outcome, then see the time constraint and whether the completed work needs another check. This order makes the intake easier to scan when several requests arrive together.

  Fields in this template (12 fields, 7 required) 
-------------------------------------------------

 Field types used: Text, Email, Date, Select, Number, Tags Input, Markdown Editor, Toggle Buttons, File Upload, Toggle. Every field is editable in the builder after import.

### Requester

    Field Type Required Validation      Your Name `full_name`   Text  Yes  `required`     Email Address `email`   Email  Yes  `required | email`     Team `team`   Text  No  none     Deadline `deadline`   Date  Yes  `required`     

### The Content

    Field Type Required Validation      Content Type `content_type`   Select, 7 options  Yes  `required`     Word Count `word_count`   Number  No  `integer | min:50`     Working Title `title`   Text  Yes  `required`     Target Keywords `keywords`   Tags Input  No  none     Brief `brief`   Markdown Editor  Yes  `required`     Tone of Voice `tone`   Toggle Buttons, 4 options  Yes  `required`     Reference Material `references`   File Upload  No  none     Needs Legal Review `legal_review`   Toggle  No  none     

 Route each brief to the writer who owns it
------------------------------------------

Assignment should happen after submission, not in an email thread that becomes the only record of a request. Map the imported form to the writer, editor, or content mailbox that owns its queue. A small team can use one shared destination. A larger team can map different forms to different owners for client work, product content, or internal communications.

Laravel discovers listeners in `app/Listeners` automatically. The listener below reads `deadline`, `brief`, and `legal_review` from the submitted data. It records the handoff with the form and submission identifiers. Replace the log call with the notification, task creation, or internal assignment action your application already uses.

```
submission->data;

        $deadline = $data['deadline'] ?? null;
        $brief = $data['brief'] ?? null;
        $legalReview = $data['legal_review'] ?? null;

        Log::info('Content request received', [
            'form_id' => $event->form->getKey(),
            'submission_id' => $event->submission->getKey(),
            'deadline' => $deadline,
            'brief' => $brief,
            'legal_review' => $legalReview,
        ]);
    }
}

```

Keep the original submission as the source record, even when your listener creates a separate task. The task can carry the writer assignment and a workflow state. The submission preserves the requester's wording when a writer, editor, or account manager needs to revisit the initial brief.

Do not make the listener decide editorial priorities from the text alone. That decision belongs in the content process your team already runs. The listener should hand over the values reliably. The assignment step can then apply your existing ownership rules, such as client account, content type, or publication channel.

For an agency, add a `budget_code` field when outsourced writers need a spending reference. The code gives the writer or coordinator a clear link between the request and the approved budget. Use a label that matches the accounting term in your application. Avoid asking for a free-form budget explanation when the code already identifies the relevant agreement.

Teams without a compliance step can remove `legal_review`. That makes the request faster to complete and avoids a status that nobody will act on. Keep the field when legal, regulated, or brand-sensitive content requires a clear signal before publication. The value should trigger a defined handoff, rather than becoming an ignored note in the brief.

Consistent intake does not mean every brief must use the same language. Let requesters explain the audience, purpose, and desired outcome in the brief. Keep the standard structure around that explanation. Writers can then compare requests quickly without forcing every client, product, or campaign into an artificial format.

The settings block lets your team adjust the imported form in the panel. Change labels and choices when your content process changes. This keeps the visible request process aligned with the people who use it. It also avoids a hand-written form schema drifting away from the intake process that editors expect.

This template only captures the initial brief. It does not manage the writer's workflow, revisions, approval, or delivery. Use a separate system to own those stages after the request reaches its assigned writer. That boundary keeps the form focused on collecting a useful starting point.

Use this template when your application needs a repeatable brief before content work starts. [FilaForms is a Laravel form builder for Filament](/) when you want the collection flow and submissions inside your own application. Review the [FilaForms feature set](/features) if your team also needs conditional questions, multi-step forms, or notification handling around content requests.

 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('content-request');
```

  Template schema (JSON) ```
{
    "name": "Content Request Form",
    "description": "Brief writers properly, in markdown, with keywords and deadline",
    "icon": "heroicon-o-pencil",
    "category": "Agency & Freelance",
    "popularity": "Medium",
    "sections": [
        {
            "name": "Requester",
            "fields": [
                {
                    "label": "Your Name",
                    "type": "text",
                    "code": "full_name",
                    "required": true,
                    "width": "50"
                },
                {
                    "label": "Email Address",
                    "type": "email",
                    "code": "email",
                    "required": true,
                    "validation": [
                        {
                            "name": "email",
                            "parameters": []
                        }
                    ],
                    "width": "50"
                },
                {
                    "label": "Team",
                    "type": "text",
                    "code": "team",
                    "required": false,
                    "width": "50"
                },
                {
                    "label": "Deadline",
                    "type": "date",
                    "code": "deadline",
                    "required": true,
                    "width": "50"
                }
            ]
        },
        {
            "name": "The Content",
            "fields": [
                {
                    "label": "Content Type",
                    "type": "select",
                    "code": "content_type",
                    "required": true,
                    "options": [
                        {
                            "value": "Blog post"
                        },
                        {
                            "value": "Landing page"
                        },
                        {
                            "value": "Case study"
                        },
                        {
                            "value": "Email"
                        },
                        {
                            "value": "Social post"
                        },
                        {
                            "value": "Documentation"
                        },
                        {
                            "value": "Press release"
                        }
                    ],
                    "width": "50"
                },
                {
                    "label": "Word Count",
                    "type": "number",
                    "code": "word_count",
                    "required": false,
                    "validation": [
                        {
                            "name": "integer",
                            "parameters": []
                        },
                        {
                            "name": "min",
                            "parameters": [
                                "50"
                            ]
                        }
                    ],
                    "width": "50"
                },
                {
                    "label": "Working Title",
                    "type": "text",
                    "code": "title",
                    "required": true,
                    "width": "100"
                },
                {
                    "label": "Target Keywords",
                    "type": "tags-input",
                    "code": "keywords",
                    "required": false,
                    "width": "100"
                },
                {
                    "label": "Brief",
                    "type": "markdown-editor",
                    "code": "brief",
                    "required": true,
                    "description": "Markdown is supported, so you can paste an outline with headings",
                    "width": "100"
                },
                {
                    "label": "Tone of Voice",
                    "type": "toggle-buttons",
                    "code": "tone",
                    "required": true,
                    "options": [
                        {
                            "value": "Formal"
                        },
                        {
                            "value": "Conversational"
                        },
                        {
                            "value": "Technical"
                        },
                        {
                            "value": "Playful"
                        }
                    ],
                    "width": "100"
                },
                {
                    "label": "Reference Material",
                    "type": "file-upload",
                    "code": "references",
                    "required": false,
                    "width": "100"
                },
                {
                    "label": "Needs Legal Review",
                    "type": "toggle",
                    "code": "legal_review",
                    "required": false,
                    "width": "50"
                }
            ]
        }
    ]
}
```

  Frequently asked questions
--------------------------

  What happens after somebody submits this content request form? FilaForms stores the submitted brief in your application, and a Laravel listener can route its deadline, brief, and legal review status to the writer who owns it. 

 How can I assign a content request to the right writer? Map the imported form to a writer or content mailbox in a FormSubmitted listener, then send the submitted brief to that owner. 

 How should I adapt this form for outsourced writers? Add a budget code when outsourced writers need a spending reference, or remove legal\_review when your team has no compliance step. 

 Does this template manage revisions and approvals? No. The form captures the initial brief only, so a separate system still owns the writer's workflow, revisions, approval, and delivery. 

   Run this form inside your Laravel app.
--------------------------------------

 FilaForms installs as a Filament plugin. Submissions land in your own database.

 [ Try it in the demo ](https://filaforms.app/app/templates/content-request) [ See pricing ](https://filaforms.app/pricing) 

More templates
--------------

- [ Get everything you need from a new client before kickoff Import a Laravel client onboarding form for Filament, collect project details, and route e... ](https://filaforms.app/templates/client-onboarding)
- [ Capture scope changes and client approval before work starts Import a Laravel change request form for Filament, record scope, cost, priority, and clien... ](https://filaforms.app/templates/change-request)
- [ Review a client's retainer hours and priorities every month Import a Laravel retainer check-in form for Filament to record monthly hours, client satis... ](https://filaforms.app/templates/retainer-check-in)
- [ Collect customer testimonials your marketing team can actually publish Import a Laravel testimonial collection form for Filament, collect publishable customer fe... ](https://filaforms.app/templates/testimonial-collection)
- [ Ask attendees how your event went, right after it ends Import a Laravel event feedback form for Filament, collect attendee ratings, and route eac... ](https://filaforms.app/templates/event-feedback)
- [ Capture honest feedback before an employee's last day Install a Laravel exit interview form for Filament, route sensitive answers carefully, and... ](https://filaforms.app/templates/exit-interview)
- [ Enroll a student with guardian and medical details in one form Import a Laravel student enrollment form for Filament, collect guardian and medical detail... ](https://filaforms.app/templates/student-enrollment)
- [ Find out how engaged your team really is, department by department Import a Laravel employee engagement survey for Filament, compare department feedback, and... ](https://filaforms.app/templates/employee-engagement-survey)

    ![FilaForms Logo](/logo.svg) FilaForms 

 Laravel form infrastructure for Filament. Stop rebuilding forms on every project.

 [ Buy a license   ](https://filaforms.app/pricing#plans) 

 ### Product

 [ Features ](https://filaforms.app#features) [ Documentation ](https://docs.filaforms.app) [ Blog ](https://filaforms.app/blog) [ Compare form builders ](https://filaforms.app/compare) [ Templates ](https://filaforms.app/templates) [ Pricing ](https://filaforms.app/pricing) [ About ](https://filaforms.app/about) [ Contact ](mailto:hello@filaforms.app) 

 ### Legal

 [ Terms of Service ](https://filaforms.app/terms-of-service) [ Privacy Policy ](https://filaforms.app/privacy-policy) 

  © 2025-2026 FilaForms. All rights reserved.

 [    ](mailto:hello@filaforms.app) [    ](https://x.com/MinasyanManuk)
