matheusmarnt/scoutify
Scoutify adds a production-ready ⌘K/Ctrl+K global search modal to Laravel. Powered by Scout + Livewire, it searches across multiple Eloquent models, groups results by type, auto-discovers Searchable models, and stores recent searches in session.
Pros:
⌘K/Ctrl+K) modal with WCAG AA compliance, reducing frontend development effort.globalSearchBuilder), visibility rules, and previews (HasGlobalSearchPreview) allow tailored behavior without forking.HasGlobalSearchPreview) eliminates need for third-party libraries.Cons:
app/Models/ could lead to unintended behavior if the directory structure evolves (e.g., namespaced models).heroicon).scoutify:install command automates driver setup and config publishing, reducing manual errors.scoutify:searchable command auto-edits model files, though --dry-run mitigates risk.globalSearchBuilder or visibility rules requires PHP knowledge. Teams unfamiliar with Scout’s query builder may need training.LIKE searches).globalSearchBuilder).scoutify:import) in production? Will a queue (e.g., Laravel Horizon) be needed for large datasets?Core Stack:
heroicon, tabler).->permission(), ->role()).Compatibility Notes:
⌘K). No additional JS libraries required.Preparation:
composer require matheusmarnt/scoutify laravel/scout meilisearch/meilisearch-php
.env:
SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://localhost:7700
Installation:
php artisan scoutify:install
php artisan vendor:publish --provider="Matheusmarnt\Scoutify\ScoutifyServiceProvider"
config/scoutify.php and config/scout.php as needed.Model Integration:
php artisan scoutify:searchable
--all to register all models under app/Models/ or select individually.--dry-run first.globalSearchTitle(), globalSearchSubtitle(), etc., in registered models.HasGlobalSearchVisibility for custom auth rules.HasGlobalSearchPreview for file previews.php artisan scoutify:import
UI Integration:
resources/views/layouts/app.blade.php):
<!-- Desktop trigger (lg+) -->
<x-scoutify::gs.trigger class="hidden lg:inline-flex" />
<!-- Mobile trigger -->
<x-scoutify::gs.trigger-mobile />
<!-- Modal (must be at root, after {{ $slot }}) -->
{{ $slot }}
<livewire:scoutify::modal />
How can I help you explore Laravel packages today?