Product Decisions This Supports
- Content Lifecycle Management: Enables structured editorial workflows (draft → scheduled → published → unpublished) for content-heavy applications like blogs, news sites, or marketing platforms. Directly supports roadmap items requiring compliance (e.g., GDPR "right to be forgotten" via
unpublished state) or SEO-driven publishing schedules.
- Build vs. Buy Decision: Buy for teams prioritizing speed and consistency over customization. Build only if needing >4 states (e.g., "archived," "translated") or deep integration with niche workflows (e.g., multi-language publishing). Ideal for teams using Laravel Nova/Forge to standardize publishable behavior across models.
- Performance Optimization: Leverages
published_first_at for chronological sorting and caching strategies (e.g., "only serve published content after X date"), reducing database load for public-facing queries.
- Admin Panel Standardization: Provides a reusable trait for consistent publishable UX across models (e.g.,
Post, Product, Event), reducing fragmentation in admin interfaces like Nova.
- Legacy System Modernization: Enables retrofitting publishable logic to existing systems without rewriting core model logic, accelerating migration timelines.
When to Consider This Package
-
Adopt If:
- Managing content with clear editorial lifecycles (e.g., blogs, e-commerce listings, events).
- Using Laravel Nova and needing consistent publishable behavior across models.
- Prioritizing simplicity over granular control (e.g., no need for custom validation per state).
- Requiring basic scheduling (e.g., "publish this post on June 1st") without complex cron jobs.
- On Laravel 10+ and PHP 8.2+, with AGPL-3.0 license acceptable for your project.
-
Look Elsewhere If:
- Needing >4 states (e.g., "reviewed," "translated," "obsolete"). Consider spatie/laravel-activitylog or custom solutions.
- Requiring soft deletes or versioning. Use spatie/laravel-model-caching or spatie/laravel-activitylog.
- On Laravel <10.0 or PHP <8.2. Package is tightly coupled to these versions.
- Preferring event-driven architectures (e.g., broadcasting state changes). This package is model-focused, not event-driven.
- Needing multi-tenancy support out of the box. This package lacks tenant-scoped publishable logic.
- AGPL-3.0 license is incompatible with proprietary software. Fork or seek alternatives like orchid/softdelete.
How to Pitch It (Stakeholders)
For Executives:
"This package standardizes how we manage content publishing across all our apps—whether it’s blog posts, product listings, or events—with minimal development effort. It handles drafts, scheduling, and unpublishing in one reusable component, reducing technical debt and accelerating feature delivery. For example, we could launch a ‘coming soon’ section for products in weeks instead of months. The AGPL license aligns with our open-core strategy, and it integrates seamlessly with our existing Laravel stack, ensuring consistency without reinventing the wheel."
For Engineers:
*"This trait gives us a zero-boilerplate way to add publishable states (draft/scheduled/published/unpublished) to any Eloquent model. Key advantages:
- Migration macro (
$table->publishable()) adds all required 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 build custom 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, 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. Benefits:
- Drafts are hidden from public views by default.
- Scheduled content appears automatically at the right time (e.g., seasonal promotions).
- Unpublished content can be archived cleanly without cluttering the UI.
This reduces editor errors and makes workflows predictable across all content types."*
For Legal/Compliance:
*"The AGPL-3.0 license requires us to open-source any modifications to this package. If we fork it, we’ll need to:
- Audit dependencies for compliance risks.
- Document changes clearly for the open-source community.
- Align with our licensing strategy—this may not be suitable for proprietary SaaS modules. For now, we’ll use it in open-core projects or seek alternatives like orchid/softdelete for closed-source components."*