ncus/inline-index
A lightweight Laravel/PHP package for working with inline indexes. Define and organize index entries directly alongside your content or models, with a simple, expressive API that drops into existing projects. Minimal setup and no heavy dependencies.
Architecture fit: The repository (laravel-nova-inlineIndex) is a Laravel Nova custom field that enables inline editing of an ordering/position column directly from a resource index table. That confines it to the internal admin surface of an existing Laravel + Nova application — no role in customer-facing UI, public APIs, or domain workflows. The correct portfolio framing is an admin-productivity accelerator for a narrow operator task (nudging row position on curated lists of roughly 10–50 rows), not a platform dependency and not a strategically weighted build-vs-buy decision. It should compete for funding against other internal tooling improvements, on operator time saved — never against roadmap features.
Integration feasibility: Feasible only where the organization already runs Nova on a supported major version and has a dedicated integer order/position column to write to. Installation is Composer plus a single field registration in a resource's fields() method; Nova's asset publish step is the usual source of silent failure. One blocker precedes any commitment: an identity mismatch. The registry description (ncus/inline-index: "declare inline database indexes on Eloquent models") describes a schema helper; the repo name and all three technical assessments describe a Nova ordering field. These are different packages. The Composer name must be reconciled against composer.json, src/, and resources/js/ before anyone runs composer require — installing the wrong one silently yields a helper class no Nova resource can reference.
Technical risk: High relative to adoption signals. Seven stars, zero dependents, an opportunity score near 29, and no visible maintenance cadence means we become the de facto maintainer of anything we ship. Nova custom fields bind to Nova internals and compiled Vue assets, so a Nova major upgrade is the primary breakage vector. Open behavioral unknowns: the save trigger (blur vs. Enter vs. action), whether writes go through Nova's standard update endpoint and therefore inherit policies and validation, readonly()/rules() support, test coverage, and license terms. Nothing in the package re-sequences siblings, so duplicate or sparse integers are a data-quality liability the adopting team owns entirely.
Key questions:
app/Nova/Fields and vendor the Vue component without fighting the namespace?defaultSort() / sortable()?TPM decision framing: Approve only as a time-boxed experiment with a named owner, explicit exit criteria, and a documented native fallback. Value is measured in operator time saved on curated lists; roadmap items must not depend on it.
Stack fit: Laravel + Nova admin only, gated behind Nova authorization and behind a feature flag, with a native read-only fallback field retained for comparison and rollback. Do not extend it to non-Nova admin panels, mobile clients, or customer-facing surfaces.
Migration path: Additive, not a data migration. Introduce on one non-critical Nova resource with the existing native field/action left in place; widen usage only after the persistence and authorization paths are confirmed. Because inline editing is a write path, treat it as new production surface requiring a rollback plan even though no schema migration is involved. If the target order column does not exist, adding it is a separate scoped piece of work with a sibling-scoping and uniqueness decision attached.
Compatibility: Pin the exact package version in Composer and record the resolved Laravel/Nova/PHP matrix in the ticket. Run php artisan nova:publish after every install or upgrade with a hard browser refresh, and validate that the Vue component actually registers — a namespace or asset mismatch renders a blank cell rather than erroring, which reads to operators as data loss. Confirm behavior against a policy-denied user and a 50+ row paginated lens before calling the spike complete.
Sequencing:
composer.json, src/, and resources/js/ once to determine the save trigger, the endpoint called, and authorization behavior.(parent_id, order)) and uniqueness enforcement before any edit ships.Maintenance: Assume we own it from day one. Zero dependents and low stars mean upstream fixes should not be planned on. Budget a compatibility check ahead of every Nova upgrade and a shallow fork (extend the field class into app/Nova/Fields, copy the Vue component) if the package stalls — roughly a day of engineering, not a project. Assign an owner by name in the ticket; "the team" is not an owner for a package nobody upstream maintains.
Support: Community-only, with unknown responsiveness and no SLA. Internal documentation must capture the interaction model, the column contract, the normalization job, and the exact fallback configuration, because the README is the only spec that exists. Include a one-paragraph runbook for "cells render blank" (check published assets, check the component name) so operators are not debugging a Vue registration mismatch at 5pm. Document the escalation path: named internal owner → fork procedure → flip to read-only fallback.
Scaling: Admin-only exposure caps blast radius, but inline editing renders per-row inputs and issues individual PATCH requests. Validate against production-like row counts and pagination on the target lens. Beyond tens of rows, prefer a bulk Nova action over cell-by-cell editing and reserve the field for final nudges — publish that guidance rather than assuming it. Because order changes are display-affecting, watch for stale cached lenses and dashboards showing outdated sequencing.
Failure modes:
order column yields silent no-op updates or 500s on save.Mitigate with version pinning, error tracking on nova-api responses, a model audit observer, a normalization job, and a native read-only fallback flippable per-resource.
Ramp-up: Low for a Laravel/Nova developer — one field class and one Vue component, evaluable in about a day. Moderate if the team must fork and maintain it, since that requires owning Nova field internals and the frontend build. Position this as a narrow admin convenience with explicit exit criteria and a named owner: the TPM outcome is a cheap, disposable win or a fast rejection — never a durable platform commitment. Recommendation: run a short proof-of-concept on one non-critical Nova resource against production-like row counts and a policy-denied user; if it measurably improves operator workflow, vendor/fork it with explicit ownership and version pinning, otherwise use native Nova capabilities or a small custom field and close the decision.
How can I help you explore Laravel packages today?