nasirkhan/laravel-starter
Laravel 13.x modular starter with separate frontend/backend. Includes authentication, authorization, users/roles, admin backend, backups and log viewer. Build reusable modules on top and bootstrap apps fast with custom install/update commands.
Installation:
composer create-project nasirkhan/laravel-starter
Or clone the repo and run:
composer install
php artisan starter:install
First Use Case:
http://localhost:8000/admin with credentials:
User: super@admin.com
Pass: secret
resources/modules/ to see pre-built modules like posts, comments, and categories.Where to Look First:
config/starter.phpresources/modules/routes/backend.phproutes/web.phpapp/Console/Commands/Modular Development:
php artisan module:build MODULE_NAME
resources/modules/MODULE_NAME/
├── Http/Controllers/
├── Resources/views/
├── Database/Migrations/
├── Database/Seeders/
└── ...
config/starter.php under modules.Role-Permission Management:
php artisan starter:permission:create "module.posts.create" --description="Create Posts"
php artisan starter:role:assign "admin" "module.posts.*"
public function __construct()
{
$this->middleware('can:module.posts.create')->only(['create']);
}
Backend/Frontend Separation:
Backend namespace (e.g., Backend\Http\Controllers).Frontend\Http\Controllers.App\Services or App\Helpers.Livewire Integration:
resources/modules/posts/Http/Livewire/).php artisan make:livewire Posts/ManagePosts
Localization:
resources/lang/en/ or resources/lang/{locale}/.@lang directive in Blade:
{{ __('messages.welcome') }}
Dynamic Menus:
database/seeders/MenuDatabaseSeeder.php.<x-cube::menu :items="$menuItems" />
nasirkhan/module-manager: For advanced module management.nasirkhan/laravel-cube: For reusable UI components (e.g., modals, cards).nasirkhan/laravel-jodit: For WYSIWYG editors in modules.php artisan starter:backup
config/starter.php./admin/logs.config/logging.php.Module Caching:
php artisan clear-all
php artisan module:clear-cache
Permission Caching:
php artisan cache:forget spatie.permission.cache
Frontend Asset Mixing:
npm and yarn lockfiles (especially on Windows).npm run dev or npm run build for frontend assets.Livewire Conflicts:
Posts\ManagePosts).Database Seeders:
SEED_DUMMY_DATA=false in .env.--force for production seeders:
php artisan db:seed-essential --fresh --force
IDE Helper Files:
composer ide-helper
.phpstorm.meta.php is included in your IDE’s inspection scope.Module Not Loading:
config/starter.php.php artisan module:migrate MODULE_NAME
Permission Denied:
php artisan starter:permission:list
tinker to debug:
php artisan tinker
>>> \Spatie\Permission\Models\Permission::where('name', 'module.posts.create')->get();
Livewire Errors:
@error directives in Blade:
@error('message') <div>{{ $message }}</div> @enderror
Backup Failures:
chmod -R 775 storage/
config/starter.php for correct backup paths.Custom Commands:
app/Console/Commands/.php artisan make:command CustomBackup
Module Events:
EventServiceProvider:
protected $listen = [
'module.created' => ['App\Listeners\LogModuleCreation'],
];
Service Providers:
config/app.php.'providers' => [
// ...
App\Providers\CustomServiceProvider::class,
],
Middleware:
app/Http/Kernel.php:
'backend' => [
\App\Http\Middleware\CheckForBackend::class,
\App\Http\Middleware\Authenticate::class,
],
Blade Directives:
app/Providers/BladeServiceProvider:
Blade::directive('custom', function ($expression) {
return "<?php echo customFunction($expression); ?>";
});
API Routes:
routes/api.php:
Route::prefix('v1')->group(function () {
Route::resource('posts', \App\Http\Controllers\Api\PostController::class);
});
Dark Mode:
localStorage or session:
localStorage.setItem('dark_mode', 'true');
resources/css/app.css.Social Login:
.env:
GOOGLE_CLIENT_ID=your_id
GOOGLE_CLIENT_SECRET=your_secret
Socialite facade:
use Socialite;
$user = Socialite::driver('google')->user();
WYSIWYG Editor:
config/jodit.php.<x-jodit::editor name="content" />
How can I help you explore Laravel packages today?