Widget installation
The PulseSupport widget is a single snippet of HTML. Once it's on your site, the chat launcher appears automatically — no build step, no framework dependency. This page covers every common platform.
YOUR_WIDGET_TOKEN in every example below with that value.The snippet
Paste this just before the closing </body> tag on every page where you want the widget to appear. All platform guides below tell you exactly where that is.
<!-- PulseSupport Widget -->
<script>
window.PulseSupportSettings = {
token: "YOUR_WIDGET_TOKEN",
color: "#0F4C81",
position: "right",
launcherTitle: "Chat with us",
};
</script>
<script src="https://pulsesupport.co.za/widget.js" async defer></script>Configuration options
All settings live in the window.PulseSupportSettings object and must be set before the widget.js script tag.
| Key | Type | Required | Description |
|---|---|---|---|
token | string | Yes | Your unique widget token from the dashboard. |
color | string | No | Hex colour for the launcher button. Defaults to #0F4C81. |
position | "right" | "left" | No | Which corner the launcher sits in. Defaults to "right". |
launcherTitle | string | No | Tooltip text shown next to the launcher button. |
WordPress
The safest approach is the free Insert Headers and Footers plugin — it survives theme updates, unlike editing footer.php directly.
- In your WordPress admin go to Plugins → Add New and install Insert Headers and Footers.
- Go to Settings → Insert Headers and Footers.
- Paste the snippet into the Scripts in Footer box.
- Click Save.
If you prefer to edit the theme directly, open Appearance → Theme File Editor, find footer.php, and paste the snippet just above </body>. Be aware that this edit will be overwritten next time the theme updates.
Next.js
Next.js has a built-in Script component that handles loading strategy for you. The cleanest place to add a global script is your root layout.
- Open
app/layout.tsx(App Router) orpages/_document.tsx(Pages Router). - Add the widget using the Next.js
Scriptcomponent withstrategy="afterInteractive":
// app/layout.tsx (App Router)
import Script from "next/script";
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
{children}
{/* PulseSupport Widget */}
<Script id="pulsesupport-settings" strategy="afterInteractive">
{`window.PulseSupportSettings = {
token: "YOUR_WIDGET_TOKEN",
color: "#0F4C81",
position: "right",
launcherTitle: "Chat with us",
};`}
</Script>
<Script
src="https://pulsesupport.co.za/widget.js"
strategy="afterInteractive"
/>
</body>
</html>
);
}widget.js runs. Splitting them into two tags with the same strategy guarantees they execute in order. Using strategy="afterInteractive" loads the widget after the page is interactive so it never blocks your core content from rendering.For the Pages Router, add both Script tags inside the <body> of pages/_document.tsx using Next.js's Html, Head, Main, and NextScript components, just before the closing </body>.
Shopify
- From your Shopify admin go to Online Store → Themes.
- Click Actions → Edit code next to your active theme.
- Open Layout → theme.liquid.
- Find the closing
</body>tag (use Ctrl+F / Cmd+F to search). - Paste the snippet directly above it and click Save.
Wix
Custom code in Wix requires a paid plan (Core and above).
- Go to your Wix dashboard and click Settings → Custom Code.
- Click + Add Custom Code.
- Paste the snippet, set placement to Body — end, apply to All Pages.
- Click Apply then publish your site.
Squarespace
Code Injection is available on Business plans and above.
- In your Squarespace dashboard go to Website Tools → Code Injection.
- Paste the snippet into the Footer box.
- Click Save.
Webflow
Custom code only goes live after publishing — you won't see it in the Designer preview.
- In the Webflow Designer click the W logo → Project Settings.
- Go to the Custom Code tab.
- Paste the snippet into the Footer Code box.
- Click Save Changes, then publish.
Framer
Custom code requires a paid Framer plan.
- Open your project and click the gear icon (Site Settings).
- Under the General tab scroll to Custom Code.
- Paste the snippet into the End of <body> tag field.
- Save and republish.
Plain HTML
- Open your HTML file in a code editor.
- Find the closing
</body>tag near the bottom of the file. - Paste the snippet directly above it.
- Save and re-upload the file to your host via FTP or cPanel File Manager.
If your site has multiple pages, paste the snippet into each one — or into a shared layout or template file if your setup uses one.
Google Tag Manager
GTM is the best option when you don't have direct access to the site's code, regardless of what platform it runs on.
- In GTM click New Tag and name it PulseSupport Widget.
- Set tag type to Custom HTML and paste the full snippet.
- Under Triggering select All Pages.
- Click Save, then Submit to publish the container.
Verifying the install
After installing, open your site in a browser and check:
- The chat launcher button appears in the corner you configured.
- In your browser's DevTools console (F12), run
window.PulseSupportSettings— it should return your settings object, notundefined. - In the Network tab, filter by widget — you should see a successful request to
pulsesupport.co.za/widget.jswith a 200 status.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Widget doesn't appear at all | Snippet not saved, or saved to the wrong place | Check the snippet is present in your page's HTML source (Ctrl+U / Cmd+U) |
PulseSupportSettings is undefined | Settings script running after widget.js | Make sure the settings <script> block comes before the widget.js tag |
| Widget appears on some pages but not others | Snippet only added to one template or page | Add the snippet to every template/layout, or use GTM with an All Pages trigger |
Console error: 401 Unauthorized | Invalid or missing token | Double-check your token in Dashboard → Settings → Widget |
| Widget blocked by Content Security Policy | Your site's CSP doesn't allow external scripts | Add https://pulsesupport.co.za to your CSP script-src and connect-src directives |