Agency & Freelance template
Capture scope changes and client approval before work starts
Import a Laravel change request form for Filament, record scope, cost, priority, and client approval before work begins.
Updated
This Laravel change request form gives clients a clear place to describe a scope change before work begins. Import it into FilaForms to record the request, its cost impact, its priority, and client approval inside the Laravel application you run.
FilaForms stores each submission in your Laravel application, where the project owner can review scope, priority, cost impact, and client approval before work begins. The field table below provides the starting structure, while the submission dashboard keeps each request beside the rest of your client workflow.
Fields in this template (13 fields, 8 required)
Field types used: Text, Email, Date, Select, Toggle Buttons, Textarea, Currency, Number, Toggle, File Upload. Every field is editable in the builder after import.
Request
| Field | Type | Required | Validation |
|---|---|---|---|
Project Name
project_name
|
Text | Yes |
required |
Requested By
requested_by
|
Text | Yes |
required |
Email Address
email
|
Yes |
required | email |
|
Date Requested
requested_date
|
Date | Yes |
required |
The Change
| Field | Type | Required | Validation |
|---|---|---|---|
Summary
summary
|
Text | Yes |
required |
Change Type
change_type
|
Select, 6 options | Yes |
required |
Priority
priority
|
Toggle Buttons, 4 options | Yes |
required |
Reason for the Change
reason
|
Textarea | Yes |
required |
What Happens If We Do Nothing?
impact_if_not_done
|
Textarea | No | none |
Estimated Cost Impact
cost_impact
|
Currency | No | none |
Estimated Delay (days)
delay_days
|
Number | No |
integer | min:0 |
Client Approval to Proceed
client_approved
|
Toggle | No | none |
Supporting Files
files
|
File Upload | No | none |
Turn each submitted request into a project decision
The field table below groups the request context before the approval decision. That order helps a client explain the change first, then state its urgency and acknowledge the commercial impact. A project owner can review one complete request instead of reconstructing scope from messages.
Treat the submitted priority as a triage signal, not an automatic delivery promise. A high-priority request may need an immediate response, but it still needs someone to check dependencies, capacity, and the active agreement. Keep the decision with the person accountable for the project plan.
Use the client approval value as evidence that the client saw the proposed change. It allows your team to distinguish a question from a request that can enter planning. The cost impact gives the reviewer the context needed to decide whether the work belongs in the current engagement or needs a separate approval path.
Uptime Institute, Annual Outage Analysis, 2023, reported that 64% of organizations with a major IT outage cited a configuration or change management issue as the cause. That finding concerns IT outages, but it supports a practical habit for client work. Record changes before implementation, then make the responsible person decide what happens next.
The settings block controls the imported form in your panel. Adjust the template visually when your review process changes. Do not duplicate the same decision points in a separate hand-written form, because the submission record should remain the source for the client request.
Route submissions to the project owner
FilaForms emits FormSubmitted after a client submits this template. A Laravel listener can read email, priority, and client_approved from the submission data. It can then record enough context for an internal review queue.
Save this listener as app/Listeners/LogChangeRequest.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 LogChangeRequest
{
public function handle(FormSubmitted $event): void
{
$data = $event->submission->data;
$email = $data['email'] ?? null;
$priority = $data['priority'] ?? null;
$clientApproved = $data['client_approved'] ?? null;
Log::info('Change request received', [
'form_id' => $event->form->getKey(),
'submission_id' => $event->submission->getKey(),
'email' => $email,
'priority' => $priority,
'client_approved' => $clientApproved,
]);
}
}
Replace the log call with your application action after you define the review owner. An agency may create an internal task for the project manager. A smaller practice may notify the developer who owns the engagement. In both cases, the project owner should review the scope, priority, cost impact, and client approval before work begins.
Keep the original submission as the record of what the client requested. A task or notification can make the request visible, but it should not replace the submitted context. This matters when a client later asks why an item was scheduled, deferred, or priced separately.
Adapt it for fixed-price contracts
For a fixed-price contract, add a contract_reference select. It links each change request back to the original agreement. The project owner can then confirm which contract governs the work before deciding whether the requested scope fits the agreed value.
Use a controlled selection for that reference instead of asking clients to type an agreement name. A controlled value reduces mismatches when a client has several active projects. It also gives your Laravel application a stable value for routing the request to the relevant project owner.
The form still needs a human decision after submission. A matching contract reference does not prove that the change belongs in the original scope. It simply gives the reviewer the correct agreement to inspect before deciding the next action.
Use the form within its limits
Recording client_approved and cost_impact is not the same as a signed contract addendum. This form does not update the contract value or generate paperwork. Keep signed changes and contractual records in the process your business already uses.
Choose this template when developers already operate the client portal and want scope-change records in their own database. FilaForms is a Laravel form builder for Filament for teams that need submissions near their application data. Review the FilaForms features for Laravel and Filament when you are deciding how notifications, review queues, and project records should connect.
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('change-request');
Template schema (JSON)
{
"name": "Change Request Form",
"description": "Control scope creep with impact and approval captured up front",
"icon": "heroicon-o-arrow-path",
"category": "Agency & Freelance",
"popularity": "High",
"sections": [
{
"name": "Request",
"fields": [
{
"label": "Project Name",
"type": "text",
"code": "project_name",
"required": true,
"width": "50"
},
{
"label": "Requested By",
"type": "text",
"code": "requested_by",
"required": true,
"width": "50"
},
{
"label": "Email Address",
"type": "email",
"code": "email",
"required": true,
"validation": [
{
"name": "email",
"parameters": []
}
],
"width": "50"
},
{
"label": "Date Requested",
"type": "date",
"code": "requested_date",
"required": true,
"width": "50"
}
]
},
{
"name": "The Change",
"fields": [
{
"label": "Summary",
"type": "text",
"code": "summary",
"required": true,
"width": "100"
},
{
"label": "Change Type",
"type": "select",
"code": "change_type",
"required": true,
"options": [
{
"value": "New feature"
},
{
"value": "Scope change"
},
{
"value": "Design change"
},
{
"value": "Timeline change"
},
{
"value": "Bug or defect"
},
{
"value": "Content change"
}
],
"width": "50"
},
{
"label": "Priority",
"type": "toggle-buttons",
"code": "priority",
"required": true,
"options": [
{
"value": "Low"
},
{
"value": "Normal"
},
{
"value": "High"
},
{
"value": "Urgent"
}
],
"width": "50"
},
{
"label": "Reason for the Change",
"type": "textarea",
"code": "reason",
"required": true,
"width": "100"
},
{
"label": "What Happens If We Do Nothing?",
"type": "textarea",
"code": "impact_if_not_done",
"required": false,
"width": "100"
},
{
"label": "Estimated Cost Impact",
"type": "currency",
"code": "cost_impact",
"required": false,
"width": "50"
},
{
"label": "Estimated Delay (days)",
"type": "number",
"code": "delay_days",
"required": false,
"validation": [
{
"name": "integer",
"parameters": []
},
{
"name": "min",
"parameters": [
"0"
]
}
],
"width": "50"
},
{
"label": "Client Approval to Proceed",
"type": "toggle",
"code": "client_approved",
"required": false,
"width": "50"
},
{
"label": "Supporting Files",
"type": "file-upload",
"code": "files",
"required": false,
"width": "50"
}
]
}
]
}
Frequently asked questions
- What happens after someone submits this change request form?
- FilaForms stores the submission in your Laravel application, where a project owner can review the scope, priority, cost impact, and client approval before work begins.
- Can I use this form for a fixed-price contract?
- Yes. Add a contract_reference select so each change request links to the original agreement.
- How do I route a change request to the project owner?
- Listen for FilaForms\\Core\\Events\\FormSubmitted and read email, priority, and client_approved from the submission data.
- Does this form replace a signed contract addendum?
- No. Recording client_approved and cost_impact does not update the contract value or generate paperwork.