Skip to content

Branding config

The admin dashboard and customer-facing UI elements are brand-configurable per tenant.

Terminal window
TAPPASS_BRAND_NAME="Acme Governance"
TAPPASS_BRAND_LOGO_URL="https://cdn.acme.com/logo.svg"
TAPPASS_BRAND_PRIMARY="#003366"
TAPPASS_BRAND_EMAIL_FROM="governance@acme.com"
TAPPASS_BRAND_SUPPORT_URL="https://support.acme.com"

These are also configurable at runtime via POST /api/v1/admin/branding — see tappass/tappass/api/routes/admin/branding.py for the schema.

  • Dashboard logo, page title, accent colour, favicon
  • Transactional email templates (use {{ brand_name }} variables)
  • CLI output: tappass --help shows OEM name
  • Customer-facing invoice / receipt templates
  • HTTP API surface — the endpoints, schemas, and headers stay TapPass-branded internally. OEM partners can proxy through their own API gateway if they need rebranded URLs.
  • Error messages in audit events — these have a stable format for compliance reasons.

Each tenant gets its own branding config. The same TapPass cluster can host:

  • Tenant acme with Acme branding
  • Tenant globex with Globex branding
  • Tenant tappass-direct with TapPass branding (our direct customers)

The admin UI detects tenant from subdomain (acme.app.tappass.ai, globex.app.tappass.ai, app.tappass.ai).

  • SVG logo (light and dark variants)
  • Primary + secondary brand colours (hex)
  • Favicon (SVG preferred, PNG 32×32 fallback)
  • Email from-address (must be a domain they own; they set up DKIM + SPF)
  • Terms of service URL
  • Privacy policy URL
  • Support URL
  • Preview tenant in staging under their subdomain
  • Email template rendering tested with live recipient (not just screenshot)
  • Invoice template rendered with a realistic amount + VAT
  • Logo doesn’t clash with dashboard nav on either theme
  • Partner has signed off on a walkthrough