The feedback widget
The widget adds a feedback channel inside your product. Users open the panel in the corner and describe a problem or idea without visiting a separate site, choosing a board or writing a title first.
The AI classifies each message into one of three outcomes described below. This page covers the user experience and available settings. For integration steps, see Install the feedback widget.
The launcher
The launcher is a 56-pixel round button in the bottom-right corner, displayed above the rest of the page.

Its colour is your FeedLog brand colour, configured under Settings → Workspace. It does not inherit colours from the host page. In the example above, the host site is indigo and the workspace brand colour is terracotta. To make them match, change the brand colour in FeedLog. There is no per-site override, and the same colour is used on your portal.
The icon and position are fixed and cannot be configured.
The panel
Clicking the launcher opens a 400-pixel panel above it. At screen widths below 520 pixels, the panel opens full-screen instead.

Everything inside it is served by FeedLog in a cross-origin iframe. Your site's CSS cannot affect the panel, and the panel cannot read content from the host page. FeedLog can also update the panel without requiring a new release of your product.
Reading down the panel:
- The header carries your workspace logo, or the first letter of your workspace name when you haven't uploaded one, then the fixed title Feedback and a line naming your workspace: Help us make Acme better — share problems and ideas. A workspace with no name set reads this product instead. Set the workspace name before installing the widget if you want it shown here.
- Two tabs. My feedback switches to the user's own posts, with the count beside it. All feedback opens your portal in a new tab.
- The assistant's opening line identifies it as an AI rather than a human support agent. It does not have access to support systems such as order records.
- The composer accepts text and images, up to 10 MB per image, pasted or selected from a file dialog. Images are attached to the post that gets created, but the AI does not inspect them. A screenshot without a text description cannot be classified.
Each message is evaluated independently. The panel uses a chat layout but does not use earlier messages as context: "it's broken" and "I mean the export button" receive two separate results. The original messages are not stored. If a message becomes feedback, only the resulting post is stored.
The three outcomes
Every message ends as exactly one of three:
| Outcome | The user gets | You get |
|---|---|---|
| Feedback | A confirmation and a card: title, board, status | A post on a board, under their name |
| Support | An apology and your support email | Nothing |
| Unrecognized | A nudge to describe the problem | Nothing |
The AI evaluates the outcomes in this order: support, feedback, then unrecognized. Checking support first keeps account-specific requests such as "I was double charged" off the public feedback board when a matching handoff rule is enabled.
Feedback
The AI writes a one-line title and restates the message as the body in the first person, using the user's own words without adding details. It then selects the best-matching board from the board names and descriptions. Clear descriptions improve this classification (Creating and managing boards). If no board matches, the post goes to your first board. If there are no boards, it is left uncategorized.

The confirmation card shows the generated title, selected board, status and a link to the post on your portal. The title may differ from the original message because the AI rewrites the request for use in a feedback list.
When the confirmation appears, the post is already published on the portal and available for votes and comments. It also appears in your dashboard with the user as its author. The user is subscribed automatically and receives your replies and status changes.
Support
The assistant says the message requires human support and provides your support email. No feedback or support ticket is created. This keeps account-specific requests, such as refunds, off the public feedback board.

The address is a mailto link, so the user can open a new email without copying the address. The handoff rules below determine which messages receive this result.
Unrecognized
The message is unclear, off-topic or does not describe a product problem. The assistant asks the user to describe what is not working. No feedback is created, and the user can submit another message immediately.
Signed-out users
The widget does not have a separate login. It gets the current user's identity from the getToken function configured during installation.
When getToken returns null, the conversation and composer are replaced by Sign in to send feedback and a button that calls back into your sign-in flow, whether that is a modal, page or identity provider. Users do not need a separate FeedLog account. After they sign in to your product, the panel updates to the signed-in state.
Widget posts use the name and email supplied by your product instead of an Anonymous author. Install the feedback widget explains the integration, and Single sign-on explains the token.
Turning it on
Settings → Widget, then the Enable widget switch on the Installation card. Off means the SDK renders nothing on your site — no launcher, no badge, not even a console warning. This setting applies to every site where the widget is installed and does not require a new deployment of your product.
The widget is on by default, including for a workspace that has never saved this page. Only owners and managers can change these settings. Other members see a notice that they do not have permission.
The support email
Support email, under Contact support, is the address every handoff points at.
Leaving it empty does not disable handoffs. The assistant still asks the user to contact support but cannot provide an address. Configure this field before enabling handoff rules.
Handoff rules
A rule completes the sentence Redirect to support when…. Each enabled rule is added verbatim to the assistant's instructions. FeedLog includes three built-in rules:
| Built-in rule | Redirects when the user |
|---|---|
| Billing | needs help with a charge, refund, payment failure or invoice on their account |
| Account access | is blocked by a login problem, an account lockout, or unauthorized access |
| Privacy and legal | is making a privacy, data-deletion, copyright or other legal request about their own data |
Built-in rules can be switched off individually but cannot be edited or deleted. Custom rules can be edited or deleted and can contain up to 180 characters. At most 10 rules can be enabled at once, including built-in and custom rules.

Describe a situation rather than a broad topic. "user asks about enterprise contracts or custom pricing" is a rule; "billing" is not. The AI evaluates intent: a request for help with the user's account, data or payment can go to support, while a product suggestion remains feedback even if it uses similar terms. For example, "Add a privacy policy page" is feedback, while "Delete my account" is support.
No rules enabled means no handoffs, ever
Switching off all three built-ins and adding none of your own does not fall back to the AI's default judgement. It removes support from the available outcomes. Every message then resolves as feedback or unrecognized, so a refund request may become a public post under the user's name if it is classified as feedback.
The settings page does not warn when all rules are disabled. Disabling all handoffs is a supported configuration. If you want account-specific requests directed to a support team, leave the relevant built-in rules enabled.
My feedback and unread updates
The My feedback tab lists the user's own posts, newest first. Each item shows its status, vote count and age, with a link that opens it on your portal. If the user has not posted yet, the panel shows a full-width All feedback link to the other feedback on your portal.
When you reply to a post or change its status, a red badge appears on the author's launcher. Unread badges are always red and do not use the workspace brand colour. Inside the panel, the tab reads 3 posts · 1 with updates and the updated post carries a red dot. Opening that post clears the launcher badge, tab count and post dot.

Only authors receive these indicators, and only for their own posts. The badge count is capped at 9+.
Common errors
Nothing appears in your product. Enable widget may be off, or the SDK may not have initialized. Check the setting first, then verify the installation by following Install the feedback widget.
Every message returns "Could not send that. Please try again." On a self-hosted instance, the usual causes are a missing OPENAI_API_KEY or an unreachable AI provider. The widget still renders, sign-in works and My feedback loads, but messages cannot be processed without the AI service. Check the provider configuration in Configuring external services.
The panel says "Sign in to send feedback" to someone who is signed in.getToken is returning null, or FeedLog is rejecting the token. Common causes include an expired token and a token signed with the wrong secret. Verify the three return states and signing configuration in Install the feedback widget.
The launcher uses an unexpected colour. It uses the FeedLog workspace brand colour rather than colours from your site. Change it under Settings → Workspace; there is no per-site override.
Feedback keeps landing on the wrong board. When no board matches, the AI uses the first board as a fallback. Review the board names and descriptions, which are the fields used for classification.
Everything gets sent to support. One or more rules may describe a broad topic instead of a specific situation. Replace "anything about billing" with a narrower rule such as "the user needs help with a charge on their account".
A message is rejected before the AI processes it. A message can contain at most 4,000 characters, and each network can send about 20 messages per minute. Shorten an oversized message or wait before retrying after the rate limit.