murillo-cardoso-by-hasan-ahani/filament-otp-input
A Filament form component for entering one-time passwords and PIN codes with separate digit boxes. Add a clean, customizable OTP input field to admin panels and forms, with smooth keyboard navigation and paste support.
Architecture fit. This is a single-purpose Filament form component that wraps OTP/code entry into a Livewire-compatible field. It is a leaf dependency: it depends on Filament (and transitively Laravel/Livewire) but nothing depends on it. That makes it architecturally cheap to adopt and cheap to remove — a key consideration given the weak supply-chain signals (0 stars, 0 dependents, single release, score 0.1). It fits only if we are already on Filament v3.x and need a segmented multi-digit input for 2FA, phone verification, or step-up auth inside an admin/panel surface. It does not fit if the OTP UI lives in a customer-facing Blade/Inertia frontend outside Filament.
Integration feasibility. High in effort terms — it is a drop-in form field, typically registered as a Filament\Forms\Components\Field subclass and used inside a resource form or a custom Livewire page. There is no service provider surface area to speak of, no migrations, no config publishing, no queue or storage footprint. The real feasibility question is not mechanical integration but verification: with a 0-star, 0-dependent repository we must treat the code as unaudited. We would need to read the field class, confirm it does not exfiltrate the OTP value or phone number to any external endpoint, and confirm it does not depend on a CDN-hosted JS asset.
Technical risk.
murillo-cardoso-by-hasan-ahani/... does not match the repository owner Unesc-PMP/.... Split/transferred ownership on an already-obscure package is a red flag for provenance and for future composer update resolution.inputmode="numeric" / autocomplete="one-time-code" gaps, and WCAG issues (focus management, screen reader announcement of digit count). With no test suite visible and no users, assume none of this is validated.Key questions.
^3.0) or pinned?one-time-code), numeric keyboards, and RTL? Accessibility is a hard requirement for auth surfaces.Stack fit. Qualifies only against a Filament v3 panel on Laravel 10/11 with Livewire 3. Confirm the composer require block before anything else; a filament/filament constraint that does not include our pinned minor is a stop sign. Because the package is a form field, it composes with existing Filament resources and custom pages without touching routing, middleware, or the auth guard.
Migration path. Greenfield only. There is no meaningful migration from an existing component — if we already have a working OTP field, keep it. If we do not, this is a prototype-tier starting point, not a foundation. Plan the adoption as "vendor and fork" rather than "require and forget": copy the field class into app/Filament/Forms/Components/ (or a private packages/ path) so we own the maintenance burden explicitly, rather than taking an unmaintained transitive dependency into production. If we do install via Composer, pin to an exact version and commit the lockfile.
Compatibility. Two axes to check: (a) Filament major/minor and Livewire version, and (b) Tailwind build. Filament panels compile their own Tailwind; a component shipping prebuilt CSS that assumes Filament's default theme will drift on any custom panel theme. Verify in our actual panel, not a stock install.
Sequencing.
Maintenance. Effectively zero upstream maintenance. Budget for us to own the file. The practical cost is small (one field class plus a Blade view and some JS) but it is a permanent ownership line item, not a dependency we can outsource. Track it in the same backlog as our other vendored components so it does not silently rot through a Filament upgrade.
Support. None. No maintainer response path, no issue history of substance, no community. Any defect becomes our defect on discovery. Escalation is "read the source," which is fine at this size and unacceptable if the component grows.
Scaling. Irrelevant in the horizontal sense — this is a render-time UI component with no server-side work. The scaling concern is entirely in the auth flow around it: OTP issuance rate, per-user and per-IP attempt throttling, and SMS/email provider quotas. Those are ours regardless of which input widget we use. Six-digit entry is a fixed, tiny payload; there is no performance dimension here.
Failure modes. (1) Filament major upgrade breaks the field registration — symptom is a missing or unstyled input, caught by a render test if we write one. (2) Bundled asset 404s on a custom theme, degrading the input to an unstyled text box. (3) Autofill/paste regressions on iOS/Android causing user-visible failure in exactly the flow where users are already frustrated. (4) The dangerous one: teams conflating "we have an OTP input" with "we have OTP auth," shipping without expiry, attempt limits, or constant-time comparison. That is a security failure mode attributable to the component's framing, not its code.
Ramp-up. Very low for any Filament-fluent engineer — an hour to read the class and render it. The real ramp-up is the surrounding auth design, which is days, and which this package does not reduce. Net: it saves perhaps half a day of UI work and adds an indefinite small maintenance liability. Justified only as an internal prototype accelerator or as an explicitly forked component; not justified as a production dependency on a 0-star, 0-dependent, single-release package for a security-adjacent surface.
How can I help you explore Laravel packages today?