visualbuilder/user-consent
A Filament package for managing user consent: create and edit consent options, apply them to user models, collect consent at registration, email copies, request re-consent when options change, and give users and admins pages to review given consents.
Architecture fit. This is a Filament panel plugin, not a standalone Laravel consent library. Its value is concentrated in Filament resources, panel pages, and Livewire components: consent-option CRUD, a registration-time consent form, a "My Consents" page for users, and an admin listing of consents across all users. That is roughly a phase-one privacy feature's worth of UI we would otherwise have to scope and build. Outside Filament 4.x/5.x, the package degrades to Eloquent models plus migrations and we rebuild every screen ourselves β at which point it is a reference implementation, not a dependency.
The decisive constraint is panel topology. The registration consent form and "My Consents" page ship as Filament panel pages, which means our end users must be served through an authenticated Filament panel with registration enabled. If we run Filament as a staff-only back office, half the feature is unreachable without restructuring. This is a product-architecture decision disguised as a package evaluation and should be validated in the first hour of a spike.
Integration feasibility. Mechanically straightforward: Composer install pinned to the Filament major, publish migrations/config/views, migrate, define consent options, wire the form into registration. The changelog evidences an actively maintained 5.x line β a configurable consent page component (5.0.4), an in-place submit-button spinner (5.0.5), and a back-button 403 No required consent fix (5.0.6) β with 22 tests passing at 5.0.0. Recent releases read as polish rather than stabilisation, which is a healthy signal but also indicates the surfaces are still being discovered by the maintainer, not just by us.
Two friction points to price in. First, naming drift: the package is visualbuilder/user-consent, the namespace is Visualbuilder\FilamentUserConsent, the config key is filament-user-consent, and the publish tags vary by asset. Harmless in isolation, but it slows source-tracing and will bite whoever owns upgrades. Second, documentation drift: the published config file in the README is an empty array while the same README documents a pages.consent_option_form_builder key. We must read source, not the snippet, to confirm the actual config surface.
Technical risk. Ranked by what would actually hurt us:
User model and the registration flow β our two highest-traffic, highest-consequence paths.Key questions.
Stack fit. Accept only if the target is Filament 4.x/5.x on Laravel 10β12 and PHP 8.2+, on the branch matching our Filament major. The 5.x line introduces Livewire 4, so audit our Livewire version and any other Livewire-heavy packages before adopting 5.x. If we are on Laravel 10, plan for the 4.x line and accept the shorter upgrade runway explicitly rather than discovering it at the next Filament major.
Migration path. Publish and own the migrations rather than relying on package-shipped defaults: vendor:publish --tag="user-consent-migrations", then edit before php artisan migrate. Specifically, confirm the consents table is append-only and add indexes on user_id and consent-option identifiers up front β retrofitting indexes on an audit table under production load is avoidable pain. Seed consent options via migration or seeder rather than hand-entry in the admin UI, so policy text is reviewable in pull requests. Publish the config and views, and set the page class via pages.consent_option_form_builder from day one even if we use the default β it is our supported seam for customising layout and chrome without redefining routes.
Compatibility. Treat Filament 6 as a scheduled migration project, not a routine upgrade. Pin the package version in composer.json and add a Dependabot/Renovate rule that surfaces Filament major bumps as a paired ticket, so we are never surprised by being stranded. Because the dependent count is zero, also verify behaviour on our exact PHP minor during the spike, not just at install β nobody else is exercising that combination.
Sequencing. A 1β2 sprint spike with a hard go/no-go gate:
Maintenance. We are the maintainers in practice. Assign a named owner responsible for tracking Filament majors, re-testing on Filament/Laravel/PHP upgrades, and holding the fork decision. Budget a recurring line item β realistically a few days per Filament major release β rather than treating install as one-and-done. The empty default config means there are almost no upstream guardrails; our own configuration is the product.
Support. No SLA, no vendor, no community depth at four stars. The escalation path is source code plus a maintainer's issue tracker we do not control. Mitigate by vendoring or forking early if the spike succeeds β forking after six months of local modifications is materially more expensive than forking at adoption.
Scaling. Two axes. Data: consent records grow one row per user per option per re-consent; index deliberately and plan for how the admin listing behaves at scale β an unpaginated "all users' consents" view is a predictable performance cliff. Delivery: consent emails must be queued, not sent inline on the registration request, or registration latency and timeout risk become consent-capture failures. If an emailed receipt forms part of our evidence trail, SMTP and queue health graduate from infrastructure concerns to compliance concerns and should be monitored as such.
Failure modes. The ones worth instrumenting for:
Ramp-up. Two distinct audiences. Engineers need roughly half a day of source reading before they are productive, because the README stops at installation and the changelog is the only behavioural documentation β budget that as onboarding cost, not ramp-up waste. Administrators need a short runbook covering how to draft an option, what triggering re-consent does to existing users, and how to read the consents listing; without it they will treat the admin CRUD as a free-text policy editor, which is precisely the governance failure we are trying to avoid. On a team of two to three engineers, expect one named owner plus a backup, and write the runbook during the spike while the edge cases are still fresh rather than after adoption.
How can I help you explore Laravel packages today?