Skip to content

Custom Branding

Custom branding lets a reseller publish their own white-labeled login page — their logo, their colors, their domain — without the end-customer ever seeing the ProxPanel brand. The admin enables branding per-reseller (rebrand_enabled flag); the reseller fills in the details from their own panel.

CallerPath
AdminResellers → click row → Branding tab. Used to enable / disable rebranding for that reseller, and to view what they’ve configured.
ResellerSettings → Branding (visible only when admin has set rebrand_enabled=true on their account).

If you’re a reseller and the Branding tab doesn’t appear, your admin hasn’t enabled rebranding for your account. Contact them or info@proxrad.com.

The Branding page has five sections:

SectionFields
IdentityCompany name, logo (PNG/JPG/SVG/WEBP, ≤ 2 MB), primary color.
Login pageBackground image, tagline, footer text.
Feature boxesThree optional callout boxes on the login page (title + description each).
Custom domainHostname (e.g. panel.example.com) + Let’s Encrypt SSL issuance.
PreviewLive preview of how the login page will look with current settings.
FieldNotes
Company NameShown in the sidebar header and on the login page. Falls back to the reseller’s name if empty.
LogoReplaces the company-name text in the sidebar when uploaded. Stored as /uploads/reseller_{id}_logo_{uuid}.{ext}. Max 2 MB; PNG / JPG / JPEG / SVG / WEBP.
Primary ColorHex code (e.g. #2563eb). Applied to buttons, links, and accent areas via CSS variables.

To remove the logo, click Delete below the upload — the file is unlinked from disk and the field cleared.

FieldEffect
Background imageReplaces the default gradient on the left half of the login page. Recommended size: 1920×1080.
TaglineSubtitle shown under the company name on the login page. Falls back to "High Performance ISP Management Solution" if empty.
Footer textSingle-line copyright / contact text at the bottom of the login page.

The login page can render up to three “feature boxes” (icon + title + 1-line description) on the right side. Useful for advertising:

  • “24/7 Support — call +961 1 234 567”
  • “Fast Setup — connect within 60 minutes”
  • “Fiber to the Home — up to 1 Gbps”

A global toggle “Show feature boxes” hides them entirely without losing the saved text — handy if you want a clean login page on certain themes.

A custom domain lets your end-customers reach the panel at panel.yourcompany.com instead of the default panel URL. Setup is three steps:

  1. Enter the hostname in Settings → Branding → Custom Domain (e.g. panel.example.com). The format is enforced server-side — lowercase letters, digits, hyphens, dots; no protocol prefix, no path. See the security note below.

  2. Point DNS at the panel. Add an A record: panel.example.com → <your-panel-public-ip>. The reseller can see whether the server has a public IP in the same tab.

  3. Click “Request SSL” — the panel runs certbot via the host nsenter, obtains a Let’s Encrypt cert using the webroot challenge, generates an nginx server block for the domain, mounts /etc/letsencrypt into the frontend container, and restarts nginx. Output streams live as Server-Sent Events so you can see if anything fails (most common cause: DNS not propagated, or port 80 blocked).

After the issuance succeeds, https://panel.example.com/ serves the panel with a valid SSL cert. The reseller’s logo / colors / login page are applied automatically based on the hostname → reseller-ID lookup at request time.

The custom domain is fed into certbot via exec.Command as an argv element, not interpolated into a shell string. Strict validation rejects anything that’s not a plain hostname (a-z0-9.-, minimum 2-label, max 253 chars, no IP literals, no unicode). The validation lives in validCustomDomain() and is applied both on save and again right before calling certbot.

This guard exists because a previous version interpolated the domain into sh -c "... -d $domain --email $email" — meaning a reseller setting custom_domain = "evil.com; rm -rf /; #" could RCE the host. The current code never lets the domain touch a shell.

PageWhat’s branded
Login pageCompany name, logo, primary color buttons, background image, tagline, footer, feature boxes.
Sidebar (after login)Company name / logo, primary color accents.
Browser tab titleCompany name.
InvoicesReseller’s company name + address (when “Reseller is invoice issuer” is enabled in Billing Settings).
WhatsApp / SMS templatesCompany name token replaces {COMPANY}.
PDF receiptsLogo + company name in the header.

The customer-portal (the page subscribers log into) inherits the same branding when accessed via the reseller’s custom domain.

Some fields can only be edited by admins, not by the reseller themselves:

FieldReason
rebrand_enabledToggling rebranding on/off — admin decision.
custom_domainCould be edited by reseller via UI, but admin can override to force-clear if abused.
faviconGlobal system setting — applies to whole panel, not per-reseller (yet).

If you need a feature that’s not in this list, file a request at info@proxrad.com.

  1. Admin: Resellers → click reseller → Branding tab → toggle Rebrand Enabled on. Save.
  2. Reseller (in their own panel): SettingsBranding. Upload logo, pick primary color, write tagline. Save.
  3. Click Request SSL if a custom domain is also needed — make sure DNS is already pointing at the panel.
  4. Verify: open the panel URL in a private/incognito window. You should see the new branding immediately.
  1. Add the DNS A record in your registrar — panel.example.com → <panel-ip>.
  2. Wait 5–10 minutes for DNS propagation. Verify with dig panel.example.com from a separate machine.
  3. In Settings → Branding → Custom Domain, enter panel.example.com. Save.
  4. Click Request SSL. Watch the SSE stream — successful issuance ends with 🎉 SSL certificate installed!.
  5. Tell your end-customers to switch their bookmarks. The old URL keeps working unless the admin disables the default vhost.
  1. Settings → Branding → click Delete under the logo to remove it from disk.
  2. Clear the tagline, footer, feature box fields. Save with empty values.
  3. To clear the custom domain, set the field to empty and Save. The Let’s Encrypt cert stays on disk until next renewal; it can be removed by an admin via SSH if desired.
PermissionEffect
Reseller rebrand_enabled = true (admin sets)Branding tab appears in the reseller’s panel.
settings.viewView the Branding tab.
settings.editSave branding changes, request SSL.