> ## Documentation Index
> Fetch the complete documentation index at: https://gleanfeed.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshoot the widget

> Fix launcher, inline mount, portal origin, visibility, identity, notification, and styling problems.

Start with the public portal. If a section is hidden, unpublished, or empty there, the embedded view reflects the same state.

<AccordionGroup>
  <Accordion title="The launcher does not appear">
    Confirm `widget.js` loaded without a network or Content Security Policy error. The script must
    include `data-workspace`, or your code must call `window.GleanFeed.init()` after the script loads.
    Check that later code does not immediately call `destroy()` or replace the instance.

    After initialization, run `window.GleanFeed.open("feedback")` in the browser console. If
    `window.GleanFeed` is undefined, fix script loading before debugging portal settings.
  </Accordion>

  <Accordion title="Inline mode is blank">
    Add one element matching `[data-glean-feed-inline]` before calling `init()` with `mode: "inline"`.
    Inline mode mounts into the first matching element. It does not create an iframe when no mount
    element exists.
  </Accordion>

  <Accordion title="The widget opens the wrong portal">
    Use the dashboard-generated snippet. For manual setup, pass the application origin—not the CDN
    origin—as `portalBaseUrl`.

    ```js theme={null}
    window.GleanFeed.init({
      workspace: "acme",
      portalBaseUrl: "https://gleanfeed.com",
    });
    ```

    Also confirm the workspace slug matches the intended portal.
  </Accordion>

  <Accordion title="Roadmap or updates is missing or empty">
    The widget renders the same portal sections as the public portal. Enable the section in [portal
    settings](/portal/settings), publish the expected content, and reload the host page.
  </Accordion>

  <Accordion title="Signed identity behaves anonymously">
    Confirm customer accounts are enabled, `workspaceId` is present in `init()`, and the signature
    uses the current widget secret. The browser's `email` must exactly match the trimmed, lowercased
    email included in the server payload. Check the browser console for an identify warning, then
    compare your implementation with [Identify customers](/widget/identity).
  </Accordion>

  <Accordion title="The notification badge does not appear">
    The badge requires launcher mode and a signed-in customer with unread activity. Inline mode and
    anonymous browsing have no launcher badge. After reading notifications, close the panel so the
    widget refreshes the count.
  </Accordion>

  <Accordion title="The launcher color or icon is wrong">
    An explicit `accentColor` or `buttonIcon` passed to `init()` overrides the workspace's remote
    widget setting. Remove the explicit value to use the dashboard setting. Unsupported icons fall
    back to `megaphone`.
  </Accordion>
</AccordionGroup>

If the public portal works and these checks do not resolve the embed, capture the host URL, browser and version, console error, failed network request, widget configuration with secrets removed, and the time of the failure before contacting support.
