Ship your next
client project
in days, not weeks.

A reusable Laravel starter kit with authentication, roles, and a blog ready to publish, so every new project starts from a working foundation, not a blank repo.

12
Composer packages
3
Roles built in
101
Pest tests passing
routes/app.php
Route::middleware(['auth', 'verified'])->group(function () {
    Route::livewire('dashboard', 'pages::app.dashboard')->name('dashboard');

    Route::middleware(['role:super-admin|admin'])->prefix('system')->group(function () {
        // Users, Sitemap, Settings, Media Library
    });
});
Laravel Livewire Flux UI Tailwind Pest Spatie

Real code, not marketing copy

Every claim on this page ships in the repo

routes/app.php
Route::middleware(['auth', 'verified'])->group(function () {
    Route::livewire('dashboard', 'pages::app.dashboard')->name('dashboard');

    Route::middleware(['role:super-admin|admin'])->prefix('system')->group(function () {
        // Users, Sitemap, Settings, Media Library
    });
});
app/Models/User.php
protected static function booted(): void
{
    static::created(
        fn (User $user) => $user->assignRole(Role::findOrCreate('staff'))
    );
}
app/Models/Post.php
public function registerMediaCollections(): void
{
    $this->addMediaCollection('featured_image')
        ->singleFile()
        ->acceptsMimeTypes(['image/jpeg', 'image/png', 'image/webp']);
}

public function getSlugOptions(): SlugOptions
{
    return SlugOptions::create()
        ->generateSlugsFrom('title')
        ->saveSlugsTo('slug')
        ->doNotGenerateSlugsOnUpdate();
}
tests/Feature/System/UserManagementTest.php
test('admin can view the users list', function () {
    $admin = User::factory()->create();
    $admin->syncRoles(Role::findOrCreate('admin'));

    $other = User::factory()->create(['name' => 'Jane Doe']);

    $this->actingAs($admin)
        ->get(route('system.users'))
        ->assertOk()
        ->assertSee('Jane Doe');
});

Everything this repo actually ships

Authentication

Login, registration, password reset, and email verification, built on Laravel Fortify.

Roles & permissions

3 roles (super-admin, admin, staff) via Spatie Permission. New roles are created with tinker or a seeder: no admin UI, by design.

Blog CMS

Title, excerpt, body, featured image, and a publish toggle, with stable slugs via Spatie Sluggable.

Media Library

Browse and delete every uploaded file across every model from one System panel page.

Per-role dashboards

Each role (super-admin, admin, staff) gets its own Livewire dashboard with Chart.js charts.

System panel

Users, Sitemap, Settings, and Media Library, gated to admin and super-admin.

Activity log

Every admin action is audited via Spatie Activitylog, visible to super-admins.

Tests from day one

101 Pest tests, Pint formatting, and Larastan static analysis, wired into CI.

Automated releases

release-please publishes a GitHub Release with a real changelog from Conventional Commits.

Why this stack

Why Livewire

Server-driven UI: no separate API layer or SPA build to maintain alongside the backend.

Why Spatie packages

Battle-tested roles, media, slugs, activity logging, and sitemaps: nothing reinvented.

Why Pest

Readable test syntax, and a real safety net: 101 tests covering every role boundary in this repo.

12
Composer packages
3
Roles built in
101
Tests passing
MIT
Licensed

Let's build

Ready to start
your next project?

Clone the starter kit, log in as admin, and make it yours.

Direct contact

HQ

Jakarta, Indonesia

Email

hello@recodex.id

Phone

+62 21 0000 0000