rad-themes/client-portal
rad-themes/client-portal is a Laravel package that provides a customizable client portal theme with ready-to-use Blade views, routes, and UI components for building customer-facing dashboards and account areas.
The first thing to internalise is the licensing constraint: Statamic Pro is a hard requirement, not a nice-to-have. Portals depend on multiple client accounts plus a dedicated client role, and Statamic Core ships neither. If you are on Core, the install will appear to succeed and then fail at the point where you try to create or assign a client — budget the Pro licence into the project before you start.
Minimum setup path:
users / roles setup supports a client role. If you already run a bespoke role system, reconcile it now rather than after clients have registered./portal (or whatever prefix you configure) and go through the registration + login flow yourself before inviting anyone.The first real use case is almost always: create a project, hang a few phases and modules off it, upload a file, and invite one client. That single end-to-end pass exercises the registration, role, permission and file-download paths, which are the four places this package touches the rest of your app.
Treat the portal as a separate front-end inside your app. The addon owns /portal routing and view rendering; your job is to override templates, not to rebuild them. Publish the views and edit copies rather than fighting the vendor files, so upgrades stay cheap.
Role-based gating. Everything in the portal is scoped to the client role. If you have staff who need to view the portal as a client would ("log in as"), use Statamic's impersonation rather than granting staff the client role — mixing the two blurs your permission model fast.
Model the project data in Statamic, render it in the portal. Projects → phases → modules → files is a hierarchy you will want to query from your own code (dashboards, emails, notifications). Hook into the addon's events/entry lifecycle rather than polling. Typical integrations:
Escaping discipline in custom templates. From 1.1.1 the addon escapes portal titles, project status, phase/module titles, descriptions, button labels, file names, and the login heading/intro. If you override views, keep using {{ }} in Antlers and {{ $x }} in Blade for anything a client controls. The moment you reach for {!! !!} or {!! $x !!} to "fix" a formatting issue, you have reintroduced the exact bug this release patched.
Config over code for wording. Login heading and intro are plain-text configurable fields — use them for branding instead of forking the login view.
/portal — a stored XSS across the trust boundary between untrusted client input and privileged staff sessions. That is a serious one.php artisan config:clear hasn't been run after editing the addon config.How can I help you explore Laravel packages today?