White-label checklist

Everything needed to make Numeralens look and feel like your own product.

Scope reminder. White-labelling means rebranding the dashboard for the end product you are building — your SaaS, your client's portal, your internal tool. It does not permit reselling Numeralens itself as a template, boilerplate or starter kit; see LICENSE.md, section 3.

1. Identity

  • src/config/branding.ts — company name, logo path, colours, currency, locale, date format, fiscal year start, landing route.
  • public/logos/ — replace northstar.svg with your mark; delete the demo file.
  • src/app/favicon.ico — replace.
  • .env.local / deployment env — NEXT_PUBLIC_APP_NAME.
  • package.json — name, version, description.
  • src/app/layout.tsx — the metadata title and description.
  • src/app/opengraph-image.png (1200×630) and opengraph-image.alt.txt — the link-share preview; replace with a screenshot of your product.

2. Content

  • src/app/help/page.tsx — FAQs, links and support pointers.
  • README.md and docs/ — replace or trim for your own team, or remove them from your deployed product entirely.

3. Scope

  • Turn off modules you are not selling in src/config/features.ts, or delete their route folders and navigation entries outright.
  • Trim the widget library in src/components/dashboard/widget-registry.tsx.
  • Adjust roles and permissions in src/config/roles.ts to match your tiers.

4. Data

  • Point at your backend (api-integration.md).
  • Decide what happens to src/mock/ — keeping it gives you an offline demo mode for sales; deleting it (plus src/app/api/ and the mock adapter) trims the bundle.

5. Auth

  • Set AUTH_SECRET (openssl rand -base64 32).
  • Replace the demo accounts in src/lib/auth/users.ts with your user directory or identity provider (authentication.md).
  • Restyle /login (src/app/login/) if needed.

6. Ship

  • npm run lint && npm run typecheck && npm test && npm run build
  • Deploy (deployment.md).

Multi-tenant branding

For per-tenant themes, fetch the tenant's branding record after sign-in and feed it to BrandingProvider instead of the localStorage default. The provider takes a plain object; nothing else in the UI needs to change.