Skip to content

Search

This page is generated from public package documentation in capell-4/packages and the package manifest checked into the source repository.

FieldValue
Composer packagecapell-app/search
Package slugsearch
Product groupCapell Search & SEO
Tierpremium
Bundlesearch-seo
Runtime contextsadmin, frontend, console
Capell version^4.0
Source repositorycapell-app/packages
Source pathpackages/search
Docs sourcepackages/search/docs
Manifestcapell.json

Search adds a frontend search route, configurable search drivers, result click tracking, query logging, and admin search insights.

  • Package: capell-app/search
  • Namespace: Capell\Search\
  • Surfaces: Filament admin, console, HTTP, database
  • Service providers: packages/search/src/Providers/AdminServiceProvider.php, packages/search/src/Providers/SearchServiceProvider.php
  • Capell dependencies: capell-app/admin, capell-app/core, capell-app/frontend
  • Third-party dependencies: lorisleiva/laravel-actions, spatie/laravel-data, spatie/laravel-package-tools
  • Adds frontend search, configurable search drivers, click tracking, query logging, and admin search insights.
  • Helps owners understand what visitors cannot find while giving users a public search experience.
  • Gives developers driver boundaries and logging Actions instead of coupling search behavior to theme templates.

Search adds a frontend search route, configurable search drivers, result click tracking, query logging, and admin search insights.

  • Frontend search controller route.
  • Database and Scout search drivers.
  • Header search render hook.
  • Search insights widgets.
  • Settings schema and dashboard contributor.
  • Actions for search, normalization, logging, click tracking, and purging logs.

For developers: Uses a Search contract and driver classes so search can start with database queries and move to Scout without changing the frontend surface.

For teams: Lets visitors search site content and lets operators review what people searched for, including zero-result terms.

This package makes its Composer dependencies visible because they are part of the value proposition, not just plumbing. When an upstream package has a public repository, its linked preview card points readers back to the maintainers so their work gets proper credit.

Capell packages used here

Open-source packages used here

  • Laravel Actions - single-purpose action classes that keep package workflows out of controllers and Filament resources.
  • Spatie Laravel Data - typed data objects for package boundaries, form state, settings, and structured results.
  • Spatie Laravel Package Tools - Laravel package bootstrapping for config, migrations, commands, translations, and service provider setup.

Linked package previews

Laravel Actions GitHub preview

Spatie Laravel Data GitHub preview

Spatie Laravel Package Tools GitHub preview

Screenshots are generated from docs/screenshots.json during package deployment.

  • Frontend search results page.
  • Header search field.
  • Top searches widget.
  • Trending searches widget.
  • Zero-result searches widget.
  • Site search settings screen.
  • SearchServiceProvider and AdminServiceProvider register the package.
  • Config file: capell-search.php.
  • Route: GET search by default, named capell-frontend.search.
  • Model: SearchLog.
  • Drivers: DatabaseSearch and ScoutSearch.
  • Command: PurgeSearchLogsCommand.
AreaPathPurpose
Actionspackages/search/src/ActionsDomain operations. Test these directly where possible.
Datapackages/search/src/DataStructured payloads, form state, view models, and integration data.
Enumspackages/search/src/EnumsPersisted states and Filament option values.
Modelspackages/search/src/ModelsEloquent records owned by the package.
Filamentpackages/search/src/FilamentAdmin resources, pages, widgets, and settings UI.
HTTPpackages/search/src/HttpControllers, middleware, and request handling.
Providerspackages/search/src/ProvidersRegistration, extension hooks, routes, migrations, and resources.
Resourcespackages/search/resourcesViews, translations, assets, and package resources.
Routespackages/search/routesRoute files loaded by the service provider.
Configpackages/search/configPackage configuration and publishable config.
Databasepackages/search/databaseMigrations, seeders, and settings migrations.
Testspackages/search/testsPackage-level Pest coverage.
  • Widgets: BuildsSearchInsightsWindow, SearchOverviewStatsWidget, TopSearchesWidget, TrendingSearchesWidget, ZeroResultSearchesWidget.
  • Settings: SearchSettings.
  • Controllers: SearchController.
  • Routes: packages/search/routes/web.php.
  • search:purge {--days= : Override retention days} (packages/search/src/Console/Commands/PurgeSearchLogsCommand.php)
  • search_logs stores site, language, query, normalized query, result count, clicked URL, and searched_at.

  • Logs connect to sites and languages.

  • Retention defaults to 180 days in config.

  • Models: SearchLog.

  • Migrations: 2026_05_10_190868_01_create_search_logs_table.php.

  • Config: packages/search/config/capell-search.php.

  • Data objects live in src/Data/; use them for payloads, form state, and view models.

  • Contracts: Search.
  • Register Capell extension points, routes, migrations, settings, render hooks, and resources from service providers.
  • Adds search_logs table and settings migration.
  • Adds frontend search route.
  • Adds optional header search render hook.
  • Adds dashboard insights widgets.
  • Adds config keys for driver, route, result count, excerpts, logging, hashing, and retention.
  • Install with composer require capell-app/search in the host Capell application.
  • Run migrations through the host application package install flow.
  • In this repository, verify package changes with vendor/bin/pest; do not use php artisan.
  • None proven in this package directory.

  • Gate: SearchOverviewStatsWidget: admin, super_admin

  • Gate: TopSearchesWidget: admin, super_admin

  • Gate: TrendingSearchesWidget: admin, super_admin

  • Gate: ZeroResultSearchesWidget: admin, super_admin

  • Database driver config must point at searchable columns that exist.
  • The default core pages table is not a flat search index. Use a flattened table/view, a custom Search binding, or Scout for real page content.
  • Minimum query length defaults to 2 characters.
  • Disable logging or hashing according to privacy requirements.
  • Run log purge if retention needs enforcement.

Run package tests from the repository root:

Terminal window
vendor/bin/pest packages/search/tests --configuration=phpunit.xml
  • Put behaviour changes in src/Actions/; UI classes, commands, and controllers should call actions instead of owning domain logic.
  • Use package Data classes at boundaries instead of passing anonymous arrays between layers.
  • Use backed enums for persisted values and enum labels for Filament options.