When setting up a new Laravel application, especially one that integrates Jetstream for authentication and Filament for admin panels, developers often run into dependency errors. These errors usually stem from running package installs out of sequence or forgetting that each package ships its own migrations. The result? Undefined constants, missing tables, or broken providers make the development process take longer than it should.
Understanding the correct order of installation and migration is crucial. Laravel’s ecosystem is modular, but its packages depend on certain tables being present before they can hook into the application. Jetstream needs the users table, Filament expects authentication scaffolding, and Spatie Permissions requires a stable user model. If migrations are skipped or delayed, the build collapses for reasons that can easily be fixed. Thus our recommendation is to follow these simple steps to be up and running in less than
The Streamlined MVP Build Sequence
Step 1 – Install Laravel
composer create-project laravel/laravel app-name
cd app-name
Step 2 – Configure Database
Force InnoDB in config/database.php:
'engine' => 'InnoDB',
This ensures foreign keys work properly and eliminates some common migration errors.
Step 3 – Run Initial Laravel Migrations
php artisan migrate
This sets up the basic db requirements
Step 4 – Install Jetstream (with Teams)
composer require laravel/jetstream
php artisan jetstream:install livewire --teams
Jetstream scaffolds authentication, teams, and session management.
Step 5 – Install Filament
composer require filament/filament
php artisan filament:install --panels
This add Filament and admin panel scaffolding.
Step 6 – Publish Filament Config
php artisan vendor:publish --tag=filament-config
This creates config/filament.php for customizing defaults.
Step 7 – Create Filament Admin User
php artisan make:filament-user
Step 8 – Install Spatie Permissions
composer require spatie/laravel-permission
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
Spatie adds role and permission migrations automatically.
Step 9 – Run Spatie Migrations
php artisan migrate
This sets up the Spatie db requirements
Step 10 – Configure Mail
Use log for development, SMTP for production:
MAIL_MAILER=log
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="App Name"
MAIL_MAILER=smtp
MAIL_HOST=mail.ebdhosting.com
MAIL_PORT=465
MAIL_USERNAME=apps@ebdhosting.com
MAIL_PASSWORD=your_password_here
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=apps@ebdhosting.com
MAIL_FROM_NAME="App Name"
Step 11 – Clear Caches
php artisan config:clear
php artisan cache:clear
Step 12 – Compile Assets
npm install && npm run dev
Step 13 – Start Dev Server (Separate Terminal)
php artisan serve
Key Insights
- Only one manual migration run is needed at the start. After that, Jetstream, Filament, and Spatie each include their own migrations during install.
- Order is critical. Jetstream before Filament, because Filament expects the
userstable to exist. Spatie comes last, since it attaches roles and permissions to the user model. - Publishing configs matters. Filament’s config file (
config/filament.php) lets you override defaults and keep your admin panel aligned with project needs. - InnoDB is non‑negotiable. Without it, foreign key constraints break, and migrations fail.
Conclusion
By respecting the sequence — Laravel migrate → Jetstream install → Filament install → Spatie install — you avoid the common pitfalls of undefined constants and missing tables. This streamlined approach ensures your MVP is stable, modular, and ready for rapid iteration.



