Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Blog Laravel Package

firefly/filament-blog

Feature-rich Filament blog plugin for Laravel 11 and Filament 3.x with scheduling, SEO meta tags, comments, newsletters, social sharing, author blocks, and configurable table of contents.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. firefly/filament-blog is a standard Laravel package with a Filament plugin entry point (Blog::make() inside a panel provider). It honors the conventional package contract — service provider, publishable config (filamentblog.php), publishable views/components/migrations, and artisan installers (filament-blog:install, filament-blog:upgrade-tables). There is no sidecar service, no external CMS, and no separate datastore, so it drops into an existing Laravel 11 + Filament 3 app with minimal architectural negotiation. The important caveat for a TPM: this is not an admin-only add-on. It ships its own public request surface (/blogs by default), front-end Blade views, a comment system, a newsletter subscriber list, and an outbound mail pipeline triggered on publish. The decision on the table is therefore "adopt a blog subsystem" — with its own routes, schema, PII, and deliverability obligations — not "install a CRUD screen." That framing should drive the review bar.

Integration feasibility. The happy path is short and well documented: composer require → filament-blog:install → edit filamentblog.php → php artisan migrate → storage:link → register the plugin in the panel provider. Two config touchpoints dominate feasibility assessment. First, the user block defaults to a package-owned model (Firefly\FilamentBlog\Models\User) — in any real application this must be repointed at the app's own User model, with foreign_key and columns.avatar mapped to existing schema. Second, the tables.prefix setting must be decided before the first migration, because changing it later requires the filament-blog:upgrade-tables command, which mutates live tables. Front-end adoption is the real cost driver: if our public site is server-rendered Blade, the package views are reusable; if it is a Next.js/headless front end, we consume only the data model and discard the shipped views, which means either forking views or writing a separate read API — a scope increase worth surfacing early.

Technical risk. Ranked for planning purposes:

  • Licensing ambiguity (blocking gate). Packagist reports NOASSERTION while the README and LICENSE.txt claim MIT. This is a documentation/packaging inconsistency, not necessarily a legal problem, but it must be resolved by legal before code is merged. Do not treat "MIT" in the README as sufficient evidence.
  • Vendor and adoption risk (high). 145 stars, zero dependents, single-maintainer org (Firefly IT Solutions, Nepal), support channel is an email address plus GitHub issues, no SLA. Bus factor is effectively one. Whatever we build becomes ours to maintain.
  • Version/documentation drift (high). The description pins Laravel 11 + Filament 3.x, but releases include v3.0.0 ("v4 Support") and 4.0.0 ("Support filament v5"). Upgrade notes exist only for 1.x → 2.x; the 2.x → 3.x → 4.x path is undocumented. This tells us the package tracks Filament majors reactively, so every Filament upgrade becomes a coupled upgrade.
  • Content rendering / XSS surface (medium). Auto-generated Table of Contents and author blocks imply post bodies are stored as rich HTML and re-rendered on the public site. We need explicit confirmation of HTML sanitization and heading-parsing behavior before exposing to anonymous traffic.
  • PII and consent surface (medium). Comments plus newsletter signup create a personal-data store inside our application. Newsletter unsubscribe flow, double opt-in, and retention are not described in the README.
  • Maturity signals (medium). Maturity metadata lists only readme, releases — no test suite or CI badge is evidenced. A package with no observable tests plus a destructive table-migration command is a combination that warrants a hands-on spike.

Key questions to close before committing.

  1. What is the actual license of record (Packagist metadata vs. LICENSE.txt)? Legal sign-off required.
  2. What is the supported compatibility matrix across Laravel 11/12 and Filament 3/4/5, and which branch is main?
  3. Does scheduled publishing depend on the Laravel scheduler running a package command, or on Filament's queue? If the scheduler fails silently, do posts simply never appear?
  4. Are new-post notifications queued or sent synchronously inside the publish request? What happens to the publish action if SMTP is down?
  5. Is there an unsubscribe mechanism and double opt-in, or is the subscriber table raw email capture?
  6. Is there a comment moderation queue, or do comments publish immediately? Is reCAPTCHA optional-by-default (yes, per config) — meaning an unconfigured deploy ships with an open comment form?
  7. Are Filament resources permission-aware, or do we get a single "can access panel" gate on all blog admin?
  8. How much of the front end is overridable via published views without a fork? What does a fork commit us to?
  9. What does v3.1.0's "multi lang" feature actually cover — content translation, UI strings, or both?

Integration Approach

Stack fit. Strong on paper: Laravel 11 + Filament 3 is the documented target, and the package uses only first-party Laravel primitives (Eloquent migrations, filesystem disks, mail/notifications, Blade views). No new runtime, no new infrastructure. The gating assumptions are (a) our Filament version matches a supported branch and (b) our public site is Blade-rendered. If either fails, the integration cost shifts from "config" to "fork + custom API layer," which changes the estimate by an order of magnitude.

Migration path. The package owns its own tables with a configurable prefix (fblog_ by default). Because tables.prefix must be fixed before the first migrate, prefix selection is a pre-work decision, not an implementation detail — pick it once and lock it in the ADR. Content migration from an incumbent blog (WordPress, Markdown, Ghost) is not provided by the package; posts, categories, authors, slugs, and images must be mapped by hand or by a bespoke importer. Budget this explicitly — it is routinely the largest line item and the package contributes nothing to it. SEO continuity (301s from old URL structures to /blogs/{slug}) is likewise our responsibility, and the configurable route.prefix and route.home keys are the levers.

Compatibility and versioning. Pin the package to an exact version and pin Filament to a compatible major in composer.json; treat both as a coupled upgrade unit. Because the package has historically shipped Filament-major support in lockstep, plan for the package upgrade to be a prerequisite of any Filament upgrade, and for there to be no migration guide when that happens. Establish a policy now: if a Filament upgrade lands and the package has not caught up within N weeks, we fork.

Sequencing (recommended).

  1. Gate: legal license clearance + compatibility matrix confirmed against our pinned Filament version.
  2. Spike (1–2 days, disposable branch): install, run install command, override the user model, publish all asset tags, and exercise publish/schedule/comment/subscribe end-to-end in a sandbox. This is where the open questions above get answered empirically.
  3. ADR + decision: adopt-as-is, adopt-with-published-view-overrides, adopt-and-fork, or build-in-house. Record the bus-factor mitigation explicitly (named internal owner).
  4. Configuration freeze: table prefix, route prefix/middleware, disk, SEO defaults, recaptcha, show_author, TOC enabled/disabled, queue vs. sync mail.
  5. Infrastructure prerequisites: storage:link in the deploy pipeline, queue worker capacity for notifications, scheduler entry for future-dated posts, mail domain authentication (SPF/DKIM/DMARC) before the first newsletter send.
  6. Content import + redirect map + SEO verification (highest-elapsed-time workstream; start it in parallel with step 4).
  7. Launch behind a feature flag / route-level gate, dark-shipped to internal users first for comment and newsletter flow validation.
  8. Fork-or-follow checkpoint at 60–90 days post-launch, measured against upgrade friction.

Operational Impact

Maintenance. This is the dominant ongoing cost and should be stated plainly in the business case: we are adopting an unowned-by-us dependency with one effective maintainer and zero dependents to share the burden. Practical posture is a named internal owner, a pinned version, and a standing quarterly review of upstream activity. If upstream goes quiet, the fallback is a fork — cheap to execute (it is a normal Laravel package) but it converts a config-level dependency into a code-level one we must patch against every Filament major. Publishable views are our primary customization lever and also our primary upgrade friction: every published view becomes a file we must diff on upgrade.

Support. There is no commercial support tier. Upstream responsiveness is best-effort via [email protected] and GitHub issues. For a TPM this means the internal team is tier-1 and tier-2 support for anything blog-related — including bugs that originate upstream. Do not route this to a marketing or content owner. Security disclosures go to the same email with no published SLA or CVE process.

Scaling. Request-path scaling is conventional Laravel: cacheable public pages, indexable slugs, standard Eloquent reads. The pressure points are the ones typically unaddressed by packages of this profile: image delivery through the public disk (needs CDN in front, or the blog becomes the slowest page on the site), N+1 queries in category/search listing views, and comment writes hitting the primary database unpaced. Newsletter fan-out is the only genuinely non-linear workload — publishing to a large list must be queued and chunked, or the publish action becomes a request-timeout incident. Confirm before launch.

Failure modes to design against.

  • Silent publishing failure. If scheduled publishing depends on the scheduler and the scheduler is not running in the new environment, future-dated posts never promote to published with no error surfaced. Needs an alert on scheduler heartbeat, not just a cron entry.
  • Mail outage on publish. If notifications are synchronous, a mail failure can fail the publish action itself, or worse, partially notify the list. Decouple via queue.
  • Spam flood. reCAPTCHA ships disabled by default; an unconfigured production deploy has an open, unmoderated comment form. Treat enabling it as a launch checklist item, not a nice-to-have.
  • XSS through rich content. Post bodies and TOC generation on anonymous pages are the highest-severity technical exposure. Sanitization must be verified, not assumed.
  • Migration misstep. filament-blog:upgrade-tables rewrites table names; running it against production without a verified backup and a dry run is a rollback-hostile operation.
  • Deploy drift. Missing storage:link in a container build produces broken images that look like a content problem, not an infra problem. Put it in the pipeline, not a runbook.
  • Deliverability. Newsletter and notification mail from an unauthenticated domain lands in spam and damages the corporate sending reputation. Domain authentication is a prerequisite, not a follow-up.
  • Route collision. A configurable route.prefix of blogs can shadow or be shadowed by existing routes; check the route table in staging.

Ramp-up. One Laravel engineer familiar with Filament can reach productive competence in roughly 1–2 days; the install and config surface is genuinely simple. Content-team onboarding to the admin UI is under half a day. The non-obvious ramp-up cost is organizational: someone must own the fork-or-follow decision, the upgrade cadence, and the newsletter compliance posture — a blog that "just works" is precisely the kind of surface that gets neglected until an upgrade or a spam incident forces attention.

TPM recommendation. Viable and low-effort to pilot, but not a "set and forget" dependency. Fits best as an internal, low-stakes or secondary content surface where a fork is an acceptable outcome and where a Blade front end already exists. It is a poor fit for a revenue-critical marketing site, a headless front end, or an organization without capacity to own a fork — primarily because of licence ambiguity, single-maintainer risk, and the undocumented 3.x → 4.x upgrade path. Gate the pilot on legal clearance plus a two-day spike, and make the fork-or-follow decision at day 90 rather than deferring it.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
alphabalex/messaging-made-easy
rawphp/warp
shootkiran/merobug
narakode/fineauth
numencode/wn-syncops-plugin
ibnnajjaar/mib-global-pay
ably/pubsub-server
mstfkhazaal/defender
mfonte/base62x
karnoweb/metapilot
tobya/bcsapiwrapper
swalker2/cpanel
vish4395/laravel-translation-manager
morningtrain/economic
teksite/systeminfo-laravel
atomcms/voting
run6/weather
siokas/laravelembeddirectives
adamlien/pkuuids
gilsonsouza/lara-doc-generator