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.
How to get here
Section titled “How to get here”| Caller | Path |
|---|---|
| Admin | Resellers → click row → Branding tab. Used to enable / disable rebranding for that reseller, and to view what they’ve configured. |
| Reseller | Settings → 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.
Layout
Section titled “Layout”The Branding page has five sections:
| Section | Fields |
|---|---|
| Identity | Company name, logo (PNG/JPG/SVG/WEBP, ≤ 2 MB), primary color. |
| Login page | Background image, tagline, footer text. |
| Feature boxes | Three optional callout boxes on the login page (title + description each). |
| Custom domain | Hostname (e.g. panel.example.com) + Let’s Encrypt SSL issuance. |
| Preview | Live preview of how the login page will look with current settings. |
Identity
Section titled “Identity”| Field | Notes |
|---|---|
| Company Name | Shown in the sidebar header and on the login page. Falls back to the reseller’s name if empty. |
| Logo | Replaces 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 Color | Hex 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.
Login page customization
Section titled “Login page customization”| Field | Effect |
|---|---|
| Background image | Replaces the default gradient on the left half of the login page. Recommended size: 1920×1080. |
| Tagline | Subtitle shown under the company name on the login page. Falls back to "High Performance ISP Management Solution" if empty. |
| Footer text | Single-line copyright / contact text at the bottom of the login page. |
Feature boxes
Section titled “Feature boxes”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.
Custom domain
Section titled “Custom domain”A custom domain lets your end-customers reach the panel at panel.yourcompany.com instead of the default panel URL. Setup is three steps:
-
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. -
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. -
Click “Request SSL” — the panel runs
certbotvia the host nsenter, obtains a Let’s Encrypt cert using the webroot challenge, generates an nginx server block for the domain, mounts/etc/letsencryptinto 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.
Security of the custom domain field
Section titled “Security of the custom domain field”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.
What end-users see
Section titled “What end-users see”| Page | What’s branded |
|---|---|
| Login page | Company name, logo, primary color buttons, background image, tagline, footer, feature boxes. |
| Sidebar (after login) | Company name / logo, primary color accents. |
| Browser tab title | Company name. |
| Invoices | Reseller’s company name + address (when “Reseller is invoice issuer” is enabled in Billing Settings). |
| WhatsApp / SMS templates | Company name token replaces {COMPANY}. |
| PDF receipts | Logo + 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.
Admin-only branding fields
Section titled “Admin-only branding fields”Some fields can only be edited by admins, not by the reseller themselves:
| Field | Reason |
|---|---|
rebrand_enabled | Toggling rebranding on/off — admin decision. |
custom_domain | Could be edited by reseller via UI, but admin can override to force-clear if abused. |
favicon | Global 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.
Common workflows
Section titled “Common workflows”Setting up branding for the first time
Section titled “Setting up branding for the first time”- Admin: Resellers → click reseller → Branding tab → toggle Rebrand Enabled on. Save.
- Reseller (in their own panel): Settings → Branding. Upload logo, pick primary color, write tagline. Save.
- Click Request SSL if a custom domain is also needed — make sure DNS is already pointing at the panel.
- Verify: open the panel URL in a private/incognito window. You should see the new branding immediately.
Migrating from default → custom domain
Section titled “Migrating from default → custom domain”- Add the DNS A record in your registrar —
panel.example.com → <panel-ip>. - Wait 5–10 minutes for DNS propagation. Verify with
dig panel.example.comfrom a separate machine. - In Settings → Branding → Custom Domain, enter
panel.example.com. Save. - Click Request SSL. Watch the SSE stream — successful issuance ends with
🎉 SSL certificate installed!. - Tell your end-customers to switch their bookmarks. The old URL keeps working unless the admin disables the default vhost.
Removing branding
Section titled “Removing branding”- Settings → Branding → click Delete under the logo to remove it from disk.
- Clear the tagline, footer, feature box fields. Save with empty values.
- 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.
Permissions
Section titled “Permissions”| Permission | Effect |
|---|---|
Reseller rebrand_enabled = true (admin sets) | Branding tab appears in the reseller’s panel. |
settings.view | View the Branding tab. |
settings.edit | Save branding changes, request SSL. |
Related pages
Section titled “Related pages”- Reseller Onboarding — when to enable rebranding on a new account.
- Sub-Resellers — sub-resellers can have their own branding independent of the parent.
- Settings → System Branding — system-wide defaults (used when reseller-specific branding is empty).
- IP Restriction — locking the branded login URL to specific source IPs.
- Partner / Read-Only Role — branding still applies for partner logins.