spatie/laravel-demo-mode
Protect work-in-progress Laravel apps from prying eyes with a demo-mode middleware. Redirects visitors (including unknown routes) to an “under construction” URL until they visit a configurable access URL (e.g. /demo) to unlock protected routes.
app/Http/Middleware/DemoMode.php). Requires minimal setup (publish config, register middleware in app/Http/Kernel.php).demo_mode.php), making it easy to toggle or customize behavior (e.g., demo URL, whitelisted IPs).php artisan route:cache) if not handled carefully.auth middleware or packages like spatie/laravel-permission?
/demo) is blocked?
spatie/laravel-activitylog, spatie/laravel-permission, or laravel/breeze (but not as a replacement).spatie/laravel-flash) for staged releases.composer require spatie/laravel-demo-mode
php artisan vendor:publish --provider="Spatie\DemoMode\DemoModeServiceProvider"
config/demo_mode.php to set demo_url (e.g., /demo) and under_construction_url (e.g., /under-construction).app/Http/Kernel.php:
protected $middleware = [
// ...
\Spatie\DemoMode\Middleware\DemoMode::class,
];
Or apply to specific routes:
Route::middleware(['demo'])->group(function () {
// Protected routes
});
/demo before protected routes.composer.json constraints).$request or $response in the same phase.SESSION_DRIVER is configured (e.g., file, database).auth, throttle).Kernel.php and routes.demo_mode.php) for adjustments./demo and /under-construction for auditability.namespace App\Http\Middleware;
use Spatie\DemoMode\Middleware\DemoMode as BaseDemoMode;
class CustomDemoMode extends BaseDemoMode {
public function handle($request, Closure $next) {
// Add custom logic (e.g., IP checks)
return parent::handle($request, $next);
}
}
| Failure Scenario | Impact | Mitigation |
|---|---|---|
Demo URL (/demo) blocked |
All protected routes inaccessible | Add a fallback (e.g., admin override). |
| Session storage fails | Demo mode breaks | Use file driver as fallback. |
| Middleware conflicts | Routes behave unexpectedly | Test in isolation; debug middleware order. |
| Cached routes ignore middleware | Demo mode bypassed | Clear route cache (php artisan route:clear). |
Misconfigured under_construction_url |
Poor UX for clients | Set a clear, user-friendly redirect. |
/demo URL and access flow for clients./demo first").How can I help you explore Laravel packages today?