White-Label Issues

Fix custom domain, branding, and enterprise licensing problems.

Domain Shows "Invalid Configuration" in Vercel

DNS hasn't propagated yet, or the CNAME target is wrong.

Check DNS

nslookup crm.yourdomain.com 8.8.8.8

This should resolve to the Vercel CNAME target (e.g., cname.vercel-dns.com), NOT cname.leenops.com.

Fix

  1. Go to your DNS provider (registrar)
  2. Ensure the CNAME record points to the exact target shown in Vercel
  3. Wait up to 48 hours for global propagation
  4. In Vercel, click Refresh on the domain card

Login Page Shows Leenops Branding Briefly

A brief flash of default branding can happen on first visit.

Expected Behavior

  • First visit: neutral spinner for ~100ms while branding loads
  • Subsequent visits: instant from sessionStorage cache

If It Persists

  1. Clear browser cache and cookies
  2. Check browser DevTools → Network tab for failed /api/white-label/resolve calls
  3. Verify your custom domain is set in Settings → Administration → White Label → Domain

Admin Dashboard Shows Empty Table

  1. Verify your email is in the PLATFORM_ADMIN_EMAILS environment variable
  2. Check the browser Network tab — the API should return 200
  3. Ensure white_label_configs table has rows in the database

Trial Paywall Blocks Provisioned Workspace

Check these database values:

SELECT status, provisioned_by
FROM workspace_subscriptions
WHERE workspace_id = 'your-workspace-id';
  • status must be 'active'
  • provisioned_by must be 'admin'

If either is wrong, re-provision the license via the Admin Dashboard.

Custom CSS Not Applying

CSS is sanitized before injection. Stripped items include:

  • @import rules
  • url() with non-https protocols
  • javascript: URLs
  • expression() and behavior: (IE-specific)

Fix

Use only inline CSS rules with https: URLs:

/* ✅ Good */
.my-class { color: #2563eb; background: url('https://example.com/bg.png'); }

/* ❌ Bad — will be stripped */
@import url('...');
.my-class { background: url('http://...'); }

License Compliance Alerts

The daily compliance cron checks member count vs. licensed seats.

If You Receive a Violation Alert

  1. Go to Admin Dashboard → White Label
  2. Find the workspace
  3. Click Provision License and increase seats
  4. Or reduce workspace members to fit within the license

Auto-Expiry

Licenses past their license_end date are automatically set to expired. To renew:

  1. Go to Admin Dashboard → White Label
  2. Find the workspace
  3. Click Provision License with a new expiry date

Users Can't Register on the Custom Domain

This is by design. Self-serve signup is disabled on white-label domains — /register redirects to /login and the trial link is hidden. White-label workspaces are invite-only:

  1. Go to Settings → Administration → Members
  2. Invite the user by email — the invite link points to your custom domain

Login Page Immediately Redirects Somewhere Else

A Login Redirect URL is configured (the SSO escape hatch). Anyone visiting /login on your domain is sent to that URL.

To restore the branded login form, clear Settings → Administration → White Label → Login Page → Login Redirect URL and save.

A Sign-in Button Is Missing

Sign-in methods are configurable per workspace. Check Settings → Administration → White Label → Login Page → Sign-in Methods — only the enabled providers render on the login page.

Support Requests Still Reach Leenops

The workspace has no Support Email configured. Without it, in-app requests fall back to Leenops's support pipeline. Set it in Settings → Administration → White Label → General → Support Email.

Documentation Tile Missing from the Help Panel

On white-label workspaces the Leenops docs are always hidden. The Documentation entry only appears when a Documentation URL is set — add yours in the General tab.