Admin workflows
Admin workflows
Admin workflows
Laravolt v7 is designed for the boring-but-critical screens behind real business systems: lists, forms, actions, approvals, imports, exports, and operational dashboards.
These screens are often called “admin panels”, but in production they become workflow software. People use them to move work forward, enforce rules, and leave an auditable trail.
The workflow shape
Most admin workflows follow the same loop:
- find the record
- inspect its current state
- make a decision or edit
- validate the input
- persist the change
- notify the next person or system
- record what happened
Laravolt gives this loop a consistent structure so each feature does not need a bespoke mini-framework.
Start with the resource
Before building screens, name the business resource and its lifecycle.
For example, an inventory module may have:
ProductStockMovementSupplierPurchaseOrderReceivingNote
Each resource should have clear ownership:
app/ Models/Product.php Http/Controllers/ProductController.php Http/Requests/StoreProductRequest.php Http/Requests/UpdateProductRequest.php Policies/ProductPolicy.php Http/Livewire/Table/ProductTable.phpresources/views/products/ index.blade.php create.blade.php edit.blade.phpThis is ordinary Laravel. Laravolt adds platform primitives around it.
Lists and tables
A list page should answer three questions quickly:
- what records exist?
- which records need attention?
- what actions are safe for the current user?
<x-volt-app title="Products"> <x-slot name="actions"> @can('create', App\Models\Product::class) <x-volt-button href="{{ route('products.create') }}" variant="primary"> New product </x-volt-button> @endcan </x-slot> <livewire:table.product-table /></x-volt-app>Use table components for search, filtering, sorting, pagination, and row actions. Keep database query decisions inside the table class so the Blade view remains readable. See Tables and listings for the current table patterns and command reference.
Create and edit screens
Create and edit screens should share as much structure as possible. Keep validation in FormRequest classes and rendering in PrelineForm.
// app/Http/Requests/StoreProductRequest.phppublic function rules(): array{ return [ 'name' => ['required', 'string', 'max:120'], 'sku' => ['required', 'string', 'max:50', 'unique:products,sku'], 'price' => ['required', 'numeric', 'min:0'], ];}{!! PrelineForm::post('products.store') ->validate(App\Http\Requests\StoreProductRequest::class) !!} {!! PrelineForm::text('name')->label('Product name') !!} {!! PrelineForm::text('sku')->label('SKU')->mask('AAA-9999') !!} {!! PrelineForm::number('price')->label('Price')->mask('currency') !!} {!! PrelineForm::submit('Save product')->primary() !!}{!! PrelineForm::close() !!}The same FormRequest drives server-side validation and client-side hints where supported.
Actions
An action is a named business operation, not just a button. Examples:
- approve an invoice
- reject a request
- resend an invitation
- export selected records
- regenerate a report
- archive a project
Prefer explicit controller methods or action classes over anonymous closure logic in the view.
Route::post('/purchase-orders/{purchaseOrder}/approve', ApprovePurchaseOrderController::class) ->name('purchase-orders.approve') ->middleware('can:approve,purchaseOrder');<x-volt-button as="form" method="POST" action="{{ route('purchase-orders.approve', $purchaseOrder) }}" variant="primary"> Approve</x-volt-button>Auditability
A business workflow should leave evidence. At minimum, decide what needs to be recorded:
- who performed the action
- when it happened
- what changed
- why it changed, if the action needs a reason
- which external system was notified
Use Laravel events, model observers, activity logs, or workflow state transitions depending on the feature. The important thing is to design for review before the system goes live.
Thunderclap scaffolding
When a database table already exists, use Thunderclap as the default v7 path for generating the first version of a Laravolt admin module. It can scaffold the model, controller, form requests, views, routes, table view, service provider, and tests from the table schema.
Use the generated module as a starting point, then review authorization, validation, menu entries, labels, relationships, and business-specific actions before shipping it.
AI-assisted admin development
Admin workflows are a good fit for AI-assisted development because they follow repeatable patterns. To keep generated code safe:
- ask agents to create
FormRequestclasses before writing forms - require policies for every new resource
- keep table queries in table classes
- ask for tests next to every action
- avoid letting agents invent hidden permission names
- review route names, policy methods, and menu entries together
A useful prompt:
Add a Laravolt v7 admin workflow for PurchaseOrder.Create index/create/edit screens, FormRequests, policy methods, sidebar menu entry,and a table with search by number and supplier.Use PrelineForm for forms. Use Suitable for the listing. Do not invent package APIs; mark any uncertain app-specific behavior for review.What to read next
- Forms overview — form conventions for create/edit screens.
- Business actions — the v7 convention for non-CRUD operations on top of generated modules.
- Access control — protect resources and actions.
- Browser testing — verify admin workflows in a real browser.