HR & Recruitment template
Run structured performance reviews your managers can complete in minutes
Import a Laravel performance review form for Filament, then route manager ratings into your application after each completed review.
Updated
This Laravel performance review form gives managers a consistent way to record an employee's review inside the Laravel and Filament application your team already runs. Import it, adjust the rating categories for your review cycle, and each completed review becomes a submission in your own database.
The field table below supplies the manager-facing inputs. Once a manager submits the review, FilaForms records one performance review snapshot in your application's database. Your Laravel code can then notify the right people, create a related internal record, or pass the result into an existing HR workflow.
Consistent rating categories help managers compare work using the same prompts. They also give reviewers less room to substitute a vague summary for a useful assessment. Gallup reported in 2024 that only 2% of Fortune 500 CHROs strongly agree their performance management system inspires employees to improve. That finding makes clear review prompts and a defined follow-up process product requirements, not extras.
Review the field table below against the language your managers already use. Keep categories stable during a review cycle when reports or later decisions depend on them. Change labels when your organisation has a clear definition for the replacement. Avoid adding fields merely because they might be useful one day. Extra questions slow completion and make it harder to compare submissions.
For a self-review step, add a self_rating select next to each manager rating field. Let the employee complete that step before the manager. The paired ratings create a focused starting point for the conversation, because the manager can see where their assessment differs from the employee's. Decide whether managers can see those responses before they save their own review. That choice depends on your review policy, not the form builder.
This template belongs in an application where access is already controlled through Laravel and Filament. A manager should reach the form through the same authenticated area that holds the employee record or review task. The submission dashboard can help an administrator inspect completed reviews. Your application should still own any rules about who may view a review, when it becomes visible, and whether a manager may revise it.
Fields in this template (11 fields, 8 required)
Field types used: Text, Select, Textarea. Every field is editable in the builder after import.
Employee Information
| Field | Type | Required | Validation |
|---|---|---|---|
Employee Name
employee_name
|
Text | Yes |
required |
Position
position
|
Text | Yes |
required |
Department
department
|
Text | Yes |
required |
Review Period
review_period
|
Text | Yes |
required |
Performance Evaluation
| Field | Type | Required | Validation |
|---|---|---|---|
Quality of Work
quality_rating
|
Select, 5 options | Yes |
required |
Productivity
productivity_rating
|
Select, 5 options | Yes |
required |
Communication Skills
communication_rating
|
Select, 5 options | Yes |
required |
Teamwork
teamwork_rating
|
Select, 5 options | Yes |
required |
Key Achievements
achievements
|
Textarea | No | none |
Areas for Improvement
improvement_areas
|
Textarea | No | none |
Goals for Next Period
next_goals
|
Textarea | No | none |
Route completed reviews through Laravel
Listen for the submission event when a completed review needs to trigger application work. The listener below reads the employee name, department, and quality rating from this template. It records identifiers and submitted values in Laravel's log. That gives you a safe place to confirm the event payload before connecting it to your own notification or workflow.
<?php
declare(strict_types=1);
namespace App\Listeners;
use FilaForms\Core\Events\FormSubmitted;
use Illuminate\Support\Facades\Log;
final class LogPerformanceReviewSubmission
{
public function handle(FormSubmitted $event): void
{
$submission = $event->submission;
$data = $submission->data;
Log::info('Performance review submitted', [
'form_id' => $event->form->getKey(),
'submission_id' => $submission->getKey(),
'employee_name' => $data['employee_name'] ?? null,
'department' => $data['department'] ?? null,
'quality_rating' => $data['quality_rating'] ?? null,
]);
}
}
Laravel can discover this listener through its normal event discovery when the listener is in the App\Listeners namespace. If your application uses explicit event registration, register this listener for FilaForms\Core\Events\FormSubmitted. Keep the listener focused on the submission event. Put any employee lookup or review-period rules in the application service that already owns those concepts.
The listener reads values from the submission data, rather than assuming a separate review model exists. That makes the import useful while the review process remains simple. When your application later needs review history or prior-period comparisons, add an application-owned record that references the stored submission. This template can remain the manager input surface while the richer workflow develops around it.
Choose the next action based on the review cycle. A completed manager review might alert an HR administrator, mark an internal task ready for discussion, or create a private item for calibration. Do not treat submission alone as employee acknowledgement. The template does not provide employee sign-off, so add an explicit approval step when your process requires it.
Use the FilaForms home page to check whether the plugin fits the rest of your Laravel application. The useful boundary is simple: use the visual builder for the review interface, then use Laravel for the domain workflow that follows the submitted snapshot.
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('performance-review');
Template schema (JSON)
{
"name": "Performance Review Form",
"description": "Employee performance evaluation and goal setting",
"icon": "heroicon-o-clipboard-document-check",
"category": "HR & Recruitment",
"popularity": "High",
"sections": [
{
"name": "Employee Information",
"fields": [
{
"label": "Employee Name",
"type": "text",
"code": "employee_name",
"required": true,
"width": "50"
},
{
"label": "Position",
"type": "text",
"code": "position",
"required": true,
"width": "50"
},
{
"label": "Department",
"type": "text",
"code": "department",
"required": true,
"width": "50"
},
{
"label": "Review Period",
"type": "text",
"code": "review_period",
"required": true,
"placeholder": "e.g., Q4 2024",
"width": "50"
}
]
},
{
"name": "Performance Evaluation",
"fields": [
{
"label": "Quality of Work",
"type": "select",
"code": "quality_rating",
"required": true,
"options": [
{
"value": "1",
"label": "1 - Poor"
},
{
"value": "2",
"label": "2 - Fair"
},
{
"value": "3",
"label": "3 - Good"
},
{
"value": "4",
"label": "4 - Very Good"
},
{
"value": "5",
"label": "5 - Excellent"
}
],
"width": "50"
},
{
"label": "Productivity",
"type": "select",
"code": "productivity_rating",
"required": true,
"options": [
{
"value": "1",
"label": "1 - Poor"
},
{
"value": "2",
"label": "2 - Fair"
},
{
"value": "3",
"label": "3 - Good"
},
{
"value": "4",
"label": "4 - Very Good"
},
{
"value": "5",
"label": "5 - Excellent"
}
],
"width": "50"
},
{
"label": "Communication Skills",
"type": "select",
"code": "communication_rating",
"required": true,
"options": [
{
"value": "1",
"label": "1 - Poor"
},
{
"value": "2",
"label": "2 - Fair"
},
{
"value": "3",
"label": "3 - Good"
},
{
"value": "4",
"label": "4 - Very Good"
},
{
"value": "5",
"label": "5 - Excellent"
}
],
"width": "50"
},
{
"label": "Teamwork",
"type": "select",
"code": "teamwork_rating",
"required": true,
"options": [
{
"value": "1",
"label": "1 - Poor"
},
{
"value": "2",
"label": "2 - Fair"
},
{
"value": "3",
"label": "3 - Good"
},
{
"value": "4",
"label": "4 - Very Good"
},
{
"value": "5",
"label": "5 - Excellent"
}
],
"width": "50"
},
{
"label": "Key Achievements",
"type": "textarea",
"code": "achievements",
"required": false,
"placeholder": "List major accomplishments this period...",
"width": "100"
},
{
"label": "Areas for Improvement",
"type": "textarea",
"code": "improvement_areas",
"required": false,
"placeholder": "Areas where employee can improve...",
"width": "100"
},
{
"label": "Goals for Next Period",
"type": "textarea",
"code": "next_goals",
"required": false,
"placeholder": "Goals and objectives for next review period...",
"width": "100"
}
]
}
]
}
Frequently asked questions
- What does this performance review form store?
- Each submission stores one performance review snapshot in your application's database.
- Can I add employee self-ratings?
- Yes. Add a self_rating select next to each manager rating field, then let the employee complete that step before the manager.
- How can my Laravel application handle a completed review?
- Listen for FilaForms\Core\Events\FormSubmitted and read the submitted values from the submission data in a Laravel listener.
- When is this performance review form the wrong tool?
- It needs an existing Laravel and Filament application, and it does not track review history, employee sign-off, or automatically link back to a prior period.