pdmfc/nova-action-button
Add configurable action buttons to Laravel Nova resources. Define buttons with labels, icons, colors, and links or actions, then place them on resource detail and index views to trigger custom operations, external URLs, or modal actions with minimal code.
Friction tuning on routine back-office workflows. Nova already exposes actions through dropdowns and row menus. This package lets a PM make an explicit product decision about how many clicks separate an operator from a repeatable task — resend an invitation, mark as reviewed, re-sync a record, approve a pending item. If the KPI is time-to-complete per ticket, operator throughput per hour, or onboarding time for a new ops hire, button-level affordances are the direct lever. It is a cheap instrument for testing that hypothesis before committing roadmap capacity to custom Vue or a bespoke admin UI.
Build vs. buy vs. adopt for a single UI affordance. The realistic alternative is not "build a feature" — it is a 1–3 day internal Nova field plus indefinite maintenance of something narrower and equally under-maintained. Because this is MIT-licensed and pre-built, the decision collapses to roughly half a day of integration and validation against our Nova version versus a sprint of rework. For an internal tool with a small, trusted operator group, adopt-and-vendor usually wins on cost.
Roadmap sequencing as a de-risker. It enables shipping a workflow pilot — a manual approval queue, a record-sync button, an escalation control — in days and gathering real operator signal (click volume, error rate, abandonment, support tickets) before deciding whether the workflow deserves a real backend state machine, a dedicated service, or a job-queue redesign. The button is the cheap probe; the usage data tells us whether to invest further, and gives us a defensible "we tried the thin version" datapoint if we later ask for engineering time.
Encoding business rules in the UI layer without a new endpoint. Where actions must be hidden or disabled based on resource state — already approved, unpaid, missing permission, wrong status — the field gives a PM a concrete place to express "this action should not be offered unless X" as a product requirement rather than a nicety. That matters for compliance-adjacent flows where showing an action a user cannot take is itself a defect, not just poor UX. The field handles the visibility UX; the Action class and policy remain the security gate, so the requirement is enforceable and testable.
A forcing function for action hygiene. Because the button dispatches an existing Nova Action rather than reimplementing logic, adopting it pushes teams toward one canonical action class with one set of permissions, confirmations, and queue semantics. That is a maintainability decision with product consequences: the dropdown and the button can never drift apart, so behavior an operator learns in one place holds in the other.
Platform posture signal. Adopting small, unmaintained community packages deepens Nova lock-in. Declining them is a data point that it may be time to evaluate Filament or a bespoke admin. Every adoption is a quiet vote on the admin-platform bet, and this one should be recorded as such in the decision log rather than absorbed silently into a sprint.
Consider it when:
Look elsewhere when:
For executives (30 seconds): This is a small, free (MIT) add-on for our Laravel admin panel that puts operational actions — approve, resend, sync — directly in front of the people doing that work, instead of buried in menus. The upside is speed: it lets us pilot an internal workflow in days rather than a sprint, and it is cheap to abandon if the pilot does not move the metric. The downside is maintenance: the package has not been updated since 2021 and has a tiny user base, so we should treat it as code we own, not a vendor relationship. Recommendation: approve as a time-boxed pilot on Nova 3, with a one-day compatibility spike and a named owner; do not adopt it for anything customer-facing, irreversible, or financially material.
For engineering: Small surface area — a Nova field that renders a button dispatching an existing Action class. Plan to vendor it, pin an exact commit, and own it; the source is the documentation. First task is a compatibility spike against our exact Nova version, plus verification that authorization and confirmation still behave server-side — a button visible to a user who cannot execute the action is an information leak, not just bad UX, so the explicit denial test is part of the deliverable, not a follow-up. Wire the button to the Action class rather than reimplementing logic, keep confirmText and authorizedToSee on the Action so button and dropdown stay identical, put anything non-trivial behind ShouldQueue, and watch for field semantics leaking into exports and sort handlers. Estimate half a day to integrate on detail pages, one day to harden and extend to index rows. If the spike fails — no render and dispatch within one day — we fall back to native Nova inline actions or a small in-house field, and we say so early rather than debugging a 2021 dependency in production.
For the operator team: The change is deliberately modest — the same actions you already run from the menu, now available as a labelled button on the record you are looking at. Nothing about permissions or confirmations changes, because the button calls the same action. We want your feedback on which two or three actions actually deserve a button, and we will measure whether it saves you time before we build anything bigger.
How can I help you explore Laravel packages today?