Customization

The Intercom component has fixed position and styling. This guide shows what can be customized and workarounds for common needs.


Fixed Properties (Cannot Customize)

Position:

  • Bottom-right corner

  • Mobile: 112px from bottom, 16px from right

  • Desktop: 40px from bottom, 40px from right

Styling:

  • Dark theme only

  • 50x50px trigger button

  • 400px × 530px max popover size

  • HelpCircle/CircleX icons

Behavior:

  • Portal rendering

  • Requires authentication


What You Can Customize

1. When the Component Renders

Conditional Display:

Route-Based:

User-Based:

2. Which Agent to Chat With

Change the username prop to switch between different AI agents:

3. Load Behavior


Common Scenarios

Hide on Specific Pages

Multiple Chat Options

Don't render multiple Intercom instances. Use conditional rendering:


Layout Considerations

Avoid Position Conflicts

The Intercom button occupies bottom-right space. Ensure your fixed elements don't overlap:

Reserve Space for Fixed Elements

Z-Index Stacking

Default stacking order:

  1. Page content (z-index: auto)

  2. Intercom trigger (z-index: 10)

  3. Intercom popover (z-index: 50)

  4. Your modals (z-index: 100+)

Ensure your modals use z-index: 100+ to appear above Intercom.


Best Practices

Rendering:

  • Render at root level, not inside scrollable containers

  • Use single instance per page

  • Unmount when not needed for performance

User Experience:

  • Don't show immediately on page load (delay 3-5 seconds)

  • Use descriptive agent usernames (billing_support vs support)

  • Hide on auth pages (/login, /signup)

  • Show based on user permissions

Performance:

  • Default fetchOnMount={false} is optimal (loads on open)

  • Only use fetchOnMount={true} if users need instant access


Limitations Summary

Feature
Customizable?

Button position

❌ Fixed bottom-right

Button styling

❌ Fixed icon/size/colors

Popover dimensions

❌ Fixed max-width/height

Theme

❌ Dark theme only

Z-index values

❌ Fixed (trigger: 10, popover: 50)

When component renders

✅ Conditional rendering

Which agent to chat with

username prop

Message load timing

fetchOnMount prop

Layout around component

✅ Your CSS/positioning


Last updated