devsfort/fortblog
FortBlog is a Laravel package for adding a lightweight blog to your application, with post and category management, customizable views, and simple configuration. It helps developers ship a maintainable blog without building content management from scratch.
composer.json on the tagged 1.0.1 to confirm the exact ranges before installing; the release note tells you the constraint moved, not what it moved to. Install with composer require devsfort/fortblog:^1.0.1 and commit the lockfile.composer.json (requirements and autoload), src/*ServiceProvider.php (what it registers, publish tags, routes, bindings), config/fortblog.php (if present), database/migrations/, then routes/. Diff 1.0.0 → 1.0.1 against these files rather than trusting the changelog summary.php artisan vendor:publish --provider="Devsfort\Fortblog\FortblogServiceProvider"
php artisan migrate
php artisan route:list | grep -i blog
Verify the actual publish tags in the service provider's publishes() call rather than guessing --tag=fortblog-config. Because 1.0.1 ships "fixes for FortBlog settings," confirm the published config file matches the keys the 1.0.1 code actually reads.Post extending it (or a repository/service around it) so you can add scopes, accessors, and relationships without patching vendor/ on every composer update — and so the 1.0.1 settings/behaviour tweaks don't reach into your controllers.fortblog::...) and publish to resources/views/vendor/fortblog/. This keeps upgrades safe and lets you match your existing design system./blog) and add throttle and cache middleware. If it registers authoring/admin routes — and 1.0.1's settings work implies an admin surface — immediately wrap them in auth + a can:manage-blog gate. Small packages frequently ship routes with minimal middleware, and you do not want to discover that in production.published_at timestamp. Build your own query scopes (published(), scheduled()) and a PublishPost action rather than scattering status checks through controllers. If scheduling exists, wire it to Laravel's scheduler and add a withoutOverlapping() job.src/Events/ or Event::listen calls. Post-created/updated/published events are the clean seam for cache invalidation, sitemap regeneration, search indexing, and social syndication. If no events exist, fire your own from your wrapper service.updated_at, and eager-load author/tags/categories to avoid N+1s on index pages. Return PostResource from your own controllers so the package's model shape never leaks into your API contract.php artisan config:cache && route:cache after publishing config; php artisan vendor:publish --force for any package config you've already published when upgrading to 1.0.1, then diff the result against your committed copy; ensure migrations are part of your deploy pipeline; publish any package assets (CSS/JS) or explicitly decide to replace them with your own build.composer.json, and budget for a fork if you ship this. For anything long-lived or public-facing, fork it into your org and own it. The upside: a second contributor (@hahmad748) on the 1.0.1 PR slightly reduces the bus-factor risk versus 1.0.0.--force before config:cache — a cached stale config is the most likely way 1.0.1 breaks your app on deploy.Class not found appears, manually register the provider in bootstrap/providers.php (Laravel 11+) or config/app.php.vendor:publish with no tag publishes everything; with a wrong tag publishes nothing and fails silently. Run php artisan vendor:publish interactively once to see the actual tags.posts, categories, tags, or a settings table. Rename via config if the package supports a table prefix; otherwise edit the published migration before migrate./blog or a Post model, you'll get silent shadowing (first-registered route wins). Check route:list ordering after upgrading in case 1.0.1 added or reordered routes, and consider disabling the package's routes via config and wiring your own.php artisan about (provider loaded?), route:list, config('fortblog') in tinker (config published and merged?), composer show devsfort/fortblog (am I actually on 1.0.1?), php artisan vendor:publish --force for stale published assets, and Log::info inside the package's service provider boot() to confirm execution order.register() for interfaces you can rebind), model subclassing, published config, published views, and events. Avoid monkey-patching.Route:: and confirm each route's middleware — especially any settings/admin routes, which are the newest and least-reviewed surface in 1.0.1. Small blog packages often assume you'll add auth yourself.vendor/devsfort/fortblog between tags (1.0.0 → 1.0.1 is small enough to read fully), run your feature tests, and keep the fork's diff small by confining changes to your wrapper layer.Post model and a Markdown renderer is a few hours of work and zero dependency risk. Reach for this package only if its admin UI, settings screen, or publishing workflow saves you meaningful time and you're prepared to maintain it.How can I help you explore Laravel packages today?