Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Nova Theme Responsive Laravel Package

gregoriohc/laravel-nova-theme-responsive

A responsive theme for Laravel Nova that adapts the admin panel to mobile and tablet screens, fixing layout and navigation issues on small devices so Nova stays usable anywhere. Easy to install and configure.

View on GitHub
Deep Wiki
Context7

Getting Started

Know what you're actually installing before you type a command. This is not a Laravel package in the usual sense — no service provider, no migration, no facades. It's a folder of CSS that Nova loads instead of (or on top of) its default stylesheet, wired up through a single config key. Your entire integration surface is config/nova.php. That's the good news and the bad news: nothing to break, but nothing to debug either when it silently does nothing.

Step 0 — check your Nova major version. This is the whole decision.

composer show laravel/nova | grep -i versions

The package's last release is March 2020, which places it squarely in the Nova 2.x/3.x era. Nova 4+ rewrote the frontend (Vue 3/Inertia, new asset pipeline, native responsive behaviour). On 4+, assume this package is a no-op at best. Stop here and use Nova's own responsiveness.

Step 1 — install pinned.

composer require gregoriohc/laravel-nova-theme-responsive:^1.0

Don't let an unmaintained theme float. Commit composer.lock. If you need a PHP-constraint bump for Laravel 10/11, prefer a VCS repository entry pointing at your own fork at an exact commit over dev-master.

Step 2 — point Nova at it.

// config/nova.php
'theme' => 'gregoriohc/laravel-nova-theme-responsive',

The value must match the Composer package name exactly. There is no validation — a typo gives you an unstyled or blank Nova, not an exception.

Step 3 — publish and clear.

php artisan nova:publish
php artisan config:clear

nova:publish copies the theme's assets into public/vendor/nova. Skip it and the theme never reaches the browser. Skip config:clear and your theme change is invisible if config is cached.

Where to look first:

  • vendor/gregoriohc/laravel-nova-theme-responsive/resources/ — read the CSS. You need to know which Nova selectors are being overridden before you layer anything on top.
  • The package's composer.json — check its laravel/nova and php constraints against yours.
  • Grep the vendored package for .blade.php and .vue files:
find vendor/gregoriohc/laravel-nova-theme-responsive -name '*.blade.php' -o -name '*.vue'

Empty output means asset-only, which is a fundamentally lower risk profile. View overrides mean Nova point releases can produce blank panels.

First use case: an existing Nova 2/3 admin that's fine on desktop but unusable on a phone. Load /nova in DevTools at 375px, open the sidebar, scroll a resource index, open a create form. Collapsing sidebar + horizontally scrolling tables is your "it works" signal.

Implementation Patterns

Make the theme a per-environment switch, not a hardcoded value.

// config/nova.php
'theme' => env('NOVA_THEME', 'gregoriohc/laravel-nova-theme-responsive'),

Staging can run it while production waits for sign-off. Rollback becomes an .env edit plus php artisan config:cache. This is also your feature flag if you want a QA gate before real admin users see it.

Never edit vendor files. Layer your own CSS on top.

Nova gives you a first-class hook in app/Providers/NovaServiceProvider.php:

public function boot()
{
    parent::boot();

    Nova::style('css/admin-responsive-overrides.css');
}

Put that file under public/css/ and treat it as first-party code. This is where you fix the things the theme doesn't cover — bigger tap targets, brand colours, a breakpoint that actually matches your device fleet. It's also the seam that makes extraction cheap later.

Treat the package as a reference implementation, not a dependency.

The highest-leverage pattern with a six-year-stale theme is to read it once and own the parts you need:

cp vendor/gregoriohc/laravel-nova-theme-responsive/resources/css/*.css public/css/
# prune to the selectors your panel actually uses
composer remove gregoriohc/laravel-nova-theme-responsive
# then remove the 'theme' key from config/nova.php

You trade an unmaintained dependency for a few hundred lines of CSS you control, that you can diff against every Nova upgrade. Do this before you pile customizations on top of the theme, or you'll be untangling two layers of overrides with no clear provenance.

Own the publish step in the deploy pipeline.

The theme lands as static assets under public/vendor/nova. That directory is not refreshed by composer install. Make it an explicit deploy step:

php artisan nova:publish
php artisan config:cache

Then hook it into your asset versioning or CDN invalidation, so a deploy doesn't leave phones holding stale CSS from three releases ago.

Build a viewport QA matrix — it can be tiny.

The theme's failure mode is silent. A two-minute manual pass is worth more than trusting it:

Width Views
375px resource index, detail, create form, action modal
768px same
1280px same (regression check)

Screenshot before/after. When a Nova point release breaks something, you want to be able to attribute it.

Separate layout from content density.

The theme fixes layout: sidebar, table overflow, modal sizing. It does nothing about a 14-column index that's unreadable at 375px no matter how nicely it scrolls. Pair it with resource-level work:

// In your Resource class
public static function indexQuery(NovaRequest $request, $query)
{
    $isMobile = preg_match(
        '/Mobile|Android|iPhone/i',
        $request->userAgent() ?? ''
    );

    return $query->when($isMobile, fn ($q) => $q->limit(25));
}

And lean on hideFromIndex() / hideWhenCreating() for wide columns and rarely-used fields on narrow screens. Responsive layout plus a desktop-only column set is what actually makes mobile admin usable. Layout alone just means the cramping is now horizontally scrollable.

Isolate adoption in its own release.

Land the theme in a deploy window adjacent to — never inside — a Nova upgrade. If both ship together and mobile admin breaks, you can't tell whether it's the theme, the Nova bump, or the interaction. Separate releases make the bisect trivial.

Gotchas and Tips

Nova 4+ is a hard stop, not a "maybe". The rewritten Vue 3/Inertia frontend means 2020-vintage selector CSS either does nothing or breaks silently. Check the Nova major version before you spend a single minute on this.

A wrong theme value fails silently. No validation, no exception. If Nova looks blank or unstyled after enabling, check in this order: exact package-name spelling in config/nova.php, php artisan config:clear, and whether public/vendor/nova actually contains the theme's CSS.

Config caching eats your change. config/nova.php is cached in production. "I changed the key and nothing happened" is the single most common false alarm with Nova config edits. php artisan config:clear (or config:cache) after every change.

Stale published assets after deploy. nova:publish copies into public/vendor/nova, which Composer does not touch. Half-themed mobile views almost always mean the publish step didn't run. php artisan nova:publish --force overwrites — use it deliberately, not as a reflex.

Mobile Safari caching will waste an afternoon. A phone holding a cached stylesheet while desktop looks correct is a classic. If a fix "doesn't work on my phone," hard-reload or test in a private tab before you start debugging CSS.

Confirm asset-only before you commit. Grep the vendored package for .blade.php and .vue files. Pure CSS means Nova upgrades are low-risk. View overrides mean Nova point releases can produce blank panels or JS errors in a privileged admin surface — a high-visibility production incident. Know which one you're buying into.

Watch the PHP constraint. Old packages cap at PHP 7.x. If resolution fails on Laravel 10/11, that's the likely cause. Fix it with a fork carrying a widened constraint — never --ignore-platform-reqs on an admin dependency.

Responsiveness is not accessibility. CSS that shrinks or hides controls can wreck focus order and tap targets. After enabling, tab through the sidebar and an action dropdown with a keyboard and confirm focus stays visible. In a regulated environment that's compliance exposure, not cosmetics.

No vendor, no SLA, one maintainer. Budget a couple of hours per Nova major upgrade to re-validate selectors, and assign an explicit internal owner — usually the platform or admin-UX lead. An orphaned admin theme is worse than no theme, because nobody knows whether it still works and nobody feels responsible for finding out.

Removal is genuinely cheap — which is the point. Revert the theme key, delete public/vendor/nova artifacts (or your own CSS file), composer remove, config:clear. No migrations, no data cleanup, no runtime state. That's exactly why the right plan is a short, pinned trial with an extraction-or-removal decision on the calendar — not an open-ended standing dependency on a modern Nova stack.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
robertmarney/lara-hierarchial-collections
simonschaufi/rule-doc-generator
emissaoja/emissaoja
blackbricksoftware/gravityforms-civicrm-form-processor
al-rahabi/fancy-crud
jinas/dhivatar-component
mltstephane/laravel-quality
bernskiold/laravel-talentlms
bernskioldmedia/laravel-form-architect
youbar/easy-crud
c-point-labs/laravel-hostyourai
dbravoan/dbcms-admin-theme-dbcms
dbravoan/dbcms-theme-db-cyber
dbravoan/dbcms-blocks-basic
dbravoan/dbcms-module-content-audit
dbravoan/dbcms-module-ai-assistant
paygate-to/paygate-php
padosoft/askmydocs-connector-base
defstudio/supercharged-carbon
bernskioldmedia/laravel-matomo