thomasjohnkane/snooze
Snooze is a Laravel package for temporarily pausing scheduled commands, letting you snooze automated tasks for a set period and resume them later without editing your scheduler. Useful for maintenance windows and ad-hoc control.
Architecture fit
Snooze (thomasjohnkane/snooze) is an Eloquent-backed scheduled-notification layer for Laravel. It fits naturally into applications with existing notification infrastructure (Notifiable models, Notification classes, queue workers) that need deferred or user-rescheduled delivery. Architecturally it is a thin wrapper: a Snooze model with a morph relation dispatches queued notifications at a stored send_at timestamp. It does not attempt to be a scheduler, workflow engine, or CRM-style cadence tool, so it will not accommodate complex drip sequences, per-user timezone rules, or fan-out orchestration on its own. For the narrow, common case — "remind this user in 3 days, and let them change that date" — it is a good fit and avoids bespoke cron jobs or dispatch()->delay() logic scattered through the codebase.
Integration feasibility High. The package publishes a migration and a config file, exposes traits and a small fluent API, and requires only that host models use standard Laravel notifiable behaviour. Release 2.9.1 is a single change: added Laravel 13 support in PR #144. No API changes, no migration changes, no config changes. Integration is an afternoon of work for a mid-level engineer, plus review.
Technical risk Low for the change itself; moderate for the dependency posture. Specific risks:
Key questions
Stack fit Snooze assumes Laravel conventions: Eloquent, service container, queue API, and notification channels. If the target application is on a current Laravel LTS and already runs queue workers, it slots in with no architectural negotiation. If the application relies on a database queue without a supervised worker, or uses a non-standard notification pipeline, the value drops sharply and the package becomes an extra moving part.
Migration path
Greenfield adoption is straightforward: install, publish the migration and config, run the migration, add the trait to relevant models, schedule notifications through the fluent API. For teams currently hand-rolling deferred sending via delay() or a custom scheduled-jobs table, migration means backfilling pending rows and redirecting call sites — manageable but non-trivial if the existing schema is already load-bearing. Because 2.9.1 carries no schema or API change, it does not force a migration on existing 2.9.x users; the safe upgrade is a version bump plus a smoke test.
Compatibility
The package declares support across multiple Laravel majors. Laravel 13 was added in this release, which implies the constraint now spans a wide range — verify it does not include future majors we have not validated. Pin the constraint in our composer.json rather than floating, and test on the exact framework version we deploy. PHP version range should be confirmed against our runtime image.
Sequencing
Maintenance Ongoing cost is low if wrapped. The package is small, and the surface we use is a fraction of it. The real maintenance task is watching upstream releases: with a narrow maintainer base, we should subscribe to releases and security advisories and be ready to fork. Vendor the package if the dependency sits on a critical path.
Support Community-supported open source, no vendor. Internal knowledge should not live in one engineer — document the wrapper and the failure modes. Because 2.9.1 was contributed by a first-time contributor, expect upstream review latency on future framework compatibility patches; budget for a delay when the next Laravel major lands.
Scaling Snooze scales with our queue and database, not independently. Pending snoozes are rows; at high volume the table grows continuously and needs pruning or archiving of sent items, plus an index on the send-time column for the dispatch query. Dispatch cadence is driven by the scheduler, so throughput ceiling is set by scheduling frequency and worker concurrency. This is fine for tens of thousands of pending reminders; at millions, revisit.
Failure modes
Ramp-up A Laravel-fluent engineer can read the whole package in a few hours; integrating a first notification flow is roughly a one-to-two-day task including tests. The learning curve is almost entirely in the surrounding Laravel concepts — queues, schedulers, notification channels — not in Snooze itself. Plan half a day of onboarding for a second engineer on the wrapper and runbook.
How can I help you explore Laravel packages today?