nasirkhan/laravel-starter
Laravel Starter (Laravel 13.x) is a modular starter project with separate frontend/backend. Includes authentication & authorization, user/role management, admin backend, backups, log viewer, and custom install/update commands—ready to extend with reusable modules.
Installation:
composer create-project nasirkhan/laravel-starter
php artisan starter:install
.env, database, and asset setup.--demo flag for pre-seeded data.First Use Case:
/admin with default credentials:
User: super@admin.com
Pass: secret
Key Directories:
app/Modules/ – Core modules (e.g., Auth, Posts, Settings).resources/views/ – Separated into backend/ and frontend/ themes.routes/ – web.php (frontend), admin.php (backend).Create a New Module:
php artisan module:build MODULE_NAME
/database/migrations/)./app/Modules/MODULE_NAME/Http/Controllers/)./resources/views/backend/modules/MODULE_NAME/)./routes/admin.php or web.php).BaseModule for shared functionality (e.g., permissions, CRUD logic).Module Structure:
MODULE_NAME/
├── Config/ # Module-specific config
├── Database/ # Migrations, seeders
├── Http/ # Controllers, Forms, Requests
├── Resources/ # Views, assets
└── Providers/ # Service providers
routes/web.php (e.g., /posts, /categories).routes/admin.php (e.g., /admin/posts, /admin/settings).resources/views/layouts/./admin/menus.database/seeders/MenuDatabaseSeeder.php.@include('backend.partials.menu', ['menu' => 'sidebar'])
spatie/laravel-permission package.AuthTableSeeder.$user->givePermissionTo('edit_posts');
public function __construct() {
$this->middleware('can:manage_posts')->only(['index', 'store']);
}
SocialAccountService to add new providers.PostsTable in app/Modules/Posts/Http/Livewire/.<livewire:posts-table />
withPagination() for datatables.$this->posts = Post::latest()->get();.resources/lang/ (e.g., en/posts.php).__('posts.title') in views.data-theme attribute.resources/css/backend/custom.css./admin/backups or CLI:
php artisan backup:run
storage/app/backups/./admin/log-viewer.Permission Caching:
php artisan cache:forget spatie.permission.cache
php artisan clear-all
Module Namespace Conflicts:
Posts vs. BlogPosts).User).Livewire Component Isolation:
<livewire:modules.posts.posts-table /> <!-- Correct -->
<livewire:posts-table /> <!-- Fails -->
Asset Compilation:
npm run dev or npm run build after adding frontend assets.mix in webpack.mix.js to customize builds.Database Seeders:
SEED_DUMMY_DATA=false
php artisan db:seed-essential --fresh
Menu Hierarchy:
Artisan Commands:
php artisan list
php artisan module:build MODULE_NAME --verbose
Livewire Errors:
.env:
LIVEWIRE_LOG_LEVEL=debug
Permission Denied:
dd(auth()->user()->getAllPermissions()->pluck('name'));
app/Http/Kernel.php.Route Conflicts:
php artisan route:list
admin.posts.index).Custom Modules:
BaseModule to add shared logic (e.g., app/Modules/BaseModule.php).resources/views/backend/modules/MODULE_NAME/.Social Login:
SocialAccountService:
public function getTwitterProvider()
{
return Socialite::driver('twitter')->stateless();
}
Theming:
resources/css/backend/custom.scss (backend).resources/css/frontend/custom.css (frontend).Backup Customization:
BackupService to add custom backup items:
public function items()
{
return [
\Spatie\Backup\Tasks\DumpDatabaseTask::new(),
\Spatie\Backup\Tasks\FilesTask::new([
'storage/app/public',
]),
];
}
Dynamic Forms:
public $form = [
'title' => '',
'content' => '',
];
<input wire:model="form.title" />
Eager Loading:
public function mount()
{
$this->posts = Post::with('author', 'category')->get();
}
Menu Caching:
php artisan cache:clear
Asset Optimization:
mix.version() to bust caches in production:
<link href="{{ mix('css/backend/app.css', 'v' . config('app.version')) }}" rel="stylesheet">
How can I help you explore Laravel packages today?