codenco-dev/nova-grid-system
A Laravel Nova package that adds a flexible grid system for arranging fields, cards, and content into responsive multi-column layouts. Configure column widths, spacing, and breakpoints to build cleaner, more organized Nova dashboards and resource screens.
Architecture fit. This is a presentation-layer Nova tool, not application infrastructure. It attaches as a fluent layout annotation on Nova field definitions, arranging fields, cards, and custom components into responsive rows and columns inside resource forms and detail views. It touches no domain model, no data access, no API surface — which is the point: the blast radius of adopting or abandoning it is confined to admin UI. It only creates leverage if the organization has already standardized on Laravel Nova for internal back-office tooling. If Nova adoption is partial, or if the team is still evaluating admin frameworks, this package is a distraction with no strategic payoff.
Integration feasibility. Conventional Composer install plus Nova tool registration (auto-registration, or an explicit entry in NovaServiceProvider::tools()). The real gate is version compatibility: this is a Nova 4-era artifact, last released 2023-02-20 (v2.0.1), with 81 stars and 0 dependents. Nothing in the ecosystem confirms it runs on Nova 5, Laravel 11+, or PHP 8.2+. The correct first commitment is a time-boxed sandbox spike against one representative resource — not a rollout plan. The public API surface is small and should be enumerated before any estimate: the fluent span methods, any macros registered on Nova's Field class, and the published config (breakpoints/gap). That list is the package.
Technical risk. Moderate-to-high, and the risks compound rather than sit independently:
dist/js/tool.js is the single most common "does nothing" failure — it presents as an API problem but is a build problem.`col-span-${span}`) silently vanish in production builds unless safelisted. Layouts that work under npm run dev collapse under npm run production, and the failure is invisible until someone looks at a staging screenshot.fullWidth(), size(), stacked(), and the grid's span method set width-ish classes on different layers. Stacking them produces unpredictable results; the fix is discipline (one method per field), not code.attribute resolution, which cascades into validation error mapping, dependsOn, fillUsing, and authorization. That is a correctness risk wearing a layout costume.Key questions.
grid-column: span N) or Tailwind width classes? Every override and exit decision flows from that one detail.Stack fit. Laravel + Nova + Tailwind-based asset pipeline + Vue. If the released dist/ is stale or absent, the team needs a Node toolchain capable of building inside vendor/ — a non-trivial ask on a locked-down deploy pipeline. Confirm early whether the wrapper emits CSS Grid or Tailwind classes; the former sidesteps purge issues and makes app-level overrides a one-line stylesheet change, the latter requires safelist surgery.
Migration path. There is no data migration here, and that is the package's best property. Keep fields() returning a flat array of real Nova fields with span metadata attached per field — treat the grid as annotation, never as a structural wrapper. Extract each layout into its own class under app/Nova/Fields/ returning a static make(): array, so the same shape can be reused inside Action::fields() and detail panels. That isolation is what makes fork, rewrite, or removal a one-file change instead of a package-wide refactor. Strip the span calls and the resource reverts to stock Nova — document that as the rollback and rehearse it once.
Compatibility. Pin the exact version in composer.json. Build a small explicit test matrix rather than trusting the constraint string: Nova 4 vs Nova 5 (if both exist in the estate), PHP 8.1/8.2/8.3, Laravel 10/11. Verify asset registration and asset compilation on the target deploy pipeline, not just locally. Confirm production-build parity before signing off — a dev-only pass is not a pass.
Sequencing.
dist/ present and non-empty, JS loading in the network tab.BelongsTo search, in-house components) before committing to any layout that uses them.Maintenance. Effectively unmaintained: 81 stars, zero dependents, no release since February 2023. Pin the version, and if the grid reaches more than two or three resources, vendor it via a path repository or a fork so the team owns the Vue component and can patch after a Nova upgrade. Commit dist/ in the fork — Nova does not build tool assets for you, and a gitignored dist/ looks broken on the next deploy with no error to chase. Override styles at the app level (resources/css/nova.css or a wrapper component), never in vendor/, where edits are silently reverted by composer update.
Support. Zero dependents means no community, no forum trail, no third-party answers. Every question routes to the internal owner. There is no vendor SLA and no security-response path. The realistic support model is: one named engineer, a pinned version, a documented fallback, and an explicit acceptance that a Nova upgrade may break the grid and the answer may be "remove it."
Scaling. This scales in scope cost, not runtime cost. Each additional resource using the grid adds maintenance surface and re-verification burden at every Nova/Laravel/PHP upgrade; the layout itself imposes negligible load. Do not let usage sprawl into a de facto design-system layer — that is exactly the foundational-dependency role this package is unfit for. Treat it as a tactical accelerator or a reference implementation for a later in-house field.
Failure modes. Nearly all of them are silent, which is what makes them expensive:
fullWidth(), size(), stacked()) is winning on a different layer.attribute resolution; dependsOn fields collapse their cell and reflow the row when hidden.composer update layout drift — someone patched vendor/.Mitigate with smoke tests on admin form rendering and a short visual checklist per deploy. Debug in the browser Elements panel against computed grid styles — that resolves in seconds what costs an hour through PHP traits and macros. Budget roughly half a day for the spike plus a named owner; the fluent API ramps quickly for anyone who knows Nova, and the real skill to build is asset-pipeline and devtools debugging, not PHP. Recommendation: trial on internal, low-risk Nova admin screens with an owner and an exit plan; do not standardize.
How can I help you explore Laravel packages today?