boitebeet/laravel-nova-ui-fix
boitebeet/laravel-nova-ui-fix is a lightweight Laravel Nova package that applies targeted UI fixes and styling polish to the Nova admin panel, helping correct common layout and visual inconsistencies without modifying Nova's core files or requiring manual CSS patches for a cleaner admin experience.
This package is a narrow compatibility shim: it re-supplies UI button components that were dropped from Laravel Nova's bundled component set. Treat it as a stopgap, not infrastructure — the whole value is measured in minutes saved per resource tool, not in features.
Minimal setup:
composer.json for the illuminate/support / laravel/nova constraints, then look at the service provider to see whether it registers Blade views, Vue components, or both.composer.json:"repositories": [
{ "type": "vcs", "url": "[email protected]:boitebeet/laravel-nova-ui-fix.git" }
],
"require": {
"boitebeet/laravel-nova-ui-fix": "dev-master"
}
composer update boitebeet/laravel-nova-ui-fixphp artisan vendor:publish --provider="Boitebeet\NovaUiFix\..." and php artisan nova:publish. Confirm whether the fix ships prebuilt JS/CSS or expects an npm run build in the package directory — small Bitbucket packages frequently ship source only.resources/js/components or resources/views. That directory listing is the API surface. Whatever filenames you see there are the component names you can use.First use case: you have a custom card or tool whose buttons render unstyled or throw "Unknown custom element" after upgrading Nova. Drop the package in, replace the broken markup with the package's component, and confirm the button visually matches the surrounding Nova chrome.
Blade usage in custom tools and cards. If the package registers Blade components, the day-to-day pattern is substitution, not abstraction:
{{-- before: broken/unstyled in the current Nova version --}}
<button class="btn btn-default" @click="save">{{ __('Save') }}</button>
{{-- after --}}
<x-nova-ui-fix::button variant="primary" @click="save">
{{ __('Save') }}
</x-nova-ui-fix::button>
Verify the actual namespace prefix from the provider's loadViewsFrom / Blade::component calls — do not assume.
Vue usage inside custom tools. If it registers Vue components, you get them globally only if the package's script is loaded through Nova::script() in the provider. Register explicitly in your tool's entry point when in doubt:
// resources/js/tool.js
import Button from '.../vendor/boitebeet/laravel-nova-ui-fix/resources/js/components/Button'
Nova.booting((app) => {
app.component('UiFixButton', Button)
})
Wrap, don't scatter. If you end up using these buttons in more than three places, create your own thin wrapper (<x-app-button>) that delegates to the package. When the package is abandoned — likely, given zero dependents — you change one file instead of grepping the codebase.
Keep the fix at the boundary. Use these components only in custom tools, cards, and fields you own. Never patch Nova's own published views to swap in these buttons; you will lose the change on the next nova:publish and you will be unable to tell whether a rendering bug is yours, Nova's, or the package's.
Version-pin aggressively. With no tags, dev-master means your build is non-reproducible. Commit a composer.lock and, better, pin to a commit hash:
"boitebeet/laravel-nova-ui-fix": "dev-master#<sha>"
COMPOSER_AUTH with a Bitbucket OAuth token in CI rather than relying on a developer's local credentials.composer show metadata, no release notes, no security advisory feed. You are responsible for auditing the code yourself; read the provider and every JS file once, end to end. It is small enough that this takes ten minutes..vue sources without a compiled bundle, the provider's Nova::script() will point at a nonexistent file and you will get a silent 404 in the network tab with an unstyled button. Check public/ in the package; if empty, run its build step and commit the output, or vendor the compiled file into your own asset pipeline.config/app.php? (2) did nova:publish copy the assets? (3) does the browser network tab show the package script returning 200? (4) does Vue DevTools show the component registered? (5) is the CSS specificity losing to Nova's own rules — inspect computed styles, not source.php artisan nova:publish, php artisan view:clear, and hard-reload. Nova caches aggressively; a "still broken" button is usually a stale asset.resources/views/vendor/... rather than editing the package in vendor/.composer.json, the more likely it breaks during an unrelated Nova upgrade at an inconvenient time.How can I help you explore Laravel packages today?