amarenkov/laravel-mutable-content-tasks
A Laravel package for defining and running tasks that mutate content, offering a flexible workflow for managing content-changing jobs in your application.
open/closed status on points (Point::FIELD_STATUS, point_status LOV), with new points defaulting to open and status-less points treated as open. This lets product define clear timer semantics — a point is either actively tracking time or stopped — and supports status-based UX (active timers, completed entries, dashboards).Points::of($point)->close() stops the running time and closes the point; reopen() reverses it; both emit domain events (PointClosed, PointReopened). PMs can use these to justify scope around pause/resume, corrections, and "reopen a mistakenly closed entry" flows.whereOpen() / whereClosed() plus isClosed() enable product surfaces like "currently running timers," "completed time entries," and open-vs-closed counts without custom query work.PointClosed / PointReopened events are natural hooks for downstream features (notifications, billing triggers, activity feeds, audit trails), reducing the need to couple those features to the core model.DomainException shows the API is hardening around valid state transitions. At v0.2.0, expect further minor-version behavior changes before a stable line; budget maintenance/upgrade time accordingly.Consider adoption when:
DomainException) without designing that domain model yourself.Look elsewhere when:
For executives: This package gives us a ready-made, event-driven time-tracking core — points that can be opened, closed, and reopened, with proper state guards and query scopes — so we can ship stop/start timer features and status reporting faster and with less custom code. It is early-stage (v0.2.0), so the main trade-off is modest maintenance for upgrades; the integration surface is small and the event hooks keep future features decoupled.
For engineering: v0.2.0 adds an open/closed lifecycle with a status LOV, isClosed(), whereOpen()/whereClosed() scopes, close()/reopen() actions on Points, and PointClosed/PointReopened domain events. Invalid transitions (starting time on a closed point) now raise DomainException, so state rules are enforced at the domain layer. It is straightforward to integrate, testable via events, and a good fit if we want the domain model handled for us — with the expectation of some API churn pre-1.0.
How can I help you explore Laravel packages today?