New Feature: White-Label & Client Portal
Priority: 🟢 Post-MVP
Area: Product / Multi-Tenancy
Competitive Reference: Agency-focused platforms (SEMrush Agency, Jasper for Teams), Predis.ai (multi-brand management)
Why This Matters
Digital marketing agencies want to present AI-generated deliverables under their own brand to clients, not under “Leadmetrics.” A white-label client portal lets agencies:
- Share deliverables with clients for review/approval under the agency’s brand
- Give clients read-only dashboards showing their marketing performance
- Maintain the agency’s professional image
What Leadmetrics Has Today
- Multi-tenant architecture — each agency tenant is separate
- Client context page — stores client business info
- DM portal (
apps/dm/) — internal reviewer portal for agency staff - Approval workflow — content flows through DM review → client review stages
- No client-facing portal — clients cannot log in to view their own content
- No white-label — all apps show Leadmetrics branding
- No custom domain — all tenants use
{subdomain}.leadmetrics.app
Proposed Implementation
Phase 1 — Client Portal Access
- Add
clientUserrole to the auth system - Client users can log in and see:
- Approved deliverables pending their review
- Published content
- Performance reports
- AI chat (client-facing, limited tools)
- Client users CANNOT see:
- Draft content, agent runs, costs, strategy internals
- Other tenants or agency-level settings
Phase 2 — White-Label Branding
Add to Tenant model:
model TenantBranding {
id String @id @default(cuid())
tenantId String @unique
agencyName String // "Acme Digital Agency"
agencyLogo String? // URL to uploaded logo
primaryColor String // Hex color
secondaryColor String? // Hex color
faviconUrl String?
customDomain String? // "portal.acmedigital.com"
emailFromName String? // "Acme Digital"
emailFromDomain String? // "acmedigital.com"
tenant Tenant @relation(fields: [tenantId], references: [id])
}Dashboard applies branding dynamically:
- Logo in navbar
- Primary/secondary colors via CSS variables
- Agency name in page titles and emails
- Favicon override
Phase 3 — Custom Domain
- Tenant sets
customDomain(e.g.,portal.acmedigital.com) - DNS CNAME →
proxy.leadmetrics.app - Nginx/Caddy auto-provisions SSL via Let’s Encrypt
- Dashboard renders with the custom domain and agency branding
Phase 4 — Branded Reports & Emails
- Report PDFs generated with agency logo and colors
- All notification emails sent from agency’s email domain (via SendGrid/SES domain verification)
- Approval request emails show agency branding
Related
- Performance Reporting Dashboard — client portal shows reports
- AI Chat Executor Subagent — client executor tools for the portal