Custom Button Icons
Replace the default thumbs up/down icons with custom SVGs, emoji, or any HTML content to match your brand's visual language.
The Qaid feedback embed uses thumbs up and thumbs down icons by default, but youβre not limited to these. You can replace them with any SVG, emoji, or HTML content that fits your brand. This guide shows you how to create truly unique feedback buttons.
The Default Icons
Before we customize, hereβs what you get out of the box:
Default Icons
Standard thumbs up/down
These work great, but letβs explore the possibilities.
Using Custom SVG Icons
The positiveIcon and negativeIcon config options accept any valid HTML string. For SVG icons, you can use inline SVG markup:
Heart & Broken Heart
Perfect for content-focused platforms, dating apps, or anywhere emotional reactions make sense:
Heart Icons
Love it or hate it
new FeedbackEmbed({
endpoint: '/api/feedback',
positiveIcon: `<svg viewBox="0 0 24 24" fill="currentColor" width="24" height="24">
<path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/>
</svg>`,
negativeIcon: `<svg viewBox="0 0 24 24" fill="currentColor" width="24" height="24">
<path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/>
<line x1="4" y1="4" x2="20" y2="20" stroke="currentColor" stroke-width="2"/>
</svg>`,
colors: {
positive: "#ec4899",
negative: "#6b7280"
}
});
Star Rating Style
Great for review-focused applications:
Star Icons
Star rating style
new FeedbackEmbed({
endpoint: '/api/feedback',
positiveIcon: `<svg viewBox="0 0 24 24" fill="currentColor" width="24" height="24">
<path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>
</svg>`,
negativeIcon: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="24" height="24">
<path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>
</svg>`,
colors: {
positive: "#fbbf24",
negative: "#6b7280"
}
});
Check & X Marks
Clean and unambiguous, ideal for approval workflows:
Check / X Icons
Clear approval indicators
new FeedbackEmbed({
endpoint: '/api/feedback',
positiveIcon: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" width="24" height="24">
<polyline points="20 6 9 17 4 12"/>
</svg>`,
negativeIcon: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" width="24" height="24">
<line x1="18" y1="6" x2="6" y2="18"/>
<line x1="6" y1="6" x2="18" y2="18"/>
</svg>`,
colors: {
positive: "#22c55e",
negative: "#ef4444"
}
});
Arrow Up & Down
Perfect for voting systems like Reddit or Stack Overflow:
Arrow Icons
Upvote/downvote style
new FeedbackEmbed({
endpoint: '/api/feedback',
positiveIcon: `<svg viewBox="0 0 24 24" fill="currentColor" width="24" height="24">
<path d="M12 4l-8 8h5v8h6v-8h5l-8-8z"/>
</svg>`,
negativeIcon: `<svg viewBox="0 0 24 24" fill="currentColor" width="24" height="24">
<path d="M12 20l8-8h-5V4H9v8H4l8 8z"/>
</svg>`,
colors: {
positive: "#ff4500",
negative: "#7193ff"
}
});
Using Emoji
For a more playful feel, you can use emoji directly. Since the icon property accepts any HTML, emoji work perfectly:
Simple Emoji Faces
Emoji Faces
Simple and universal
new FeedbackEmbed({
endpoint: '/api/feedback',
positiveIcon: '<span style="font-size: 24px">π</span>',
negativeIcon: '<span style="font-size: 24px">π</span>'
});
Thumbs Emoji
Similar to the default but with emoji character style:
Thumbs Emoji
Emoji thumbs
new FeedbackEmbed({
endpoint: '/api/feedback',
positiveIcon: '<span style="font-size: 24px">π</span>',
negativeIcon: '<span style="font-size: 24px">π</span>'
});
Fire & Ice
For dramatic contrast:
Fire & Ice
Hot or cold reactions
new FeedbackEmbed({
endpoint: '/api/feedback',
positiveIcon: '<span style="font-size: 24px">π₯</span>',
negativeIcon: '<span style="font-size: 24px">π₯Ά</span>',
colors: {
positive: "#f97316",
negative: "#3b82f6"
}
});
Rocket & Crash
Perfect for product feedback:
Rocket & Crash
Ship it or sink it
new FeedbackEmbed({
endpoint: '/api/feedback',
positiveIcon: '<span style="font-size: 24px">π</span>',
negativeIcon: '<span style="font-size: 24px">π₯</span>',
colors: {
positive: "#8b5cf6",
negative: "#ef4444"
}
});
Combining Icons with Custom Styling
Icons work great with custom button styles. Hereβs an example combining custom SVG icons with themed button CSS:
Styled Custom Icons
Icons with custom button styling
.cyber-btn {
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a2a 100%);
border: 2px solid currentColor;
border-radius: 8px;
padding: 12px;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.cyber-btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, currentColor, transparent);
opacity: 0.1;
transition: left 0.5s ease;
}
.cyber-btn:hover::before {
left: 100%;
}
.cyber-btn:hover {
transform: scale(1.1);
box-shadow: 0 0 20px currentColor;
}
new FeedbackEmbed({
endpoint: '/api/feedback',
buttonClass: 'cyber-btn',
positiveIcon: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="24" height="24">
<circle cx="12" cy="12" r="10"/>
<path d="M8 14s1.5 2 4 2 4-2 4-2"/>
<line x1="9" y1="9" x2="9.01" y2="9"/>
<line x1="15" y1="9" x2="15.01" y2="9"/>
</svg>`,
negativeIcon: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="24" height="24">
<circle cx="12" cy="12" r="10"/>
<path d="M16 16s-1.5-2-4-2-4 2-4 2"/>
<line x1="9" y1="9" x2="9.01" y2="9"/>
<line x1="15" y1="9" x2="15.01" y2="9"/>
</svg>`,
colors: {
positive: "#00ffaa",
negative: "#ff6688"
}
});
Using Script Tag Data Attributes
For the script tag approach, use data-positive-icon and data-negative-icon:
<script
src="https://unpkg.com/@bjsm/qaid"
data-endpoint="/api/feedback"
data-positive-icon='<span style="font-size: 24px">π</span>'
data-negative-icon='<span style="font-size: 24px">π</span>'
></script>
Note: For complex SVGs, the ES Module approach is cleaner since you donβt need to worry about HTML attribute escaping.
Icon Design Tips
- Keep it simple: Icons should be instantly recognizable at small sizes
- Use
currentColor: This allows your icon to inherit the buttonβs text color, making it easy to style with CSS - Set explicit dimensions: Include
widthandheightattributes on SVGs for consistent sizing - Test at different sizes: Use the
buttonSizeconfig option to test how your icons look at small, medium, and large sizes - Consider accessibility: Choose icons that clearly communicate positive vs negative meaning
Summary
Custom icons let you transform the Qaid feedback embed from a generic tool into a branded experience. Whether you use carefully crafted SVGs, playful emoji, or a combination with custom CSS, the positiveIcon and negativeIcon config options give you complete creative control.
Explore the other guides to learn about color customization, text localization, and theme presets.