norman-huth/nova-assets-changer
Laravel Nova package that lets you change the CSS and JavaScript assets Nova serves, so you can customize your admin panel's appearance and behavior without editing vendor files directly.
What it is (TPM framing): a config-driven asset overlay for Laravel Nova — swaps/brands Nova's shipped CSS/JS in vendor/laravel/nova/public without forking Nova or editing vendor files. It is a presentation-layer patch, not a capability. The TPM's job is to treat it as a time-buying tool on the roadmap, not as a feature in itself.
Architecture fit. The best case for a TPM: it is a side-car, deploy-time tool with no service, no schema, no request-path surface, and no API. It cleanly defers the much larger "build our own admin surface" decision by one or more releases — the single strongest product argument for it. The counterweight to carry into planning is that it mutates assets the admin panel cannot boot without: small blast radius, high severity, so it must be owned as build/deploy tooling with a named owner, not absorbed silently as application code.
Integration feasibility. composer require + vendor:publish + one artisan step. A Laravel-fluent engineer can spike in under a day. The TPM gate is CI: Nova is a paid, credentialed dependency, so any automated verification requires a licensed Nova install in the pipeline. If we cannot test it in CI, we should not ship it.
Technical risk — the deciding signals for a TPM decision log.
norman-huth/nova-assets-changer vs. repository/composer namespace Muetze42/.... Confirm we install the code we audited before anything merges.nova:publish/nova:install overwriting customizations.Key questions (for the TPM to close before committing).
laravel/nova constraint does v1.2.4 declare — does it still admit ^4.x?public/vendor is gitignored?nova:publish?Stack fit. Laravel + Nova 5 (this release). Composer-only; the package adds no npm step, but producing replacement assets implies an owning front-end build on our side (Vite/Tailwind). PHP floor follows Nova 5's own requirement — confirm against our runtime.
Compatibility. Pin exactly (muetze42/nova-assets-changer: "1.2.4"), never ^1.2. The v1.2.2→v1.2.4 gap is precisely where a caret range would silently move us across a Nova major. Verify the declared Nova constraint before install and resolve the norman-huth vs Muetze42 naming question first. Treat the version pin as a TPM-enforced planning artifact, not an engineering preference.
Migration path.
Sequencing (the TPM's rollout plan).
composer.json, confirm declared Nova constraint, resolve the naming mismatch.nova:publish, screenshot the admin UI. Exit the spike only when re-run behavior is observed, not assumed.nova:publish (and in post-autoload-dump) — never by human memory.Exit criteria. Documented re-run behavior, a CI check we own, cache-busting verified, and a recorded ownership decision if the maintainer stays dark.
Maintenance. Low ongoing code cost, but a recurring upgrade tax: every Nova release can change asset filenames/hashes, so it needs re-verification on each Nova bump — budget roughly half a day per Nova upgrade, not per package release. Because the repo is archived, there is no upstream fix line; maintenance becomes ours by default. This is the number to put in front of the roadmap during Nova-major planning.
Support. No SLA, no vendor backing, archived maintainer. Laravel/Nova Support will not assist with a modified Nova asset bundle — customizing published assets is a plausible support-voiding act. Confirm license terms before rollout; either accept the risk formally in writing or keep an internal fork we can patch.
Scaling. No runtime scaling dimension — static assets, unchanged delivery path. The scaling-adjacent concern the TPM owns is caching and multi-tenant fan-out: environment-aware config lets one codebase serve per-brand or per-tenant asset sets, which underpins white-label/branded admin portals as a product offering — but only if cache-busting changes the asset version/hash every deploy. Otherwise CDNs and clients serve stale JS/CSS and the admin panel misbehaves for a subset of users.
Failure modes (for the risk register).
nova:publish or a manual re-publish overwrites customizations; the panel reverts to stock without an error. Detection: asset-hash assertion in CI, not visual QA.public/vendor gitignored, artisan step missed in image build. Detection: deploy-pipeline step ordering, not memory.Ramp-up. Learning cost is our own asset-publishing conventions, not the package. Budget roughly half a day to install and exercise, one to two days to productionize with CI. The TPM's leverage is to schedule that half-day inside the Nova-upgrade spike and the productionization inside the sprint that ships branding — not to treat this as a "small add-on" that quietly appears in a release.
How can I help you explore Laravel packages today?