patrikjak / starter
Laravel app starter - admin panel
Requires
- php: ^8.4
- laravel/framework: ^12.1.1
- patrikjak/auth: ^1.4
- patrikjak/utils: ^2.13
Requires (Dev)
- blade-ui-kit/blade-heroicons: ^1.6
- blade-ui-kit/blade-icons: ^1.9
- larastan/larastan: ^3.0
- orchestra/testbench: ^10.0.0
- phpstan/phpstan: ^2.1.0
- phpunit/phpunit: ^11.0
- slevomat/coding-standard: ^8.14
- spatie/phpunit-snapshot-assertions: ^5.1
- squizlabs/php_codesniffer: ^4.0
README
Installation
Install the package via Composer:
composer require patrikjak/starter
Documentation
- Web header Components - Documentation for the web header component
- Configuration - Documentation for all available configuration options
- Permissions - How to add and manage permissions
- Extensibility - How to extend DTOs, repositories, and form requests
Setup
After installing the package, add the package provider to the providers array in bootstrap/providers.php.
use Patrikjak\Starter\StarterServiceProvider; use Patrikjak\Utils\UtilsServiceProvider; use Patrikjak\Auth\AuthServiceProvider; return [ ... UtilsServiceProvider::class, AuthServiceProvider::class, StarterServiceProvider::class, ];
You need to have installed and configured patrikjak/utils and patrikjak/auth packages.
For fast setup, you can run this command:
php artisan install:pjstarter
It will publish assets, views and config file.
If you don't publish config file, you will miss all features of this package. I recommend add this script to your composer.json file:
"scripts": { "post-update-cmd": [ "@php artisan vendor:publish --tag=pjstarter-assets --ansi --force", "@php artisan vendor:publish --tag=pjstarter-config --ansi --force", "@php artisan vendor:publish --tag=pjstarter-views --ansi --force", "@php artisan vendor:publish --tag=pjstarter-migrations --ansi --force" ] }
All post-update-cmd can look like this:
"scripts": { "post-update-cmd": [ "@php artisan vendor:publish --tag=pjutils-config --ansi --force", "@php artisan vendor:publish --tag=pjutils-assets --ansi --force", "@php artisan vendor:publish --tag=pjutils-translations --ansi --force", "@php artisan vendor:publish --tag=pjauth-assets --ansi --force", "@php artisan vendor:publish --tag=pjauth-config --ansi --force", "@php artisan vendor:publish --tag=pjauth-migrations --ansi", "@php artisan vendor:publish --tag=pjstarter-assets --ansi --force", "@php artisan vendor:publish --tag=pjstarter-config --ansi --force", "@php artisan vendor:publish --tag=pjstarter-views --ansi --force", "@php artisan vendor:publish --tag=pjstarter-migrations --ansi --force" ] }
Adjust it to your needs. Be aware that --force flag will overwrite existing files.
Database Setup
1. Configure Auth Model
Set the user model in config/auth.php:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => Patrikjak\Starter\Models\Users\User::class, ], ],
2. Run Migrations
php artisan migrate
3. Seed Roles and Permissions
The setup order matters - permissions must exist before they can be assigned to roles.
# Create roles (SUPERADMIN, ADMIN, USER) from the auth package php artisan seed:user-roles # Sync permissions to database (creates all permissions defined in PermissionsDefinition) php artisan pjstarter:permissions:sync
4. Seed Application Data
Create your own seeders for roles with permissions, users, and content. The recommended seeder order:
- RoleSeeder - Assign permissions to roles (roles are created by
seed:user-roles, permissions bypjstarter:permissions:sync) - UserSeeder - Create users with role assignments
- Content seeders - Authors, article categories, articles, static pages, etc.
Quick Reset
php artisan migrate:fresh --force && php artisan seed:user-roles && php artisan pjstarter:permissions:sync && php artisan db:seed
Feature Toggles
Enable or disable features in config/pjstarter.php:
'features' => [ 'auth' => true, // Authentication (false = open access, auth routes return 404) 'dashboard' => true, // Dashboard page 'profile' => true, // User profile and password change 'static_pages' => false, // Static pages with metadata and slugs 'articles' => false, // Articles, categories, and authors 'users' => false, // User, role, and permission management ],
When auth is set to false:
- Auth routes (
/login,/register,/password/*) return 404 - Admin routes are accessible without authentication
- All authorization checks are bypassed
- Profile and change-password routes are disabled