Install the Package
composer require shipbytes/laravel-ui-kit
php artisan ui-kit:install
Follow the interactive prompts to select core features and optional modules (e.g., admin-middleware, profile).
Publish Assets
php artisan ui-kit:publish
npm install && npm run dev # or `build` for production
Run Migrations
php artisan migrate
Test the Admin Panel
/admin (protected by default; configure middleware in app/Providers/AuthServiceProvider.php)./admin/users (Livewire-powered).Customize the Admin Shell
Edit config/admin.php to modify the sidebar navigation:
'nav' => [
'dashboard' => ['icon' => 'home', 'label' => 'Dashboard'],
'users' => ['icon' => 'users', 'label' => 'Users'],
],
php artisan make:livewire Admin/Posts
routes/admin.php:
Route::get('/posts', Admin\Posts::class)->name('admin.posts');
config/admin.php:
'nav' => [
// ...existing items
'posts' => ['icon' => 'file-text', 'label' => 'Posts'],
],
/admin/posts—the new item appears in the sidebar with the correct icon.Install Optional Modules Interactively
php artisan ui-kit:install --module=profile,analytics
profile add self-service user pages (e.g., /admin/profile).analytics injects UTM tracking via middleware (configure in config/ui-kit.php).Extend Existing Modules
Example: Customize the support-tickets module by publishing its views:
php artisan vendor:publish --tag=ui-kit-support-tickets
Override resources/views/ui-kit/support-tickets/queue.blade.php.
config/admin.php. Use this pattern for dynamic items:
'nav' => [
'settings' => [
'icon' => 'cog',
'label' => 'Settings',
'children' => [
'billing' => ['icon' => 'credit-card', 'label' => 'Billing'],
'api-keys' => ['icon' => 'key', 'label' => 'API Keys'],
],
],
],
'nav' => [
'reports' => fn() => [
'icon' => 'chart-bar',
'label' => 'Reports',
'visible' => auth()->user()->can('view_reports'),
],
],
Volt for Server-Side Rendering
The kit uses Volt for admin pages (e.g., /admin/users). Extend templates by publishing:
php artisan vendor:publish --tag=ui-kit-views
Override resources/views/ui-kit/layouts/app.blade.php to add global headers/footers.
Livewire Components All CRUD operations (e.g., Users) are Livewire components. Reuse patterns:
// app/Http/Livewire/Admin/Users/Index.php
public function mount()
{
$this->query = User::query();
}
public function updateQuery()
{
$this->query->when($this->search, fn($q) => $q->where('name', 'like', "%{$this->search}%"));
}
mount()/updateQuery() logic for new CRUD pages.Fortify + Livewire Auth pages (login, register) use Livewire + Fortify. Customize by publishing:
php artisan vendor:publish --tag=ui-kit-auth
Override resources/views/ui-kit/auth/login.blade.php.
Admin Middleware
The kit includes HandleAdminUsers middleware (published to app/Http/Middleware/HandleAdminUsers.php). Extend it:
public function handle($request, Closure $next)
{
if (!$request->user()?->is_admin && !config('ui-kit.admin_middleware.skip_check')) {
abort(403);
}
return $next($request);
}
config('ui-kit.colors')). Extend it:
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
primary: config('ui-kit.colors.primary'),
danger: config('ui-kit.colors.danger'),
},
},
},
};
resources/js/stores/theme.js). Customize the toggle:
// resources/js/stores/theme.js
document.addEventListener('alpine:init', () => {
Alpine.store('theme', {
toggle() {
this.dark = !this.dark;
localStorage.setItem('ui-kit-theme', this.dark ? 'dark' : 'light');
},
init() {
this.dark = localStorage.getItem('ui-kit-theme') === 'dark';
},
});
});
admin-middleware module:
php artisan ui-kit:install --module=admin-middleware
HasRoles trait. Use it in your User model:
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
}
is_admin (add to your User model).profile module’s avatar uploads:
composer require intervention/image
StoreAvatar trait for handling uploads:
use Shipbytes\UiKit\Traits\StoreAvatar;
class User extends Authenticatable
{
use StoreAvatar;
}
php artisan vendor:publish --tag=ui-kit-mailables
Edit resources/views/vendor/ui-kit/emails/reset-password.blade.php.composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
routes/api.php:
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', fn() => auth()->user());
});
// tests/Feature/Admin/UsersTest.php
public function test_users_crud()
{
$user = User::factory()->create(['is_admin' => true]);
actingAs($user);
$response = get('/admin/users');
$response->assertStatus(200);
}
HandleAdminUsers middleware in app/Http/Kernel.php:
'web' => [
// ...
\Shipbytes\UiKit\Http\Middleware\HandleAdminUsers::class,
],
php artisan ui-kit:publish to publish the middleware stub.AdminUser instead of Admin/Users). This breaks the kit’s auto-registration.Admin/{SingularPlural} (e.g., Admin/Posts for `/adminHow can I help you explore Laravel packages today?