White Label Configuration
White Label Configuration
Section titled “White Label Configuration”This guide covers white-labeling Querri with custom branding, logos, colors, domains, and support contact information.
Overview
Section titled “Overview”Querri supports extensive white-label customization allowing you to present the platform as your own branded solution. This includes:
- Custom logo and favicon
- Brand colors and themes
- Custom domain
- Support email and contact information
- Analytics and tracking
- Help widget customization
Accessing Customization Settings
Section titled “Accessing Customization Settings”Customization settings are available at:
https://app.yourcompany.com/settings/customizeRequirements: Admin access
Logo Customization
Section titled “Logo Customization”Application Logo
Section titled “Application Logo”Via Environment Variable
Section titled “Via Environment Variable”Set the logo URL in .env-prod:
PUBLIC_LOGO_URL=https://yourcompany.com/assets/logo.pngRestart services to apply:
docker compose restart web-appVia Database
Section titled “Via Database”Update organization branding in MongoDB:
db.organizations.updateOne( {_id: "org_xxxxxxxxxxxxx"}, { $set: { "branding.logo_url": "https://yourcompany.com/assets/logo.png" } })Logo Specifications
Section titled “Logo Specifications”Recommended dimensions:
- Main logo: 200x50px (4:1 aspect ratio)
- Square logo: 100x100px (for favicons)
- Maximum file size: 500KB
- Supported formats: PNG (with transparency), SVG, JPG
Display locations:
- Navigation header (top-left)
- Login page
- Email communications
- Share pages
Favicon
Section titled “Favicon”Set custom favicon in .env-prod:
PUBLIC_FAVICON_URL=https://yourcompany.com/assets/favicon.icoSpecifications:
- Format: .ico or .png
- Size: 32x32px or 64x64px
- Transparent background recommended
Dark Mode Logo
Section titled “Dark Mode Logo”Provide alternate logo for dark mode:
PUBLIC_LOGO_DARK_URL=https://yourcompany.com/assets/logo-dark.pngColor Theme Customization
Section titled “Color Theme Customization”Primary Brand Color
Section titled “Primary Brand Color”Configure primary brand color in .env-prod:
PUBLIC_BRAND_COLOR=#1e40afUsed for:
- Buttons and CTAs
- Links
- Active states
- Loading indicators
- Chart colors (primary)
Color Palette
Section titled “Color Palette”For advanced customization, edit the Tailwind configuration:
File: /web-app/tailwind.config.js
module.exports = { theme: { extend: { colors: { primary: { 50: '#eff6ff', 100: '#dbeafe', 200: '#bfdbfe', 300: '#93c5fd', 400: '#60a5fa', 500: '#3b82f6', // Main brand color 600: '#2563eb', 700: '#1d4ed8', 800: '#1e40af', 900: '#1e3a8a', }, }, }, },}Rebuild web-app after changes:
docker compose up -d --build web-appPredefined Themes
Section titled “Predefined Themes”Quick theme selection via database:
db.organizations.updateOne( {_id: "org_xxxxxxxxxxxxx"}, { $set: { "branding.theme": "professional" // professional, vibrant, minimal } })Available themes:
professional- Blue/gray palette (default)vibrant- Bright, energetic colorsminimal- Monochrome with accent colorcustom- Full custom color configuration
Custom Domain Setup
Section titled “Custom Domain Setup”DNS Configuration
Section titled “DNS Configuration”-
Add DNS Record:
Type: AName: analytics (or your subdomain)Value: YOUR_SERVER_IPTTL: 3600 -
Or use CNAME (if behind CDN):
Type: CNAMEName: analyticsValue: your-server.cloudprovider.comTTL: 3600
Update Environment Configuration
Section titled “Update Environment Configuration”Update .env-prod with your custom domain:
# Custom domainPUBLIC_BASE_URL="https://analytics.yourcompany.com"PUBLIC_DOMAIN="https://analytics.yourcompany.com"COOKIE_DOMAIN=analytics.yourcompany.com
# Update WorkOS redirectWORKOS_REDIRECT_URI=https://analytics.yourcompany.com/hub/auth/callbackSSL/TLS Certificate
Section titled “SSL/TLS Certificate”Option 1: Let’s Encrypt (Automated)
Section titled “Option 1: Let’s Encrypt (Automated)”Update Traefik configuration:
File: /traefik/traefik.yml
entryPoints: web: address: ":80" http: redirections: entryPoint: to: websecure scheme: https websecure: address: ":443" http: tls: certResolver: letsencrypt
certificatesResolvers: letsencrypt: acme: email: admin@yourcompany.com storage: /letsencrypt/acme.json httpChallenge: entryPoint: webUpdate docker-compose.yml:
reverse-proxy: volumes: - "./letsencrypt:/letsencrypt" ports: - "80:80" - "443:443"Restart Traefik:
docker compose restart reverse-proxyOption 2: Custom Certificate
Section titled “Option 2: Custom Certificate”Place certificate files in /traefik/certs/:
mkdir -p traefik/certs# Copy your certificate filescp yourcompany.com.crt traefik/certs/cp yourcompany.com.key traefik/certs/Update Traefik configuration:
File: /traefik/dynamic.yml
tls: certificates: - certFile: /traefik_config/certs/yourcompany.com.crt keyFile: /traefik_config/certs/yourcompany.com.keyVerify Custom Domain
Section titled “Verify Custom Domain”# Test DNS resolutiondig analytics.yourcompany.com
# Test HTTPScurl -I https://analytics.yourcompany.com
# Check certificateopenssl s_client -connect analytics.yourcompany.com:443 -servername analytics.yourcompany.comSupport Contact Configuration
Section titled “Support Contact Configuration”Support Email
Section titled “Support Email”Set support email in .env-prod:
PUBLIC_SUPPORT_EMAIL=support@yourcompany.comDisplayed in:
- Help menus
- Error messages
- Footer
- Email communications
Support Links
Section titled “Support Links”Configure help and documentation links:
PUBLIC_DOCS_URL=https://docs.yourcompany.comPUBLIC_STATUS_URL=https://status.yourcompany.comPUBLIC_SUPPORT_URL=https://support.yourcompany.comUpdate in database for dynamic control:
db.organizations.updateOne( {_id: "org_xxxxxxxxxxxxx"}, { $set: { "branding.support": { email: "support@yourcompany.com", docs_url: "https://docs.yourcompany.com", status_url: "https://status.yourcompany.com", support_url: "https://support.yourcompany.com", phone: "+1-555-0123" } } })Analytics Configuration
Section titled “Analytics Configuration”Enable/Disable Analytics
Section titled “Enable/Disable Analytics”Control analytics tracking in .env-prod:
PUBLIC_ENABLE_ANALYTICS=trueValues:
true- Enable all analyticsfalse- Disable analytics tracking
Segment Analytics
Section titled “Segment Analytics”Configure Segment for usage analytics:
SEGMENT_TOKEN=your_segment_write_keyTracks:
- Page views
- Feature usage
- User actions
- Error events
Google Analytics
Section titled “Google Analytics”Add Google Analytics in .env-prod:
PUBLIC_GA_ID=G-XXXXXXXXXXOr update via database:
db.organizations.updateOne( {_id: "org_xxxxxxxxxxxxx"}, { $set: { "branding.analytics": { google_analytics_id: "G-XXXXXXXXXX", segment_write_key: "your_key" } } })Privacy-Compliant Analytics
Section titled “Privacy-Compliant Analytics”For GDPR/CCPA compliance, use privacy-focused analytics:
PUBLIC_ANALYTICS_MODE=privacy # full, privacy, nonePrivacy mode:
- No IP address tracking
- No personal data collection
- Anonymized user IDs
- Cookie consent required
Help Widget
Section titled “Help Widget”Gleap Integration
Section titled “Gleap Integration”Gleap provides in-app support widget with bug reporting and feedback.
Configure in .env-prod:
PUBLIC_GLEAP_API_KEY=your_gleap_api_keyFeatures enabled:
- In-app chat
- Bug reporting with screenshots
- Feature requests
- User feedback surveys
Intercom (Alternative)
Section titled “Intercom (Alternative)”PUBLIC_INTERCOM_APP_ID=your_intercom_app_idCustom Help Widget
Section titled “Custom Help Widget”Disable built-in widgets and add custom:
PUBLIC_HELP_WIDGET_ENABLED=falsePUBLIC_CUSTOM_HELP_WIDGET_URL=https://yourcompany.com/widget.jsEmail Branding
Section titled “Email Branding”Email Templates
Section titled “Email Templates”Customize transactional email templates:
Location: /server-api/templates/emails/
Edit templates:
invitation.html- User invitation emailsnotification.html- System notificationsshare.html- Project share notificationsreport.html- Scheduled report emails
Email Sender
Section titled “Email Sender”Configure sender information:
PUBLIC_EMAIL_FROM_NAME="Your Company Analytics"PUBLIC_EMAIL_FROM_ADDRESS=noreply@yourcompany.comUpdate SendGrid sender:
db.organizations.updateOne( {_id: "org_xxxxxxxxxxxxx"}, { $set: { "branding.email": { from_name: "Your Company Analytics", from_address: "noreply@yourcompany.com", reply_to: "support@yourcompany.com" } } })Email Footer
Section titled “Email Footer”Customize email footer:
db.organizations.updateOne( {_id: "org_xxxxxxxxxxxxx"}, { $set: { "branding.email.footer": { company_name: "Your Company Inc.", address: "123 Main St, City, ST 12345", unsubscribe_text: "Manage your email preferences" } } })Application Name
Section titled “Application Name”Product Name
Section titled “Product Name”Change the application name throughout the UI:
PUBLIC_APP_NAME="Your Analytics Platform"PUBLIC_APP_SHORT_NAME="YAP"Displayed in:
- Browser title
- Navigation
- Email subject lines
- Mobile app name
Meta Tags
Section titled “Meta Tags”Update meta tags for SEO and social sharing:
PUBLIC_META_TITLE="Your Analytics Platform"PUBLIC_META_DESCRIPTION="Advanced analytics and data visualization for your organization"PUBLIC_META_IMAGE=https://yourcompany.com/assets/social-preview.pngLogin Page Customization
Section titled “Login Page Customization”Custom Background
Section titled “Custom Background”Set login page background:
PUBLIC_LOGIN_BG_IMAGE=https://yourcompany.com/assets/login-bg.jpgPUBLIC_LOGIN_BG_COLOR=#f0f4f8Login Message
Section titled “Login Message”Display custom message on login page:
db.organizations.updateOne( {_id: "org_xxxxxxxxxxxxx"}, { $set: { "branding.login": { welcome_message: "Welcome to Your Analytics Platform", subtitle: "Data-driven insights for your organization", show_demo_link: false } } })Footer Customization
Section titled “Footer Customization”Company Information
Section titled “Company Information”Update footer information:
db.organizations.updateOne( {_id: "org_xxxxxxxxxxxxx"}, { $set: { "branding.footer": { company_name: "Your Company Inc.", copyright_year: 2024, links: [ {title: "Privacy Policy", url: "https://yourcompany.com/privacy"}, {title: "Terms of Service", url: "https://yourcompany.com/terms"}, {title: "Documentation", url: "https://docs.yourcompany.com"} ] } } })Hide Powered By
Section titled “Hide Powered By”Remove “Powered by Querri” footer:
PUBLIC_HIDE_POWERED_BY=trueWhite Label Checklist
Section titled “White Label Checklist”Before going live with white-label deployment:
Visual Branding
Section titled “Visual Branding”- Logo uploaded and displaying correctly
- Favicon set
- Brand colors configured
- Dark mode logo (if using dark mode)
- Login page customized
Domain & SSL
Section titled “Domain & SSL”- DNS records configured
- SSL certificate installed
- HTTPS working correctly
- Cookie domain updated
- WorkOS redirect URI updated
Contact Information
Section titled “Contact Information”- Support email set
- Documentation URL configured
- Status page URL (if applicable)
- Phone number (if applicable)
- Company address (for emails)
Email Configuration
Section titled “Email Configuration”- Email sender name updated
- Email templates customized
- Email footer configured
- SendGrid verified sender
Analytics & Tracking
Section titled “Analytics & Tracking”- Analytics enabled/disabled as desired
- Analytics IDs configured
- Privacy mode set appropriately
- Cookie consent configured
Application Text
Section titled “Application Text”- Application name updated
- Meta tags configured
- Footer links updated
- “Powered by” hidden (if desired)
Help & Support
Section titled “Help & Support”- Help widget configured
- Support links working
- Documentation accessible
Testing White Label Configuration
Section titled “Testing White Label Configuration”Visual Testing Checklist
Section titled “Visual Testing Checklist”-
Logo display:
- [ ] Header (logged in)- [ ] Login page- [ ] Email templates- [ ] Share pages- [ ] Mobile responsive -
Colors:
- [ ] Buttons match brand- [ ] Links match brand- [ ] Charts use brand colors- [ ] Dark mode (if applicable) -
Domain:
- [ ] Custom domain resolves- [ ] HTTPS certificate valid- [ ] Redirects working- [ ] Cookies set correctly
Automated Testing
Section titled “Automated Testing”Test white-label configuration:
# Test logo URLs accessiblecurl -I $PUBLIC_LOGO_URLcurl -I $PUBLIC_FAVICON_URL
# Test custom domaincurl -I https://analytics.yourcompany.com
# Verify environment variables loadeddocker compose exec web-app env | grep PUBLIC_Troubleshooting
Section titled “Troubleshooting”Logo Not Displaying
Section titled “Logo Not Displaying”-
Verify URL is publicly accessible:
Terminal window curl -I https://yourcompany.com/assets/logo.png -
Check CORS headers if hosted externally:
Access-Control-Allow-Origin: * -
Verify image format is supported (PNG, SVG, JPG)
-
Clear browser cache and reload
Custom Domain Not Working
Section titled “Custom Domain Not Working”-
Verify DNS propagation:
Terminal window dig analytics.yourcompany.comnslookup analytics.yourcompany.com -
Check SSL certificate:
Terminal window openssl s_client -connect analytics.yourcompany.com:443 -
Verify environment variables updated:
Terminal window docker compose exec web-app env | grep PUBLIC_DOMAIN -
Restart all services:
Terminal window docker compose restart
Colors Not Applying
Section titled “Colors Not Applying”-
Check environment variable syntax:
Terminal window PUBLIC_BRAND_COLOR=#1e40af # Include # symbol -
Clear browser cache
-
Rebuild web-app if Tailwind config changed:
Terminal window docker compose up -d --build web-app
Email Branding Issues
Section titled “Email Branding Issues”-
Verify SendGrid sender authentication
-
Check email template syntax (valid HTML)
-
Test email send:
Terminal window docker compose exec server-api python -c "from api.utils.email import send_emailsend_email('test@example.com', 'Test', '<html>Test</html>')"
Advanced Customization
Section titled “Advanced Customization”Custom CSS
Section titled “Custom CSS”Add custom CSS for advanced styling:
File: /web-app/src/styles/custom.css
:root { --brand-primary: #1e40af; --brand-secondary: #64748b; --brand-accent: #f59e0b;}
.btn-primary { background-color: var(--brand-primary);}Import in /web-app/src/routes/+layout.svelte:
<script> import '../styles/custom.css';</script>Custom Fonts
Section titled “Custom Fonts”Add custom fonts in .env-prod:
PUBLIC_FONT_FAMILY="'Inter', sans-serif"PUBLIC_FONT_URL=https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swapCustom JavaScript
Section titled “Custom JavaScript”Inject custom JavaScript (analytics, etc.):
PUBLIC_CUSTOM_SCRIPT_URL=https://yourcompany.com/scripts/custom.jsBest Practices
Section titled “Best Practices”- Consistent branding - Use same logos/colors across all touchpoints
- Test on multiple devices - Mobile, tablet, desktop
- Performance - Optimize logo file sizes
- Accessibility - Ensure color contrast meets WCAG standards
- Documentation - Document all customizations for team reference
- Backups - Save original logos and assets
- Version control - Track branding changes over time
Next Steps
Section titled “Next Steps”- Organization Settings - Configure organization defaults
- Environment Configuration - Set up environment variables
- Installation & Deployment - Deploy with custom branding