tomatophp/filament-blog
A Laravel Filament blog package for managing posts, categories, tags, and comments from your admin panel, with ready-made resources and customizable content tools for building a blog or news section.
Architecture fit. This is not a blogging engine — it is the presentation layer of a two-part install. tomatophp/filament-blog supplies the public-facing Blade routes and templates; tomatophp/filament-cms owns the content model (posts, categories, tags, media, SEO fields). That split is the single most important architectural fact for planning. It fits cleanly only when the team is already on Laravel + Filament + CMS Builder. Outside that stack, the value proposition collapses: you inherit a coupling to a 10-star package to avoid writing maybe two weeks of CRUD and templates.
Integration feasibility. Mechanically straightforward: two Composer requires, plugin registration in the panel provider (CMS first for readability), publish config/migrations/views, php artisan migrate, then verify with php artisan route:list | grep -i blog. The real work is not installation — it is the override layer and the SEO surfaces the package does not ship (sitemap, RSS/Atom, canonical tags, Open Graph, redirects, structured data). Budget a two-day spike to prove content end-to-end: create one post with title, slug, body, and featured image in /admin, confirm it renders at the public route unstyled-but-correct, then theme. Theming before that wiring is confirmed is wasted effort.
Technical risk. Enumerated for the risk register:
1.0.x, not ^1.0).composer update./blog is a popular prefix. Check route:list before and after; change the package prefix in config rather than renaming existing app routes. Watch for model-binding conflicts if the app already defines Post or Category.Key questions to close before committing:
filament-blog-migrations and filament-blog-views publish tags actually shipped, or does the README overstate the install?auth with no-store?Stack fit. Adopt as "assemble," not "buy." Borrow the presentation layer (MIT, forkable), keep content modeling and editorial workflow in CMS Builder, and spend engineering capacity on differentiators. Adopting this is also a decision against headless/omnichannel delivery for now — server-rendered Blade with route config, no content API. Write that deferral into the decision log deliberately rather than letting it happen by default.
Migration path. If migrating from a legacy CMS: export posts/categories/tags into the CMS model shape, populate a database-backed redirects table during the move, and apply it in global middleware. Imported HTML is the classic XSS vector — sanitize on ingest, not on render. Validate image/asset resolution through the CMS media relation rather than reconstructing paths.
Compatibility. Pin both tomatophp/filament-blog and tomatophp/filament-cms to exact patch ranges on day one. This is the highest-leverage risk control available. Rehearse any Filament major upgrade in a branch, never on main.
Sequencing. Five gates, each with a clear exit:
resources/views/vendor/filament-blog/, split the layout shell from post-card and post-detail partials so reskins don't force re-pulling upstream into card markup. Maintain UPSTREAM.md listing overrides and rationale.saved/deleted observers in our app (not a package edit). Explicitly exclude draft/preview from cache.Route prefix and middleware change through config/filament-blog.php, never by editing the package routes file — that is what lets the same install serve at /blog, a subdomain root, or behind a feature flag.
Maintenance. Ongoing cost is low but non-zero, and it is manual diffing — there is no community to tell you what changed. Required artifacts: pinned versions, UPSTREAM.md, an upgrade runbook (how to bump, how to test, who forks if upstream stalls), and a standing budget line for Filament major upgrades. Keep overrides thin; that thinness is the actual insurance policy and the thing that keeps a fork in days rather than months. Never run vendor:publish --force after customization begins — it overwrites overrides.
Support. No SLA, no vendor, no forum. Support is entirely internal: one named owner accountable for the dependency. That is a manageable arrangement if the name is written down and the exit path is funded. It is not manageable if the package quietly becomes load-bearing for a revenue channel with nobody on the hook. Debugging sequence to document so it isn't relearned each incident: route:list for the URI → confirm CMS migration ran and content exists → view:clear → check expected layout name → confirm the public route's middleware matches the app's web group → config:clear / optimize:clear.
Scaling. Pages are largely static per post and server-rendered — favorable for response caching and CDN offload. The scaling risk is not throughput, it is cache correctness: drafts and authenticated previews must never land in a shared cache (auth middleware plus no-store on preview routes), and cache tags must flush on content save/delete rather than on a timer. Verify with an incognito request to an unpublished slug that it 404s.
Failure modes to pre-plan:
| Failure | Symptom | Detection |
|---|---|---|
| Filament major bump | Plugin registration and resource APIs break | Branch rehearsal; CI install test |
| Draft leak | Unpublished content reachable publicly | Incognito check on draft slug; query-scope test |
| XSS via imported content | Script execution on published page | Sanitize-on-save; one explicit test |
| Unstyled frontend | Missing asset publish — page renders, looks broken | Post-install smoke check |
| Route collision | Existing /blog route shadowed or vice versa |
route:list diff before/after |
| Stale caches | "Package is broken" false alarms | Standard optimize:clear runbook step |
| Signed-URL expiry | Images break on cached pages | Verify S3 public URLs early |
Ramp-up. A Laravel/Filament-fluent engineer should be productive in one to two days given the spike; the learning curve is the CMS/blog boundary and the view-override precedence rules, both of which are documented cheaply in the runbook. Content editors need only standard Filament admin familiarization. Plan a short handover for whoever inherits the override files, and treat the first Filament major upgrade as the real readiness test — that is when you learn whether the exit plan is genuinely a two-day rewrite.
How can I help you explore Laravel packages today?