
Critical Requirements for Custom Launchers:
- The custom launcher element MUST exist in the DOM before Cello initializes
- The element MUST have
position: relative
styling - You MUST configure the selector in Cello Portal to match your element
- Cello does NOT automatically rescan the DOM for new elements after initialization
Implementation Guide
Step 1: Create your launcher element
Create an HTML element that will trigger the Referral Component. The element must:- Exist in the DOM before
cello.boot()
is called - Have
position: relative
CSS styling - Use a unique identifier (ID, class, or attribute)
Step 2: Configure Cello Portal
- Navigate to Referrer Experience in Cello Portal
- Set the Custom Launcher Selector to match your element:
- For ID:
#cello-launcher
- For class:
.cello-launcher
- For attribute:
[cello-launcher]
- For ID:

Step 3: Initialize Cello
After the custom launcher element exists in the DOM, initialize Cello:Common Issues and Solutions
Custom launcher not working
Element doesn't exist when Cello initializes
Element doesn't exist when Cello initializes
Problem: The custom launcher element is created after Cello has already initialized.Solution: Ensure the element exists in the DOM before calling
cello.boot()
. In React/Vue, render the element with display: none
initially, then show it after initialization.Missing position: relative
Missing position: relative
Problem: The element doesn’t have
position: relative
styling.Solution: Add style="position: relative"
to your launcher element. This is required for Cello to properly attach event handlers.Selector mismatch
Selector mismatch
Problem: The selector in Cello Portal doesn’t match your element.Solution: Verify the exact selector format:
- ID selectors need
#
prefix:#my-launcher
- Class selectors need
.
prefix:.my-launcher
- Attribute selectors need brackets:
[my-attribute]
Dynamic elements in SPAs
Dynamic elements in SPAs
Problem: In single-page applications, elements are dynamically added/removed.Solution: Keep the launcher element persistent in the DOM, use CSS to control visibility instead of conditional rendering.
Add reward in launcher
1.5x activation rate 3.5x sharing rate Increase the sharing activity of your users by highlighting the reward directly in the referral launcher inside your menu item.
Disable Cello button
Cello button is a floating action button or bookmark style button provided as a default Referral Component launcher. When integrating a Customer Launcher, you may choose to disable the Cello button or keep it as an additional launcher.

Configure notification badge

Default behavior (clickable with badge)
Default behavior (clickable with badge)
This is the default behavior - the element opens the Referral Component on click and shows notification badges.
Clickable without badge
Clickable without badge
Add
data-cello-badge="false"
to hide the notification badge while keeping the element clickable.
Use this when you have multiple launchers but only want badges on some of them.Badge only, non-clickable
Badge only, non-clickable
Add
data-cello-click="false"
to show the notification badge but prevent clicks from opening the panel.
Use this to show badge notifications on parent menu items for better visibility.The
data-cello-badge
and data-cello-click
attributes are optional modifiers. If you want the default behavior (clickable with badge), you don’t need these attributes at all.Testing notification badge positionTo trigger a notification badge to be shown on your Custom Launcher simply visit the referral link, of the same user you are testing with, e.g.
moonly.cello.so/pNRB1aYqArN
. A link visit will trigger a view notification and a badge will be displayed.Add announcement selector

If the Cello button is disabled, the announcement needs to be anchored to one of your Custom Launchers.

Testing Announcement positionWhile choosing Announcement Selector and choosing its position, you will want to see how it looks and make necessary adjustments. You can trigger an announcement using Cello JS
showAnnouncement(announcement)
method.Example below will trigger the default welcome announcement: