yeswedev/laravel-cms-nova
A Laravel CMS package built for Laravel Nova, giving you ready-made content management for pages and site content inside the Nova admin panel. Manage, edit, and publish content with familiar Nova resources and fields, so you can ship a customizable CMS-backed site faster.
This package carries almost no public footprint (no stars, no listed dependents, hosted on Framagit rather than GitHub), so treat the first hour as reconnaissance rather than a normal composer require. Start by confirming the install resolves against your Laravel/Nova versions:
composer require yeswedev/laravel-cms-nova
composer show yeswedev/laravel-cms-nova # inspect requires: laravel/framework, laravel/nova, php
Before going further, read the package's composer.json constraints. Nova packages are tightly coupled to Nova majors (v4 vs v5 have different asset pipelines, Nova::script/style vs Vite), and a mismatch here is the single most likely reason nothing registers.
Where to look first, in order:
vendor/yeswedev/laravel-cms-nova/src/ — find the service provider (likely CmsNovaServiceProvider or similar) and read register() / boot() / booted() line by line. This tells you exactly what it wires up: Nova::tools(), Nova::cards(), Nova::resources(), menu entries, routes, migrations, policies.vendor/yeswedev/laravel-cms-nova/config/ — any publishable config, and the key names it expects.vendor/yeswedev/laravel-cms-nova/database/migrations/ — what tables it assumes or creates (pages, blocks, menus, translations).vendor/yeswedev/laravel-cms-nova/routes/ — front-end vs Nova routes, and any middleware groups.vendor/yeswedev/laravel-cms-nova/resources/ — views and JS/CSS that need publishing.Then publish whatever is offered:
php artisan vendor:publish --provider="YesWeDev\\CmsNova\\CmsNovaServiceProvider"
php artisan migrate
php artisan config:clear && php artisan route:clear && php artisan view:clear
First use case: log into /nova, confirm the package's tool or menu group appears in the sidebar, create a single content/page record through its UI, and verify the corresponding front-end URL renders. That end-to-end loop exercises routes, authorization, model bindings, and view resolution in one shot — if any of those are broken, you'll find out immediately.
Treat the package as a Nova tool shell, not an application framework. The realistic pattern is: the package gives you a Nova tool/dashboard and possibly base resources, and you extend it inside your app rather than editing vendor code. Concretely:
Nova::tools([...]), check whether the tool implements authorizedToSee() or relies on a gate. Define the gate in AuthServiceProvider if it doesn't ship one, otherwise you'll get a silent 403 or a missing menu item.Page, Block, Menu), don't modify them. Create App\Nova\Page extends YesWeDev\...\Page and override fields(), cards(), actions(). Swap the registration in NovaServiceProvider::resources() to your subclass. This survives composer update.HasMany + sortable/nova-sortable field or the package's own field if provided. Keep publish state as an explicit enum column so both Nova and front-end queries agree.config('cms.prefix', 'cms')) so they don't collide with your app's catch-all. If it doesn't, resolve content yourself in a controller/route-model-binding and use the package only for the admin surface.Cache::remember() keyed by slug + locale, and flush on the model's saved/deleted events. Nova edits are rare; don't let a query-per-request pattern reach production.Nova::actingAs($user)) for feature tests over the tool, and plain RefreshDatabase for the content models. If the package ships factories, use them; otherwise write your own — you'll need them for any regression work given the package's low maintenance signal.Nova major-version mismatch is the top failure mode. Nova 4 uses Mix-era Nova::script/Nova::style; Nova 5 moved to Vite. If the tool's assets 404 or the JS console throws on Nova.booting, you're on the wrong Nova major. Pin the package version and verify with composer why laravel/nova.
This package is effectively unmaintained by signal. Zero stars and zero dependents means no community buffer: no issue reports to learn from, no fork to inherit fixes. Pin to an exact version in composer.json, commit your composer.lock, and plan to fork or vendor-copy the src/ directory into app/ if you need to patch. Budget for that from day one rather than discovering it during an upgrade.
Publishable config vs config:cache. Anything published before a config cache is baked in silently wins over new defaults. Run php artisan config:clear after every vendor:publish and after any package update.
Asset publishing is two-step. vendor:publish handles PHP config/views/migrations; Nova assets may need php artisan nova:publish. Missing a step is the usual cause of "the tool shows up but is blank."
Migration ordering collisions. CMS packages often ship create_pages_table-style migrations that collide with app tables of similar names. Check the migration names in vendor/ before running migrate on a database that already has content tables.
Route catch-all shadowing. If your front-end has Route::get('{slug}', ...), it will happily swallow the package's routes (or vice versa). Verify with:
php artisan route:list --path=nova
php artisan route:list -v | grep -i cms
Authorization silent failures. Nova filters menu items by policy/gate rather than erroring. If the tool "disappears," it's usually authorization, not a broken install — log in as a super-admin to isolate.
Extension points to prefer over edits: publishable config and views, resource subclassing, Nova custom fields, model events for cache invalidation, and middleware added via config/nova.php middleware/api_middleware arrays. Avoid touching vendor/ — a composer install on another machine will silently revert it.
Debugging toolkit: php artisan about to confirm the provider loaded, dd(Nova::availableResources(request())), Laravel Telescope for the queries the tool issues, and the browser network tab for 404s on JS/CSS chunks. Most "it's broken" reports resolve to one of: provider not autoloaded (composer dump-autoload), assets unpublished, or Nova version mismatch.
Read the source before the README. Given the package's size and hosting, the README is likely thin or French-language. src/ is the authoritative spec — 200 lines of provider code tells you more than any docs you'll find.
How can I help you explore Laravel packages today?