misaf/vendra-user-profile
misaf/vendra-user-profile is a Laravel package for adding user profile management to Vendra applications. It helps organize profile data and integrate user profile features with minimal setup, giving developers a convenient foundation for profile-related workflows.
misaf/vendra. It ships as one module in a version-aligned package graph, so adopting it is effectively a vote for the Vendra platform. It is not a decision you can make module-by-module in isolation — that framing belongs in the roadmap review, not the backlog.UserProfileRelationManagers extension registry; Address, Phone, Document, and Verification are separate optional packages that depend on it. That gives a PM a clean dependency map: profile → addresses (checkout/shipping) → phone (2FA/notifications) → documents/verification (KYC, payouts, regulated flows). Profile is a prerequisite gate, which is why it should land early even though it demos poorly.module_enabled, features_enabled, features_discover) with global switches applied before persisted tenant values. That is a real product lever: profiles can be sold as a tier, soft-launched per tenant, or dark-launched before GA, without a redeploy.CustomersCluster immediately after Users, with policy-backed permissions per action. Product call: does support/ops get to edit customer profiles at all, and which fields? The package gives the mechanism; the policy enum is where the PM's answer gets encoded.profiles table with a hasOne from User, so PII sits in a bounded, deletable place — which materially simplifies GDPR erasure, analytics exports, and "what do we hand to support?" decisions. It also constrains the product: one default profile per user, enforced by an observer plus a unique DB index. Any persona/multi-identity feature (B2B contacts, seller vs. buyer identities) is custom work, not configuration. Decide that before it appears in a sales conversation.TenantResolver, not a config toggle, and the module builds whether or not a tenant provider is installed. Useful for the "single-tenant now, multi-tenant later" roadmap question — but note the migration path: enabling tenancy on an existing table requires an explicit artisan backfill (vendra-tenant:enable), i.e. a scheduled ops step, not a free flip.Consider it when:
Look elsewhere when:
TenantResolver coupling, and Filament v5 conventions make this a poor fit for a general Laravel app; a plain hasOne profile model plus a form request is a day of work and zero lock-in.misaf/vendra and wait for a release. Any local fork is a permanent divergence cost.Diligence the PM should insist on before signing: pin the version, add a regression suite over profile read/write and the default-profile invariant, confirm upgrade ownership (who runs composer update across the graph and re-tests), and get the vendor to state their versioning and deprecation policy in writing.
To executives: This is not a library purchase; it's a module inside a platform decision. On its own it is unremarkable — 1 GitHub star, a read-only mirror, release notes that are a diff link. Its value is entirely contextual: if we standardize on Vendra, user profiles, admin screens, granular permissions, three locales, and multi-tenant scoping arrive already built and tested, and we redirect one to two sprints to revenue work. The risk we are accepting is single-vendor concentration and lockstep upgrades — manageable, but it should be priced into the platform decision, not discovered later.
To engineering: Adopt it as a bounded domain module, not as a starting point to fork. Keep profile data in the package table; keep User about authentication. Put validation in form requests, updates in a small action class, and authorize every write with a policy — route middleware alone is not enough. Eager-load profile on any user listing to avoid the N+1 that Blade loops invite. Extend by binding a custom profile model or contributing relation managers through the registry; do not edit vendor migrations or published views. Expect strict conventions — declare(strict_types=1), final classes, PHPDoc generics, Pest coverage, Filament v5 namespaces, translation key parity across en/de/fa — and hold contributions to them. Upgrades are graph-wide: review the compare diff, run config:clear, re-run migrations, and keep published config/migrations/views in version control so overrides don't drift.
The ask: Approve a one-sprint spike against the Vendra graph on a real tenancy configuration before committing. The deliverable is not a demo — it's an answer to one question: does this platform save us more than the lock-in costs? If yes, profiles become a checkbox. If no, we build the 200-line version ourselves and keep our options.
How can I help you explore Laravel packages today?