The Custom Tabs feature is a powerful tool that allows you to create fully customized tabs tailored to your agency’s unique offerings and client needs. This feature opens up a world of possibilities for enhancing your client’s dashboard experience.
Creating Custom Tabs
Access Custom Tabs
Navigate to the Custom Tabs
section in your agency settings.
Add New Tab
Click the + Add Tab
button to create a new custom tab.
Configure Tab Settings
For each tab, set the following:
Choose an icon to represent the tab. This helps users quickly identify the tab’s purpose in the dashboard.
Enter a name for the tab. This label will be displayed in the client’s dashboard navigation, so make it clear and concise.
Set a unique identifier for enabling client access. This URL will be used internally to reference the tab and can be used when setting up permissions for different users access to the tab. Tabs make for extremely good opportunities for Up-selling to your clients. Everything from new services, extra agents to feedback loops. Be creative .
Choose Content Type
Select between HTML (with JavaScript) or iFrame : <!-- Your custom HTML here -->
< div id = "render-div" ></ div >
< script >
// Your custom JavaScript here
document . getElementById ( "render-div" ). innerHTML = "<h1>Hello World!</h1>" ;
</ script >
Preview and Save
Use the Preview
button to check your tab’s appearance, then click Done
to save.
Managing Custom Tabs
Visibility Toggle Use the Always Visible
switch to control tab visibility for all clients.
Reordering Click the arrow buttons to change the tab’s position in the list.
Editing Click the edit icon to modify an existing tab’s content or settings.
Deleting Remove unwanted tabs using the delete button.
Use Cases and Ideas
Here are some advanced, colorful, and feature-rich examples you can copy
and paste
into your custom tabs to see the possibilities:
Interactive AI Art Generator
<! DOCTYPE html >
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > AI Art Generator </ title >
< style >
body {
font-family : 'Arial' , sans-serif ;
background : linear-gradient ( 45 deg , #ff6b6b , #4ecdc4 );
color : white ;
display : flex ;
justify-content : center ;
align-items : center ;
height : 100 vh ;
margin : 0 ;
}
.container {
background : rgba ( 255 , 255 , 255 , 0.1 );
border-radius : 20 px ;
padding : 40 px ;
box-shadow : 0 8 px 32 px 0 rgba ( 31 , 38 , 135 , 0.37 );
backdrop-filter : blur ( 4 px );
border : 1 px solid rgba ( 255 , 255 , 255 , 0.18 );
}
h1 {
text-align : center ;
color : #fff ;
text-shadow : 2 px 2 px 4 px rgba ( 0 , 0 , 0 , 0.5 );
}
input , button {
width : 100 % ;
padding : 10 px ;
margin : 10 px 0 ;
border-radius : 5 px ;
border : none ;
}
button {
background-color : #6c5ce7 ;
color : white ;
cursor : pointer ;
transition : background-color 0.3 s ease ;
}
button :hover {
background-color : #5641e5 ;
}
#result {
margin-top : 20 px ;
text-align : center ;
}
#generatedImage {
max-width : 100 % ;
border-radius : 10 px ;
box-shadow : 0 4 px 15 px rgba ( 0 , 0 , 0 , 0.2 );
}
</ style >
</ head >
< body >
< div class = "container" >
< h1 > 🎨 AI Art Generator </ h1 >
< input type = "text" id = "prompt" placeholder = "Enter your art prompt" >
< button onclick = " generateArt ()" > Generate Art </ button >
< div id = "result" ></ div >
</ div >
< script >
function generateArt () {
const prompt = document . getElementById ( 'prompt' ). value ;
const result = document . getElementById ( 'result' );
result . innerHTML = 'Generating your masterpiece...' ;
// Simulating API call to an AI art generation service
setTimeout (() => {
const imageUrl = `https://picsum.photos/800/600?random= ${ Math . random () } ` ;
result . innerHTML = `
<h3>Your AI-generated art:</h3>
<img id="generatedImage" src=" ${ imageUrl } " alt="AI-generated art">
` ;
}, 2000 );
}
</ script >
</ body >
</ html >
Dynamic Dashboard Analytics
<! DOCTYPE html >
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > Dynamic Dashboard Analytics </ title >
< script src = "https://cdn.jsdelivr.net/npm/chart.js" ></ script >
< style >
body {
font-family : 'Roboto' , sans-serif ;
background : linear-gradient ( 120 deg , #84fab0 0 % , #8fd3f4 100 % );
margin : 0 ;
padding : 20 px ;
box-sizing : border-box ;
min-height : 100 vh ;
}
.dashboard {
display : grid ;
grid-template-columns : repeat ( auto-fit , minmax ( 300 px , 1 fr ));
gap : 20 px ;
}
.card {
background : rgba ( 255 , 255 , 255 , 0.9 );
border-radius : 15 px ;
padding : 20 px ;
box-shadow : 0 8 px 32 px rgba ( 31 , 38 , 135 , 0.15 );
}
h2 {
color : #333 ;
margin-top : 0 ;
}
.metric {
font-size : 2 em ;
font-weight : bold ;
color : #4a4a4a ;
}
canvas {
max-width : 100 % ;
}
</ style >
</ head >
< body >
< div class = "dashboard" >
< div class = "card" >
< h2 > Total Users </ h2 >
< div class = "metric" id = "totalUsers" > Loading... </ div >
</ div >
< div class = "card" >
< h2 > Revenue </ h2 >
< div class = "metric" id = "revenue" > Loading... </ div >
</ div >
< div class = "card" >
< h2 > User Growth </ h2 >
< canvas id = "userGrowthChart" ></ canvas >
</ div >
< div class = "card" >
< h2 > Platform Usage </ h2 >
< canvas id = "platformUsageChart" ></ canvas >
</ div >
</ div >
< script >
// Simulated data fetching and chart rendering
setTimeout (() => {
document . getElementById ( 'totalUsers' ). textContent = '1,234,567' ;
document . getElementById ( 'revenue' ). textContent = '$9,876,543' ;
new Chart ( document . getElementById ( 'userGrowthChart' ), {
type: 'line' ,
data: {
labels: [ 'Jan' , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' ],
datasets: [{
label: 'User Growth' ,
data: [ 1000 , 1500 , 2000 , 3000 , 4000 , 5000 ],
borderColor: 'rgb(75, 192, 192)' ,
tension: 0.1
}]
}
});
new Chart ( document . getElementById ( 'platformUsageChart' ), {
type: 'doughnut' ,
data: {
labels: [ 'Web' , 'Mobile' , 'Tablet' ],
datasets: [{
data: [ 300 , 50 , 100 ],
backgroundColor: [ '#FF6384' , '#36A2EB' , '#FFCE56' ]
}]
}
});
}, 1000 );
</ script >
</ body >
</ html >
AI-Powered Customer Feedback Analyzer
<! DOCTYPE html >
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > AI Feedback Analyzer </ title >
< style >
body {
font-family : 'Segoe UI' , Tahoma , Geneva, Verdana , sans-serif ;
background : linear-gradient ( 135 deg , #667eea 0 % , #764ba2 100 % );
color : #ffffff ;
display : flex ;
justify-content : center ;
align-items : center ;
height : 100 vh ;
margin : 0 ;
padding : 20 px ;
box-sizing : border-box ;
}
.container {
background : rgba ( 255 , 255 , 255 , 0.1 );
border-radius : 20 px ;
padding : 40 px ;
width : 80 % ;
max-width : 800 px ;
box-shadow : 0 8 px 32 px 0 rgba ( 31 , 38 , 135 , 0.37 );
backdrop-filter : blur ( 4 px );
border : 1 px solid rgba ( 255 , 255 , 255 , 0.18 );
}
h1 {
text-align : center ;
color : #fff ;
margin-bottom : 30 px ;
}
textarea {
width : 100 % ;
height : 150 px ;
padding : 15 px ;
border-radius : 10 px ;
border : none ;
margin-bottom : 20 px ;
font-size : 16 px ;
}
button {
width : 100 % ;
padding : 15 px ;
background-color : #4CAF50 ;
color : white ;
border : none ;
border-radius : 10 px ;
cursor : pointer ;
font-size : 18 px ;
transition : background-color 0.3 s ease ;
}
button :hover {
background-color : #45a049 ;
}
#result {
margin-top : 30 px ;
background : rgba ( 255 , 255 , 255 , 0.2 );
padding : 20 px ;
border-radius : 10 px ;
}
.sentiment {
font-size : 24 px ;
font-weight : bold ;
text-align : center ;
margin-bottom : 20 px ;
}
.keywords {
display : flex ;
flex-wrap : wrap ;
justify-content : center ;
gap : 10 px ;
}
.keyword {
background : rgba ( 255 , 255 , 255 , 0.3 );
padding : 5 px 10 px ;
border-radius : 20 px ;
font-size : 14 px ;
}
</ style >
</ head >
< body >
< div class = "container" >
< h1 > 🤖 AI Feedback Analyzer </ h1 >
< textarea id = "feedbackInput" placeholder = "Paste customer feedback here..." ></ textarea >
< button onclick = " analyzeFeedback ()" > Analyze Feedback </ button >
< div id = "result" ></ div >
</ div >
< script >
function analyzeFeedback () {
const feedback = document . getElementById ( 'feedbackInput' ). value ;
const result = document . getElementById ( 'result' );
result . innerHTML = '<p>Analyzing feedback...</p>' ;
// Simulating AI analysis
setTimeout (() => {
const sentiments = [ '😃 Positive' , '😐 Neutral' , '😞 Negative' ];
const sentiment = sentiments [ Math . floor ( Math . random () * sentiments . length )];
const keywords = [ 'Product' , 'Service' , 'Quality' , 'Price' , 'Support' , 'User Experience' ]
. sort (() => 0.5 - Math . random ())
. slice ( 0 , 4 );
result . innerHTML = `
<div class="sentiment"> ${ sentiment } </div>
<h3>Key Insights:</h3>
<div class="keywords">
${ keywords . map ( keyword => `<span class="keyword"> ${ keyword } </span>` ). join ( '' ) }
</div>
<p>The feedback primarily focuses on ${ keywords . join ( ', ' ) } .
Overall sentiment appears to be ${ sentiment . toLowerCase () } .
Consider addressing these key areas to improve customer satisfaction.</p>
` ;
}, 2000 );
}
</ script >
</ body >
</ html >
Remember to adapt these examples to fit your specific use case and branding. They serve as a starting point to inspire your own creative and functional custom tabs.