lvntr / starter-kit
Laravel Starter Kit with DDD architecture, Inertia.js, Vue 3, PrimeVue, and role-based permissions.
Requires
- php: ^8.2
- illuminate/support: ^12.0
- inertiajs/inertia-laravel: ^2.0
- laravel/fortify: ^1.35
- laravel/passport: ^13.5
- laravel/wayfinder: ^0.1
- league/flysystem-aws-s3-v3: ^3.0
- spatie/laravel-activitylog: ^4.9
- spatie/laravel-medialibrary: ^11.12
- spatie/laravel-permission: ^7.2
- spatie/laravel-query-builder: ^6.3
- spatie/laravel-translatable: ^6.11
Requires (Dev)
- orchestra/testbench: ^10.0
- pestphp/pest: ^4.4
- dev-main
- v12.0.59
- v12.0.58
- v12.0.57
- v12.0.56
- v12.0.55
- v12.0.54
- v12.0.53
- v12.0.52
- v12.0.51
- v12.0.50
- v12.0.49
- v12.0.48
- v12.0.47
- v12.0.46
- v12.0.45
- v12.0.44
- v12.0.43
- v12.0.42
- v12.0.41
- v12.0.40
- v12.0.39
- v12.0.38
- v12.0.37
- v12.0.36
- v12.0.35
- v12.0.34
- v12.0.33
- v12.0.32
- v12.0.31
- v12.0.30
- v12.0.29
- v12.0.28
- v12.0.27
- v12.0.26
- v12.0.25
- v12.0.24
- v12.0.23
- v12.0.22
- v12.0.21
- v12.0.20
- v12.0.19
- v12.0.18
- v12.0.17
- v12.0.16
- v12.0.15
- v12.0.14
- v12.0.13
- v12.0.12
- v12.0.11
- v12.0.10
- v12.0.9
- v12.0.8
- v12.0.7
- v12.0.6
- v12.0.5
- v12.0.4
- v12.0.3
- v12.0.2
- v12.0.1
- v12.0.0
This package is auto-updated.
Last update: 2026-04-02 21:31:26 UTC
README
Lvntr Starter Kit is under active development, and each release is shaping it into a more complete admin-first Laravel platform.
Detailed usage docs: kit-docs.lvntr.dev
A full-featured Laravel admin panel package built with Laravel 12, Inertia.js v2, Vue 3, PrimeVue 4, and Tailwind CSS 4. Follows DDD (Domain-Driven Design) architecture with built-in role-based permissions, activity logging, settings management, and more.
Features
- DDD Architecture — Actions, DTOs, Queries, Events, Listeners
- Role & Permission Management — Spatie Permission with dynamic resource-scoped permissions
- User Management — CRUD with avatar upload, soft deletes, 2FA support
- Activity Logging — Spatie Activity Log with a browsable admin interface
- Settings Panel — General, Auth, Mail, Storage settings stored in database
- OAuth2 API — Laravel Passport with personal access tokens and device authorization
- Domain Scaffolding —
make:sk-domaincommand generates full DDD stack interactively - FormBuilder / DatatableBuilder / TabBuilder — Reusable Vue component builders
- Multi-language Support — Translation files included, easily extendable
- API Response Builder — Fluent, consistent API responses with pagination support
- Security Headers Middleware — X-Frame-Options, HSTS, CSP and more
Tech Stack
Backend (PHP / Composer)
| Package | Purpose |
|---|---|
| Laravel 12 | Core framework |
| Inertia.js v2 | Server-driven SPA — no API layer needed between backend and frontend |
| Laravel Fortify | Authentication backend (login, register, 2FA, password reset) |
| Laravel Passport | OAuth2 API authentication (personal access tokens, device authorization) |
| Laravel Wayfinder | Type-safe route generation for TypeScript |
| Spatie Permission | Role & permission management with dynamic resource-scoped permissions |
| Spatie Activity Log | Model activity logging with browsable admin interface |
| Spatie Media Library | File uploads & media collections (avatars, attachments) |
| Spatie Query Builder | Filter, sort, and include relationships via query string |
| Spatie Translatable | Multi-language model attributes (JSON-based) |
Frontend (Node / npm)
| Package | Purpose |
|---|---|
| Vue 3 | Reactive UI framework |
| PrimeVue 4 | UI component library (DataTable, Dialog, Toast, Menu, etc.) |
| Tailwind CSS 4 | Utility-first CSS framework |
| Inertia.js Vue 3 | Client-side adapter for Inertia SPA |
| VueUse | Collection of Vue composition utilities |
| laravel-vue-i18n | Use Laravel translation files directly in Vue |
Dev Tools
| Tool | Purpose |
|---|---|
| Vite | Frontend build tool with HMR |
| TypeScript | Type safety for frontend code |
| ESLint + Prettier | Code linting and formatting |
| Vitest | Unit testing for Vue components |
| Husky + lint-staged | Pre-commit hooks for code quality |
| Commitizen | Conventional commit messages |
Requirements
- PHP 8.2+
- Laravel 12
- Node.js 18+
- MySQL / PostgreSQL / SQLite
Installation
1. Require the package
composer require lvntr/starter-kit
2. Run the install command
php artisan sk:install
This interactive wizard will:
- Publish all application scaffolding (Controllers, Models, Routes, Vue pages, etc.)
- Publish the package config file
- Run database migrations
- Run seeders (Roles, Permissions, Definitions, Settings)
- Generate Passport encryption keys
- Create a default admin user
- Install npm dependencies and build frontend assets
Non-interactive mode (CI/CD):
php artisan sk:install --no-interaction
Overwrite existing files:
php artisan sk:install --force
3. Configure your .env
APP_NAME="My Application" APP_URL=https://my-app.test DB_CONNECTION=mysql DB_DATABASE=my_app DB_USERNAME=root DB_PASSWORD=
4. Access the admin panel
Open your browser and navigate to your app URL. Log in with the admin credentials shown after installation (default: admin@demo.com / password).
Updating
When a new version of the package is released:
composer update lvntr/starter-kit php artisan sk:update
The update command uses a hash-based tracking system to safely update files:
- Core files (BaseAction, BaseDTO, Traits, Middleware, helpers) are always updated
- User-modifiable files (Controllers, Pages, Routes) are only updated if you haven't changed them
- New files from the package are automatically added
- New migrations are detected and optionally run
Preview changes before applying:
php artisan sk:update --dry-run
Force update everything (overwrites your changes):
php artisan sk:update --force
Publishing Optional Assets
The package keeps Vue components, language files, and config inside the package by default. If you need to customize them, publish them to your project:
# Interactive selection php artisan sk:publish # Publish Vue components (FormBuilder, DatatableBuilder, etc.) php artisan sk:publish --tag=components # Publish language files php artisan sk:publish --tag=lang # Publish config file php artisan sk:publish --tag=config
Available Commands
| Command | Description |
|---|---|
sk:install |
Full installation wizard |
sk:update |
Update package files preserving user changes |
sk:publish |
Publish optional assets for customization |
make:sk-domain |
Scaffold a complete DDD domain interactively |
remove:sk-domain |
Remove a domain and all its files |
env:sync |
Sync .env keys to .env.example |
Domain Scaffolding
Create a new domain with all DDD layers:
# Interactive mode php artisan make:sk-domain # With options php artisan make:sk-domain Product --fields="name:string,price:decimal" --admin --api --events --vue=full
This generates: Model, Migration, Factory, DTO, Actions, Events, Listeners, Controllers, FormRequests, Routes, and Vue pages.
Remove a domain:
php artisan remove:sk-domain Product
Architecture
Package Structure
lvntr/starter-kit/
├── src/ # Core package code (never published)
│ ├── StarterKitServiceProvider.php
│ ├── Console/Commands/ # sk:install, sk:update, make:sk-domain, etc.
│ ├── Domain/Shared/ # BaseAction, BaseDTO, ActionPipeline
│ ├── Enums/ # PermissionEnum
│ ├── Http/Middleware/ # CheckResourcePermission, SecurityHeaders
│ ├── Http/Responses/ # ApiResponse builder
│ ├── Support/ # Package support classes
│ ├── Traits/ # HasActivityLogging, HasMediaCollections
│ └── helpers.php # to_api(), format_date()
├── resources/
│ ├── js/components/ # Vue components (optionally publishable)
│ └── lang/ # Translation files (optionally publishable)
├── stubs/ # Published to app on install
│ ├── app/ # Controllers, Models, Domain, Providers, Enums
│ ├── config/ # permission-resources.php, settings.php
│ ├── database/ # Migrations, Seeders, Factories
│ ├── routes/ # Web & API routes
│ ├── resources/js/ # Vue pages, Layouts, Composables, Theme
│ └── bootstrap/ # app.php, providers.php
└── config/
└── starter-kit.php # Package configuration
Application Structure (after install)
app/
├── Domain/ # DDD business logic
│ ├── User/ # Actions, DTOs, Queries, Events, Listeners
│ ├── Role/
│ ├── Auth/
│ ├── Setting/
│ ├── ActivityLog/
│ └── Shared/ # Base classes (updated by package)
├── Http/
│ ├── Controllers/Admin/ # Admin panel controllers
│ ├── Controllers/Api/ # REST API controllers
│ └── Middleware/
├── Models/
├── Enums/
└── Providers/
Update Strategy
| File Category | Behavior on sk:update |
|---|---|
Domain/Shared/, Traits, Middleware, helpers |
Always updated |
| Controllers, Models, Pages, Routes | Updated only if user hasn't modified them |
| User's custom domains | Never touched |
| New files from package | Automatically added |
Using Package Components
Vue Components (without publishing)
Components are auto-resolved from the package. Use them in your Vue files:
<template> <SkForm :config="formConfig" /> <SkDatatable :config="tableConfig" /> <SkTabs :config="tabConfig" /> </template>
Translations
// From package namespace __('starter-kit::admin.menu.dashboard') __('starter-kit::message.created')
Base Classes
use Lvntr\StarterKit\Domain\Shared\Actions\BaseAction; use Lvntr\StarterKit\Domain\Shared\DTOs\BaseDTO; use Lvntr\StarterKit\Enums\PermissionEnum; use Lvntr\StarterKit\Traits\HasActivityLogging;