terminalsio/kaer-morhen
terminalsio/kaer-morhen is a Laravel/PHP package that provides a fortified foundation for your application. It aims to keep core code organized and easy to integrate, offering a simple, package-first starting point for PHP projects that need a reliable base.
Because this is a tiny, single-maintainer package (1 star, 0 dependents), treat the source repo as the source of truth before wiring it into anything important. That said, it follows the standard Laravel Nova theme contract.
composer.json require block (e.g. laravel/nova: ^4.0 or ^5.0) against your nova version before installing — a mismatch is the single most common failure mode.composer require terminalsio/kaer-morhen
theme key in config/nova.php:
'theme' => 'terminalsio/kaer-morhen',
For older Nova (3.x and below), the equivalent is in NovaServiceProvider:
Nova::theme('terminalsio/kaer-morhen');
php artisan vendor:publish --tag=kaer-morhen-assets
Check the package's service provider for the exact tag; if none exists, the theme is likely loaded directly from the package's resources/dist folder.php artisan nova:publish && php artisan optimize:clear
First use case: the theme is purely cosmetic — a custom skin over the Nova admin UI. Reach for it if you want your Nova panel to match a product brand out of the box without hand-writing CSS. If you only need a logo tweak, Nova's built-in branding config is lighter than pulling in a whole theme package.
NovaServiceProvider:
public function boot()
{
parent::boot();
if (app()->environment(['staging', 'production'])) {
Nova::theme('terminalsio/kaer-morhen');
}
}
Nova::brand() or a Nova::script()/Nova::style() call that loads after the theme, so upgrade risk stays low. Nova 4+ supports publishing a nova.css you can append to.config/nova.php panels array) and override per-panel, or maintain separate builds.composer.json ("terminalsio/kaer-morhen": "1.0.*" or a commit hash) so a surprise push can't break your admin panel on composer update.require constraint first; this alone explains most "it doesn't work" reports for small themes.vendor:publish and whether the service provider's boot() registers a publishes() call. Running vendor:publish blindly can scatter files; inspect the provider first.php artisan optimize:clear, then hard-refresh the browser (the compiled CSS is often fingerprinted; a stale manifest serves old styles).resources/ of your own app and maintaining it yourself is a legitimate strategy. You lose composer update convenience but gain stability.resources/ directly; there is unlikely to be extensive docs or issue history to lean on.Nova::theme(), Nova::style()/Nova::script() registrations, and any publishes() tags. Those three are where a Nova theme is wired in — if you understand the provider, you understand the package.How can I help you explore Laravel packages today?