Product Decisions This Supports
- Content Lifecycle Management: Enables a standardized 4-state workflow (draft → scheduled → published → unpublished) for content-heavy applications (e.g., blogs, news sites, marketing pages). Directly supports roadmap items like editorial control, compliance-driven publishing (e.g., GDPR "right to be forgotten"), and time-sensitive content (e.g., events, promotions).
- Build vs. Buy Decision: Buy for teams prioritizing speed and consistency over customization. Build only if requiring >4 states, event-driven workflows, or deep integration with niche systems (e.g., multi-tenancy, localization).
- SEO and Performance: Provides
published_first_at for chronological sorting and cache optimization (e.g., "only serve published content after X date"). Aligns with performance goals for high-traffic content sites.
- Admin Panel Standardization: Reduces UI/UX fragmentation in Laravel Nova/Forge by unifying publishable behavior across models (e.g.,
Post, Product, Event). Supports consistent tooling for content editors.
- Legacy System Modernization: Accelerates retrofitting publishable logic to existing Eloquent models without rewriting core logic. Ideal for data migration projects.
When to Consider This Package
-
Adopt If:
- Your application manages content with clear editorial lifecycles (e.g., blogs, e-commerce listings, events).
- You use Laravel Nova and want consistent publishable behavior across models.
- Your team prioritizes simplicity and reduced boilerplate over granular control.
- You need basic scheduling (e.g., "publish this post on June 1st") without complex cron jobs.
- You’re on Laravel 10+ and PHP 8.2+ and can accommodate the AGPL-3.0 license.
-
Look Elsewhere If:
- You require >4 states (e.g., "reviewed," "translated," "archived"). Consider spatie/laravel-activitylog or custom solutions.
- Your workflow needs soft deletes or versioning. Use spatie/laravel-model-caching or laravel-model-versions.
- You’re on Laravel <10.0 or PHP <8.2. The package is tightly coupled to these versions.
- Your team prefers event-driven architectures (e.g., broadcasting state changes). This package is model-focused, not event-driven.
- You need multi-tenancy support out of the box. This package lacks scoping for multi-tenant environments.
- Your license requirements cannot accommodate AGPL-3.0 (e.g., proprietary SaaS). Fork or seek alternatives like orchid/softdelete.
How to Pitch It (Stakeholders)
For Executives:
"This package standardizes how we publish and manage content across our apps—whether it’s blog posts, product listings, or events—with minimal development effort. It handles drafts, scheduling, and unpublishing in a reusable component, reducing technical debt and accelerating feature delivery. For example, we could launch a ‘coming soon’ section for products in weeks, not months. The AGPL license aligns with our open-core strategy, and it integrates seamlessly with our existing Laravel stack, giving us a competitive edge in content management."
For Engineers:
*"This trait provides a batteries-included way to add publishable states (draft/scheduled/published/unpublished) to any Eloquent model with zero boilerplate. Key benefits:
- Migration macro (
$table->publishable()) adds all needed columns in one line.
- Trait-based, so we can mix it into any model (e.g.,
Post, PressRelease).
- Scheduled publishing via
published_at field—no need to reinvent cron logic.
- Works with Nova out of the box for consistent admin UIs.
- Lightweight (200 LOC) and actively maintained (recent 2025 updates).
Tradeoff: It’s opinionated (4 states only), but we can extend it if needed. Perfect for our content-heavy roadmap items like the ‘Editorial Calendar’ feature. Let’s pilot it on the Post model first to validate performance and edge cases."*
For Design/UX:
*"This ensures all publishable content follows the same lifecycle in the admin panel—no more ad-hoc ‘published’ checkboxes or confusing timestamps. For example:
- Drafts are hidden from public views by default.
- Scheduled content appears automatically at the right time (e.g., Black Friday deals).
- Unpublished content can be archived cleanly without cluttering the UI.
This reduces editor errors and makes the workflow predictable and consistent across all content types."*
For Product Managers:
*"This package directly supports our goals to:
- Launch content faster by standardizing publish workflows.
- Improve editor experience with clear states (draft/scheduled/published).
- Reduce technical debt by replacing custom publish logic with a reusable trait.
- Enable time-sensitive features (e.g., scheduled product launches) without custom cron jobs.
Next steps:
- Validate with the engineering team on state transition rules (e.g., who can publish?).
- Pilot on the
Post model to test performance and edge cases (e.g., scheduled posts across timezones).
- Assess Nova integration if we’re using it for content management.
- Confirm license compatibility with our stack (AGPL-3.0 is fine for open-core, but not proprietary SaaS)."*