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 /brandingitself takes anyaccentHuefrom 0 to 359, ornullfor 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 /brandingis 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.