🎨 Widget Customization
Learn how to customize the look and feel of your support widget to match your brand.
On This Page
Brand Colors
Customize the primary color to match your brand identity. This affects the widget button, headers, and accent elements.
<script
src="https://aether-support-api-1000644784414.us-central1.run.app/widget.js"
data-app-id="your_app_id"
data-api-key="your_api_key"
data-primary-color="#8B5CF6"
async
></script>Color Options
| Attribute | Description | Default |
|---|---|---|
data-primary-color | Main accent color (hex) | #8B5CF6 |
data-text-color | Text on primary color | #FFFFFF |
data-background-color | Widget background | #FFFFFF |
Widget Positioning
Control where the widget appears on your page. Choose from four corner positions.
<script
src="https://aether-support-api-1000644784414.us-central1.run.app/widget.js"
data-app-id="your_app_id"
data-api-key="your_api_key"
data-position="bottom-right"
data-offset-x="20"
data-offset-y="20"
async
></script>Position Values
bottom-rightbottom-lefttop-righttop-leftLight & Dark Themes
The widget supports both light and dark themes, and can automatically follow your site's theme.
<!-- Fixed theme -->
<script
src="https://aether-support-api-1000644784414.us-central1.run.app/widget.js"
data-theme="dark"
async
></script>
<!-- Auto-detect from system preference -->
<script
src="https://aether-support-api-1000644784414.us-central1.run.app/widget.js"
data-theme="auto"
async
></script>Theme Options
light— Always use light themedark— Always use dark themeauto— Follow system/browser preference
Custom Messages
Personalize the welcome message and placeholder text to match your brand voice.
<script
src="https://aether-support-api-1000644784414.us-central1.run.app/widget.js"
data-app-id="your_app_id"
data-api-key="your_api_key"
data-welcome-message="Hi there! 👋 How can we help you today?"
data-placeholder="Type your question..."
data-bot-name="Support Bot"
async
></script>Message Attributes
data-welcome-message | Greeting shown when widget opens |
data-placeholder | Input field placeholder text |
data-bot-name | Name displayed for AI responses |
💡 Personalized Greetings: Use {{name}} in your welcome message to automatically include the user's name (e.g., "Hi {{name}}! How can I help?")
👤 User Identification
Identify logged-in users to personalize their experience, pre-fill ticket forms, and track conversations across sessions.
Method 1: Data Attributes (Simplest)
Add user info directly to the script tag. Best for server-rendered pages.
<script
src="https://aether-support-api-1000644784414.us-central1.run.app/widget.js"
data-app-id="your_app_id"
data-user-id="user_123"
data-user-email="john@example.com"
data-user-name="John Doe"
async
></script>Method 2: JavaScript Config (For SPAs)
Set user info via JavaScript. Best for React, Vue, Next.js, and other SPAs where user data loads dynamically.
// Set before widget loads OR call identify() after
window.AetherSupportConfig = {
user: {
id: 'user_123',
email: 'john@example.com',
name: 'John Doe'
}
};
// You can also call identify() at any time:
window.AetherSupport.identify({
id: 'user_123',
email: 'john@example.com',
name: 'John Doe'
});React/Next.js Example
// components/AetherSupportIdentify.tsx
'use client';
import { useEffect } from 'react';
import { useUser } from '@/context/UserContext';
export function AetherSupportIdentify() {
const { userId, userEmail, userName } = useUser();
useEffect(() => {
if (userId && userEmail) {
const user = { id: userId, email: userEmail, name: userName };
// Set config (read during widget init)
window.AetherSupportConfig = {
...window.AetherSupportConfig,
user
};
// Also call identify (queued if widget not ready)
window.AetherSupport?.identify(user);
}
}, [userId, userEmail, userName]);
return null;
}Why Identify Users?
- ✅ Personalized greetings — "Hi John!" instead of "Hi!"
- ✅ Skip email collection — AI creates tickets without asking for email
- ✅ Conversation history — Users see past chats when they return
- ✅ Better support context — Agents see who they're helping
Custom CSS
For advanced styling, inject custom CSS to override default widget styles.
<style>
/* Widget container */
.aether-widget {
font-family: 'Inter', sans-serif;
}
/* Launcher button */
.aether-launcher {
border-radius: 50%;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
/* Chat header */
.aether-header {
border-radius: 16px 16px 0 0;
}
/* Message bubbles */
.aether-message-bot {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
</style>Note: Custom CSS is available on the Business plan and above. CSS selectors may change between versions.
Advanced Options
Additional configuration options for power users.
<script
src="https://aether-support-api-1000644784414.us-central1.run.app/widget.js"
data-app-id="your_app_id"
data-api-key="your_api_key"
// Behavior
data-auto-open="false"
data-hide-branding="true"
data-sound-enabled="true"
// Visitor tracking
data-user-id="user_123"
data-user-email="user@example.com"
data-user-name="John Doe"
// Custom metadata
data-custom='{"plan":"pro","company":"Acme"}'
async
></script>All Configuration Options
| Attribute | Type | Description |
|---|---|---|
data-auto-open | boolean | Auto-open widget on page load |
data-hide-branding | boolean | Hide "Powered by Aether" (Business+) |
data-sound-enabled | boolean | Play sound on new messages |
data-user-id | string | Identify logged-in users |
data-user-email | string | Pre-fill user email |
data-user-name | string | Pre-fill user name |
data-custom | JSON | Custom metadata for analytics |