Agency & 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 12 fields, 7 required. Free demo account, no card.

Updated

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.

<?php

declare(strict_types=1);

namespace App\Listeners;

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

final class RouteContentRequest
{
    public function handle(FormSubmitted $event): void
    {
        $data = $event->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 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.

More templates