Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Sentinel Laravel Package

anselmokossa/filament-sentinel

Drop-in branded error pages for Filament 500, 403, 404, 419 and 503, built from native Filament UI so they inherit your panel's colours and dark mode. Real exception details, stable SAP-style message numbers, request ids and EN/PT/PT-BR translations.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Filament Sentinel is a presentation-layer package, not an infrastructure component. Its entire surface area is Laravel's exception-rendering pipeline (registered via withExceptions() in bootstrap/app.php) plus a set of Blade views composed from native Filament components (<x-filament::button>, badge, section, icon). That is a deliberately small footprint: no service provider boot logic to speak of, no database, no queue, no middleware stack insertion, no schema. For a team already running Filament, the architectural fit is close to ideal because the pages inherit the panel's design tokens (colours, fonts, logo, dark mode) rather than introducing a second design system that must be kept in sync. The "no bespoke theme" claim is the single most important architectural property here — it means the error pages degrade gracefully as the panel is re-themed, and it removes a class of visual drift that plagues hand-rolled error views.

Integration feasibility. Low effort, low ambiguity. Composer install, optionally publish config/views, register a render hook keyed on status code (500, 403, 404, 419, 503), verify. A competent Laravel developer should complete a staging integration in under a day including review of the 500 page's information-disclosure behaviour. There is no data migration, no backfill, no consumer contract to negotiate. The package's own 26 passing tests are a reasonable signal that the happy paths for each status code are covered, though they say nothing about behaviour under a partially-booted application.

Technical risk. Three risks dominate, in order:

  1. Information disclosure on the 500 page (high). The README explicitly advertises that the 500 view renders "the real exception behind a 'View more' panel — class, location, message." That is a debugging affordance, and it is exactly the wrong default for production. Any deployment where this is not gated to local/staging, or to authenticated super-admins, turns every unhandled exception into a reconnaissance gift: file paths, class names, framework internals, sometimes connection strings in messages. This must be treated as a mandatory configuration gate in the integration, not an optional hardening step.
  2. Maturity and bus factor (medium-high). 9 stars, 0 dependents, a single maintainer, and a README-plus-changelog-only documentation set. There is no evidence of production adoption. The package targets Filament v5 and Laravel 12 — both recent — so the version window is narrow and the author has had limited time to encounter edge cases. Assume you are an early adopter and budget accordingly.
  3. Identity/metadata inconsistency (low but worth resolving before procurement). The package name in your record is anselmokossa/filament-sentinel while the repository URL is github.com/anselmocossa/filament-sentinel — kossa versus cossa. One of these is a typo. Confirm the canonical Composer vendor name and the Packagist entry before pinning a dependency, because a near-miss vendor name is a routine typosquatting vector.

Secondary risks: HTML error pages leaking into JSON/API responses if the render hook is not scoped correctly; interaction with existing exception instrumentation (Sentry, Flare, Telescope, Ignition) which may also register a render callback and win or lose the ordering race.

Key questions.

  • Does the package's render hook respect $request->expectsJson(), or will it attempt to return HTML to API clients?
  • Does the 500 "View more" panel gate on app()->isProduction() internally, or is gating entirely the integrator's responsibility?
  • Do the views work for routes outside a Filament panel context (e.g. a 404 on a public marketing route where no panel/tenant is resolved)? What happens when the panel cannot be resolved — do we get a second exception inside the error handler?
  • Is the 500 view asset-dependent (Vite manifest, published CSS)? If the error page needs a compiled asset that is missing or stale, does it fail open to Laravel's default page or throw?
  • What is the maintenance cadence? Does the changelog show versioned releases with Laravel/Filament constraint bumps, or a handful of commits?
  • Which upstream exception renderers does it conflict with, and is the registration order documented?

Integration Approach

Stack fit. This is a targeted fit: Laravel 12 + PHP 8.2+ + Filament v5. It is a non-starter for Laravel 10/11 estates or Filament v3/v4 panels, and there is no indication of a backport path. Confirm your fleet's actual versions before evaluating further — if any product surface is still on Filament v4, this package fragments your error-page strategy rather than unifying it. Because the value proposition is brand consistency, a partial rollout (some panels branded, some default) is arguably worse than no rollout.

Migration path. Effectively greenfield — there is no incumbent to migrate off, only Laravel's default error views. The one-way door is stylistic: once 500/403/404/419/503 render through Filament scaffolding, reverting means accepting a visible regression in branded experience. Treat it as a low-cost, easily reversible decision (delete the render hook and the views), which is why a time-boxed evaluation is cheap.

Compatibility. Verify three things before committing: (a) the Composer constraint actually resolves against your locked Filament v5 minor; (b) custom error views or an existing errors/ directory override do not shadow the package; (c) your error-reporting vendor's render hook coexists cleanly — the two should be composable, since one reports and one renders, but ordering determines whether the branded page or the debug page wins in non-production.

Sequencing.

  1. Resolve identity — confirm canonical vendor/package name on Packagist; pin an exact version in composer.json.
  2. Staging integration on a low-traffic panel — install, register the render hook, publish views for review.
  3. Gate the 500 detail panel — restrict exception detail to non-production and/or an authorised role. Do this before the first staging demo so reviewers never see an ungated version and assume it is the intended production posture.
  4. Verify JSON/API behaviour — exercise each status code against Accept: application/json and confirm the package stands down.
  5. Verify non-panel routes — 404 on public routes, 419 on expired-session form posts, 503 under php artisan down.
  6. Failure-injection test — throw from within the error view (rename a published asset, break a config value) and confirm Laravel's fallback renders rather than a blank 500.
  7. Production rollout behind a config flag — ship dark, enable per-panel, and keep the env toggle so you can revert in seconds without a deploy.
  8. Document the gating rule in the runbook, because the next developer to touch the config will not know why the detail panel is disabled.

Operational Impact

Maintenance. The good news is the surface is small: Blade views and a render hook. Upgrades to Filament will occasionally rename or restyle Blade components, and because these pages are built from those components, a breaking Filament major is a breaking Sentinel change. That creates a coupling you do not control: your Filament upgrade calendar now has an external dependency with a single maintainer and 9 stars of social proof. Mitigation is straightforward — publish the views into your own repository rather than consuming them from vendor/, and treat the package as a seed rather than a runtime dependency. That converts an upstream risk into a five-file maintenance burden you own.

Support. No commercial support, no discussion forum, no dependents to consult. The changelog suggests an active author but no evidence of an SLA or a deprecation policy. Realistically, first-line support is your own team reading the source — which is fine at this size (a few Blade files) but should be an explicit, stated assumption rather than discovered at 2am.

Scaling. Negligible runtime cost — these are static-ish views rendered only on error paths, and the volume is bounded by however often your app errs. The real scaling concern is inverted: error pages fire precisely when the application is unhealthy (cold caches, saturated workers, failed deploys), so the page must be cheap and dependency-free. Confirm views are precompiled and that no Vite manifest lookup or panel-context resolution can fail under degraded conditions. A branded 503 that itself 500s is a worse outcome than Laravel's plain default.

Failure modes to plan for.

  • Exception inside the exception handler — panel cannot resolve on a non-Filament route, or a tenant-scoped panel throws during resolution. Must fail open to Laravel's default.
  • Missing compiled assets — 500 page renders unstyled or throws after a bad deploy.
  • Information disclosure — the 500 detail panel left ungated in production. Highest-severity, most likely failure.
  • JSON contamination — branded HTML returned to an API client that expected an error envelope.
  • Instrumentation conflict — Sentry/Flare/Telescope render hook wins, branded pages silently never appear, and the team concludes the package is broken.
  • Abandonment — no release for a Filament major, forcing an unplanned fork at the worst possible moment (mid-upgrade).

Ramp-up. Low: a Filament-fluent developer understands the component vocabulary immediately, and the integration is measured in hours. The organisational ramp-up is the cost — the gating rule for the 500 detail panel, the "publish views, don't depend" convention, and the fail-open test need to land in the runbook and be understood by whoever is on call, not just the person who integrated it. The 9-star / 0-dependent profile also means you should expect to justify the choice to a security reviewer; arrive with the disclosure gate already implemented and a documented fallback, or the conversation will stall on the "View more" panel alone.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast