Skip to content

Branding

Purpose. Theming used to be per browser only, so a reseller or a company could not put its own name on the console its customers and staff sign in to. Settings → Branding sets a name, a logo and an accent colour that every visitor of both applications sees, sign-in pages included.

Behaviour.

  • Name — shown beside the logo in the admin panel’s sidebar and the webmail’s header, and above Sign in on both sign-in pages. Empty means the product’s own name. Up to 60 characters.
  • Logo — replaces the product’s mark in the same places. PNG, JPEG or WebP, up to 200 KB; the type is read from the file’s bytes, not its name or claimed type, and SVG is refused because an SVG is a document that can carry script. Shown small, so a square image works best. It is served from /api/v1/branding/logo?v=<last change>, cached for a year, with a new URL after every change.
  • Accent colour — one of the theme menu’s six colours, or Default (the product’s blue). The screen offers only those six; PUT /branding itself takes any accentHue from 0 to 359, or null for the default. It is the starting accent for every visitor; anybody who picks their own accent in the appearance menu keeps theirs. Default in that menu returns a browser to following the server.
  • Who sees it, who sets it. GET /branding is anonymous — the sign-in pages need it before anybody is signed in, and it carries only what is on screen anyway. Changing it is owner and admin only (PUT /branding, PUT /branding/logo, DELETE /branding/logo), and every change is audited (branding.update, branding.logo.set, branding.logo.clear).

Configuration. None beyond the screen. The record is the branding table, one row per install, so mailctl backup and restore carry it with the database.

Limits & edge cases.

  • A browser that saved the product’s blue before this feature existed (every browser that changed light/dark mode did) is read as having made no choice, so the server’s accent shows through. A visitor who had deliberately picked blue and wants to keep it against a different server accent picks it again.
  • The browser tab’s title and the installed web app’s name are not changed; they still say MailDock.
  • Branding is per server, not per domain: every domain on the server shares one look.