waynestate/nova-text-copy-field
A Laravel Nova field that displays text with a one-click copy-to-clipboard button, letting admins quickly copy IDs, URLs, tokens, and other values directly from the dashboard. Simple to install and customize.
Architecture fit. This is a presentation-layer artifact: a single Nova Field subclass (TextCopy) that extends Nova's native Text field, paired with a compiled Vue component rendering a click-to-copy button beside a displayed value. There is no business logic, no persistence, no API surface, no migrations, no queue work, no config file, no scheduled job. From a TPM's seat this is a UX dependency, not a platform dependency — the failure blast radius is a blank admin field, not a customer-facing outage or a data-integrity event. That framing sets the decision weight: reversible, low-consequence, cheap to decide, and not a candidate for architecture review or a change advisory board. The TPM's leverage here is speed-to-decision, not risk mitigation theater.
The one architectural fact that governs everything: version coupling. v3.0.0 is a Nova 5 compatibility release — "Laravel Nova 5 Support" plus a refactor to the Nova 5 field API — and Nova 5 moves the front end to Vue 3 with a raised PHP/Laravel floor. The package's major version is therefore a proxy for a platform version. Adopting v3.0.0 is a sub-task of a Nova 4 → 5 migration, never an independent upgrade. A roadmap line item called "upgrade the copy field" is mis-scoped unless the Nova upgrade is already funded and sequenced.
Integration feasibility. Very high, and that is the point. composer require, one use statement, then a like-for-like swap of Text::make(...) for TextCopy::make(...). Because it inherits Nova's Text, all existing chainables — onlyOnDetail, onlyOnIndex, sortable, textAlign, canSee, resolveUsing, displayUsing — continue to behave, so authorization gates and computed values are unaffected. Realistic effort for a Nova-fluent developer: hours, including staging verification. No data migration, no rollback plan beyond a revert, no coordination with other teams.
The integration risk is not in the code; it is in the ecosystem position: 1 star, 0 dependents, two contributors, single-institution (Wayne State University) ownership. That is a near-zero-adoption package — simultaneously reassuring (tiny, fully auditable surface) and a warning (no community pressure-testing, no downstream bug reports, no de facto maintenance guarantee). For a TPM the useful translation is: audit cost is low, but so is the evidence base, so our own verification is the only verification that will exist.
Technical risk, ranked:
Key questions the TPM should force answers to before committing:
2.x line available for anyone mid-migration?Stack fit. Applicable only to Laravel shops running a licensed Nova install. If Nova is not in the stack — Filament, Livewire, Inertia, bespoke admin — the package is categorically out of scope and this evaluation is a no-op; close it rather than bank it as "maybe later." Where Nova is in the stack, the package is peripheral and must be triaged as a line item inside the Nova upgrade workstream, never its own ticket. The TPM job here is containment in both directions: keep it from being scheduled independently, and keep it from being forgotten during the platform migration.
Compatibility. The matrix we must write ourselves, because upstream does not publish one: field v3.0.0 ↔ Nova 5 ↔ Laravel 11/12 ↔ PHP 8.2+ ↔ Vue 3. Pin exact versions on both sides of the boundary — no floating constraint on Nova, no floating constraint on this field. The absence of a published matrix is the single most useful piece of information in this evaluation, because it converts an assumption into a documented, owned artifact.
Migration path and sequencing:
app/Nova for the field class and count usage sites. Converts an open question into a scoped decision and gives the estimate a denominator.composer update there either fails resolution or silently breaks rendering. It rides the same change window as the Nova 5 upgrade — one deploy, one staging validation pass, one rollback.Rollout. Ship to staging with a smoke test that loads a resource using the field and asserts the copy control renders — because failures here are silent and client-side, an eyeball check on one resource is the minimum viable verification and a browser-level assertion is better. Promote to production with the Nova 5 change window, not on a Friday, not standalone.
Maintenance. Ongoing cost is near zero if the field is stable across a Nova major, and spikes to a hard dependency at every Nova major. That is the shape of the maintenance burden: long flat periods punctuated by gated upgrade work owned by a two-person external team. The TPM action is to name that owner internally — a platform/admin-tooling owner — and put the next Nova major on the radar with this package as a known line item, so the spike is anticipated rather than discovered.
Support. No SLA, no security response commitment, no vendor relationship. Support is entirely self-support: MIT license, readable source, small enough to audit in an afternoon and fork in a day. For a field of this size that is an acceptable trade — but it must be a conscious trade recorded in the decision, not an assumption that "open source means someone else is watching." With 1 star and 0 dependents, nobody else is watching.
Scaling. Technical scaling is a non-issue: it renders a string in an admin view and adds no query, no endpoint, no background work. The scaling concern that does exist is organizational: every additional Nova resource using the field increases the surface a silent Vue failure can affect, and increases the inventory work at the next major. Standardizing on one field implementation across resources is a net win over per-model reinventions, but the count of usage sites is also the count of staging checks you owe — so keep the number deliberate.
Failure modes and detection. Rank them plainly: (a) blank field after a Nova upgrade — silent, detected only by operator report; (b) clipboard API unavailable or blocked in an unusual browser/permission context — degrades to manual selection, cosmetically broken but not damaging; (c) composer resolution failure blocking an unrelated Laravel/PHP bump — noisy and immediate, which is the good failure mode; (d) upstream abandonment — no signal at all until the next Nova major lands and nobody ships a compatible tag. Detection posture: one staging smoke test covering the mount, plus a documented fallback so (d) resolves in a day rather than a quarter. Do not attempt to build telemetry for an admin field this small; the cost exceeds the risk.
Ramp-up. Trivial for anyone Nova-fluent — one composer command, one class swap, no new mental model because it inherits Text wholesale. The only genuine ramp-up is knowledge transfer of the decision context: why this dependency exists, what it replaced, and what the exit path is. Capture that in the ticket and the upgrade runbook; the code will explain itself, the rationale will not.
Bottom line for the roadmap. Do not fund this as a standalone initiative. Fold it into the Nova 5 upgrade as a half-day evaluation-with-intent-to-remove, gate it behind the native-capability check, pin exact versions if it survives, and keep the in-house fallback documented. Total exposure if handled this way is measured in hours; total exposure if it is adopted casually and forgotten is a recurring gate on every future Nova major — a small tax, but a permanent one, paid on a dependency that a native field may already make unnecessary.
How can I help you explore Laravel packages today?