Product Decisions This Supports
- Enabling "proof of acknowledgement" workflows inside existing Filament admin panels — delivery confirmations, equipment checkout, internal policy sign-off, visitor/staff handoffs. These are authenticated, staff-facing moments where a drawn mark plus a timestamp adds meaningful audit weight to a record you already track.
- A build-vs-buy decision you can defer cheaply. The package is a thin wrapper over the open-source
signature_pad JS library. That means "adopting" it is not a one-way door: if it rots, replacing it with a wrapper field of your own plus a pinned copy of the underlying library is roughly an afternoon of engineering. The real product decision is "do we need a signature field at this stage?" — not "is this package the right long-term partner?"
- Scope definition by exclusion. Committing to this package forces the team to write down what the capability is not: no signer identity verification, no tamper-evident sealing, no multi-party routing, no retention guarantees. That written boundary is itself a product decision — it keeps "signature capture" off the legal/compliance roadmap until it belongs there.
- Roadmap sequencing for the accessibility sibling field. If any user is EU-based, a draw-only canvas does not meet the European Accessibility Act. That makes a "typed name or image upload" alternative a launch gate, not a stretch goal — a decision that affects scope and timeline now rather than after the first compliance review.
- An evidence-artifacts feature (user, IP, timestamp, content hash) as a natural companion. Capturing three extra columns at the moment of signature is what turns "a PNG file exists" into "this person was here at this time." That is a product upgrade to the record, not to the widget.
When to Consider This Package
Reach for it when all of these hold:
- You are already running Laravel + Filament and the field slots into an existing resource form with no new infrastructure.
- The signing moment is internal, authenticated, and staff-facing — an employee confirming a delivery, checking equipment out, acknowledging a policy.
- You need a drawn mark to accompany a record you already own, not a standalone legal document.
- You can accept a pilot risk posture: pin the version, wrap it in an internal class on day one, and run it against real users for a sprint before generalising to other forms.
Look elsewhere (or build the wrapper yourself) when any of these are true:
- Provenance does not check out. The Composer name (
coolsam/signature-pad) does not match the repository owner (bradwarwick), and stars and dependents are effectively zero. Verify the source URL, licence, and version tags before the first require; if they don't resolve cleanly, vendor the code or don't use it.
- The signature will be read by a lawyer — contracts, waivers, anything with evidentiary weight. This capability is acknowledgement evidence, not e-signature.
- You need identity verification, sealing, multi-party routing, or retention guarantees. None of those are in scope, and none are coming from a canvas widget.
- You are not on Filament. The Blade component covers non-panel surfaces, but the value proposition is much weaker without the Filament form field.
- Your user base includes EU residents and you cannot ship an accessible alternative (typed name / upload) at the same time — that is a launch blocker, not a backlog item.
- You need this to survive a Filament major upgrade unattended. Third-party form fields are the most fragile surface across major versions, and the failure mode is silent (the field simply disappears).
How to Pitch It (Stakeholders)
For executives — the one-page summary:
We have an opportunity to add a lightweight "proof of acknowledgement" step to existing internal workflows — delivery confirmations, equipment checkouts, policy sign-offs — at effectively zero build cost and near-zero switching cost. A community Filament package gives us a drawn-signature field today. The package itself is thin, low-maturity, and easily replaced; the underlying drawing library is open source and stable. We are not building e-signature, and we should not describe it as such to customers: this captures a drawn mark, a timestamp, and who was logged in. It does not verify identity, seal documents, or guarantee retention. That boundary is written down and will stay written down.
Recommended posture: pilot on one staff-facing workflow for a sprint. No contracts, no waivers, no customer-facing legal documents. Measure whether users complete the step without confusion, and confirm the signature survives form validation errors and mobile use before expanding.
For engineering — what to hold us to:
- Verify provenance before the first
require. A mismatched owner and zero dependents means ten minutes of composer show --all and a licence check before any code lands. If it doesn't resolve, vendor it or don't use it.
- Pin an exact version and wrap the field in an internal class on day one. Every form should depend on
App\Filament\Forms\Components\Signature, never the vendor FQCN. That one seam is what makes the package replaceable in an afternoon if it breaks or rots.
- Store a disk path, not base64. Decode and validate the payload on write (magic bytes + size cap, server-generated filename), save to a private disk, and serve via temporary URLs. A signature is PII.
- Capture the evidence, not just the pixels. User ID, IP, timestamp, and a
sha256 of the PNG belong in a signatures morph table on the same transaction. Three columns now, tamper detection later.
- Smoke-test the failure that will burn us: draw, trigger a validation error on another field, confirm the signature survives the round trip. Canvas fields silently lose their value on deferred-binding round trips, and we will discover that at a loading dock if we don't test it in CI.
- Gate launch on the accessibility sibling field. If any user is EU-based, a typed-name or upload alternative is a requirement. Build it as a sibling field that writes to the same column contract so downstream code doesn't care which path was used.
- Add a named owner and a review ticket for every Filament major. The failure mode is that the form renders and the field is quietly absent — not an exception. A
assertFormExists('signature') smoke test in CI turns that into a red build instead of a silent data gap.
- Language discipline is a deliverable. Never call this "e-signature" in customer-facing material. Writing that sentence next to the field costs nothing; the compliance conversation after launch costs a quarter.