orange-soft / laravel-starter-kit
Laravel starter kit with Inertia, Vue, PrimeVue, and common features
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/orange-soft/laravel-starter-kit
Requires
- php: ^8.2
- illuminate/support: ^11.0|^12.0
This package is auto-updated.
Last update: 2026-01-06 11:40:28 UTC
README
A Laravel starter kit installer that scaffolds a complete admin application with authentication, user management, and role-based access control.
Requirements
- PHP 8.2+
- Laravel 11 or 12
- Node.js 18+
- PostgreSQL / MySQL / SQLite
Installation
# On a fresh Laravel installation composer require orange-soft/laravel-starter-kit --dev # Install core features php artisan os:starter:install # Install with optional features php artisan os:starter:install --with=media --with=backup --with=activitylog # Force overwrite existing files php artisan os:starter:install --force
Post-Installation
npm install
php artisan migrate
php artisan db:seed --class=RoleSeeder
php artisan db:seed --class=AdminUserSeeder
# Start development server
composer dev
Default admin credentials:
- Email:
admin@example.com - Password:
password
What's Included
Stack
- Inertia.js v2 - Server-side routing with Vue frontend
- Vue 3 - Composition API with
<script setup> - Tailwind CSS v4 - CSS-first configuration (14px compact admin UI)
- PrimeVue - UI component library with Aura preset
- Laravel Wayfinder - Type-safe routing
- Spatie Permission - Role-based access control
Features
Authentication
- Login with email/password
- "Remember me" functionality
- Forgot password (email link)
- Reset password
- Email verification
- Temporary password flow: New users must change password on first login
User Management
- List users with search and pagination
- Create user with role assignment
- Edit user with role assignment
- Delete user (with self-delete protection)
Navigation Context
- Automatic pagination preservation: Users return to the same page after CRUD operations
- Session-based URL storage for index pages
- Works automatically with all resource controllers
Admin UI
- 14px base font for compact, professional appearance
- Breadcrumbs with automatic title fallback
- Sidebar navigation
- Topbar with user menu
- Toast notifications
- Confirmation dialogs
Files Structure
app/
├── Enums/
│ └── RoleName.php # Role enum (customize per app)
├── Http/
│ ├── Controllers/
│ │ ├── Auth/
│ │ │ ├── ChangePasswordController.php
│ │ │ ├── ForgotPasswordController.php
│ │ │ ├── LoginController.php
│ │ │ ├── LogoutController.php
│ │ │ ├── ResetPasswordController.php
│ │ │ └── VerifyEmailController.php
│ │ ├── Traits/
│ │ │ └── RedirectsToStoredIndex.php # Navigation context trait
│ │ ├── ProfileController.php
│ │ └── UserController.php
│ ├── Middleware/
│ │ ├── EnsurePasswordIsNotTemporary.php
│ │ ├── HandleInertiaRequests.php
│ │ └── HandleNavigationContext.php # Pagination preservation
│ └── Requests/
│ ├── Auth/
│ │ ├── ChangePasswordRequest.php
│ │ ├── ForgotPasswordRequest.php
│ │ ├── LoginRequest.php
│ │ └── ResetPasswordRequest.php
│ ├── ProfileUpdateRequest.php
│ ├── UserStoreRequest.php
│ └── UserUpdateRequest.php
├── Mail/
│ └── AppMailable.php # Base mailable class
├── Models/
│ ├── Traits/
│ │ └── HasUuidRouteKey.php
│ └── User.php # With HasRoles, temp password support
└── Notifications/
├── Auth/
│ ├── ResetPasswordNotification.php
│ └── VerifyEmailNotification.php
└── AppNotification.php # Base notification class
bootstrap/
└── app.php # Middleware registration
config/
└── os.php # Kit configuration
database/
├── migrations/
│ └── 0001_01_01_000010_add_uuid_and_temp_password_to_users_table.php
└── seeders/
├── AdminUserSeeder.php
├── DatabaseSeeder.php
└── RoleSeeder.php
resources/
├── css/
│ ├── app.css # Tailwind + PrimeUI + Typography
│ └── fonts.css # Custom fonts
├── js/
│ ├── layouts/
│ │ ├── AdminLayout.vue # With breadcrumbs, Head component
│ │ └── AuthLayout.vue
│ ├── components/
│ │ ├── AppShell.vue
│ │ ├── ConfirmDialog.vue
│ │ ├── FormError.vue
│ │ ├── Sidebar.vue
│ │ ├── Toast.vue
│ │ └── Topbar.vue
│ ├── pages/
│ │ ├── auth/
│ │ │ ├── ChangePassword.vue
│ │ │ ├── ForgotPassword.vue
│ │ │ ├── Login.vue
│ │ │ ├── ResetPassword.vue
│ │ │ └── VerifyEmail.vue
│ │ ├── dev/
│ │ │ └── Typography.vue # Typography preview page
│ │ ├── profile/
│ │ │ └── Edit.vue
│ │ ├── users/
│ │ │ ├── Create.vue
│ │ │ ├── Edit.vue
│ │ │ └── Index.vue
│ │ └── Dashboard.vue
│ ├── app.js
│ └── bootstrap.js
└── views/
├── app.blade.php
└── vendor/
├── mail/ # Custom mail templates
└── notifications/
routes/
├── admin.php # User management routes
├── auth.php # Authentication routes
└── web.php # Modified to include above
tests/
├── Browser/
│ ├── AuthTest.php
│ ├── ProfileTest.php
│ └── UserManagementTest.php
└── Feature/
├── Auth/
│ ├── ChangePasswordTest.php
│ ├── EmailVerificationTest.php
│ ├── ForgotPasswordTest.php
│ ├── LoginTest.php
│ ├── LogoutTest.php
│ └── ResetPasswordTest.php
├── Profile/
│ └── ProfileTest.php
├── MiddlewareTest.php
├── NotificationsTest.php
├── RolesTest.php
└── UserManagementTest.php
Customization
Roles
Edit app/Enums/RoleName.php to define your application's roles:
enum RoleName: string { case Admin = 'admin'; case Manager = 'manager'; case Staff = 'staff'; }
Then re-run the seeder:
php artisan db:seed --class=RoleSeeder
Navigation Context
The HandleNavigationContext middleware runs globally and preserves pagination/filter state. In controllers, use the RedirectsToStoredIndex trait:
use App\Http\Controllers\Traits\RedirectsToStoredIndex; class ProductController extends Controller { use RedirectsToStoredIndex; public function store(ProductStoreRequest $request) { $request->persist(); // Redirects to stored URL (e.g., /products?page=3&search=widget) return $this->redirectToIndex('products.index', 'Product created.'); } }
Breadcrumbs
Pass breadcrumbs to AdminLayout:
<AdminLayout title="Edit Product" :breadcrumbs="[ { label: 'Products', href: '/products' }, { label: product.name } ]" >
If no breadcrumbs provided, the title is used as fallback.
Optional Features
Media Library (--with=media)
- Installs
spatie/laravel-medialibrary - Publishes config and migrations
Backup (--with=backup)
- Installs
spatie/laravel-backup - Publishes config
Activity Log (--with=activitylog)
- Installs
spatie/laravel-activitylog - Publishes config and migrations
- Includes
LogsActivitytrait
Testing
# Run all tests composer test # Run specific test file php artisan test tests/Feature/UserManagementTest.php # Run browser tests (requires Chrome) php artisan test tests/Browser
Development Scripts
# Start all services (server, queue, logs, vite) composer dev # Initial setup composer setup
License
Proprietary - Orange Soft