jeffersongoncalves/laravel-saved-filter
Laravel Saved Filter lets users save reusable filter combinations for Eloquent queries and listings, so complex search criteria can be restored later. It provides database-backed storage and a simple API for persisting and applying filters.
saved_filter_id / report_id into scheduled sends — meaning the package now owns the "deliver this saved view to this person on this cadence" primitive, not just the view definition. If "email me this report weekly" is on your roadmap, this is the cheapest path to a working scheduler without designing timezone, DST, and re-send semantics yourself.timezone column (IANA name, null = app default) with correct DST behavior is the kind of detail that silently blocks EU/LATAM/APAC rollouts. A PM can now commit to "your 08:00 report arrives at 08:00 local time, year-round" as a supportable promise. describeSchedule() surfacing the zone in user-facing copy ("Sent every day at 08:00 (America/Sao_Paulo)") also removes a class of "why did this arrive at 3am?" support tickets.report_id for signed unsubscribe routes, saved_filter_id linking a delivered email back to the view that produced it) is what makes scheduled sends defensible. Unsubscribe links and provenance are table stakes for marketing-adjacent email; getting them from the package rather than bolting them on is a compliance de-risking decision.vendor:publish --tag="saved-filter-migrations" + migrate. Already-applied stubs are skipped, so it stays idempotent and safe, but the release checklist needs a standing "check for new stubs" item rather than a one-time setup task.Adopt when:
null falling back to the app zone also gives you a sane default for the single-region case.saved_filter_id and report_id support unsubscribe flows and "which saved view produced this email" debugging out of the box.Look elsewhere when:
To executives: The package has grown from "remember my filters" into "remember my filters and email them to me on a schedule," which is a much larger slice of the reporting feature set we'd otherwise build. This release makes scheduled reports safe to sell internationally: each report carries its own timezone, send times hold across daylight-saving changes, and the emails we send can carry proper unsubscribe links and trace back to the saved view that produced them. It also fixes a bug that could have sent a customer the same report twice on a DST transition day. The upgrade requires no code changes and no downtime — but it does add one recurring step to our release process (re-publishing the package's migration files), so it belongs in the release checklist, not just the onboarding doc.
To engineering: 1.10.0 adds a nullable timezone column (IANA name, null = app default) and computes occurrences from the date rather than by stepping a shifted time, which closes the spring-forward double-send. Unknown zone strings fall back to the app zone instead of throwing. Scheduled sends now always receive saved_filter_id and report_id alongside tenant_id, so the mail builder can construct signed unsubscribe routes and deep links. Upgrade path is the usual: vendor:publish --tag="saved-filter-migrations" then migrate; already-run stubs are skipped, so it's idempotent and safe on existing environments. Two things to internalize: this publish step now recurs with each schema-bearing release, so CI/deploy templates should treat it as standard rather than a one-time setup; and we should add a DST-transition test case to our QA checklist for any scheduled-send feature we build on top.
Recommendation: Adopt and upgrade — the timezone and builder-context features materially expand what we can promise customers, and the DST fix removes a live reliability risk. Add "re-publish package migrations" to the standing release checklist and update deploy templates before provisioning any new environment. Re-evaluate if we need filter-builder UI, complex query semantics, or formal support commitments; those remain outside this package's scope.
How can I help you explore Laravel packages today?