squareboat/sneaker
Squareboat Sneaker gives Laravel developers a simple way to preview and test outgoing emails before they reach real inboxes. Inspect rendered mailables in the browser, catch template issues early, and speed up email development without extra tooling.
Architecture fit
squareboat/sneaker is a thin, in-process extension of Laravel's exception handling pipeline. It hooks into the framework's report() path and dispatches an email through Laravel's existing mailer whenever an exception is raised. Architecturally that means:
It is a notification convenience, not an observability platform. Treat it as a stopgap or a low-cost safety net, not as a replacement for an APM/error-tracking system (Sentry, Flare, Bugsnag, Rollbar).
Integration feasibility Very high. Typical footprint:
composer require squareboat/sneakerphp artisan vendor:publish to emit the config file.app/Exceptions/Handler.php (trait/contract, depending on version) and set recipients, subject prefix, and any exception exclusion list.Realistically a half-day including staging verification. The main gating item is not the package but the mail transport: if the app has no working mailer, or the mailer is the thing that's broken (common during an outage), the whole alerting path fails silently.
Technical risk
report() semantics have shifted across major versions; an unmaintained package can become a hard blocker on a framework upgrade.Key questions to resolve before approval
ValidationException/NotFoundHttpException traffic?Stack fit Fits cleanly into a standard Laravel application that already uses the framework mailer with SMTP, SES, Mailgun, or Postmark. It has no opinion on the mail provider, so it inherits whatever deliverability and authentication (SPF/DKIM/DMARC) posture the transactional mail already has. There is no Node/Python/Go equivalent to consider — this is a Laravel-only decision, so it is scoped to our PHP services only and creates a deliberate asymmetry if the estate is polyglot.
Migration path There is nothing to migrate from if this is a greenfield addition. The important framing is that it is not a migration off Sentry or Flare — it does not replicate their grouping, release tracking, breadcrumbs, or dashboards, and teams that try to substitute it one-for-one will be disappointed. The realistic path is:
Handler.php. Exit cost is near zero — a meaningful point in its favor.Compatibility
The two compatibility checks that matter are (a) the composer constraint against our Laravel/PHP matrix, and (b) whether the current Handler.php structure matches the package's expected wiring — Laravel 11's bootstrap/app.php exception configuration differs materially from the older app/Exceptions/Handler.php pattern that most of this package's documentation and ecosystem predates. Confirm against our actual version before committing.
Sequencing
Maintenance
Minimal surface: one composer dependency, one config file, a handful of lines in the exception handler. Upgrades are only a concern at Laravel major-version boundaries, where the risk is an unmaintained package blocking the framework bump. Pin the version in composer.json and add a note to the framework-upgrade checklist to re-evaluate it.
Support Community-only, no SLA, no vendor channel — README and GitHub issues. That is acceptable for a non-critical convenience layer but unacceptable for anything in the incident-response critical path. Name an internal owner. The failure mode of "nobody remembers this exists until the framework upgrade breaks" is the most likely long-term outcome for packages like this.
Scaling Scaling is the weakest dimension. Cost scales linearly and free, but human capacity does not: an email inbox with 50 exception emails a day is functionally equivalent to no alerting, because the signal is buried. This package works reliably up to roughly the point where a team is already triaging a handful of exceptions per day. Beyond that, it actively degrades incident response by training the team to ignore the alert stream.
Failure modes to plan for
Ramp-up A developer is productive within an hour; there is no new mental model beyond Laravel's existing exception handler. The genuine ramp-up cost is organizational, not technical: establishing the distribution list, the exclusions policy, the PII redaction standard, and the 30-day go/no-go review. Budget roughly one engineer-day of total team effort end to end.
TPM verdict: approve as a low-risk, low-cost, low-ceiling tactical addition for a small number of low-criticality Laravel services, provided the mail-failure cascade question is answered satisfactorily and it is explicitly positioned as a complement — not a substitute — for a real error-tracking decision that should still be made on its own merits.
How can I help you explore Laravel packages today?