Skip to content

feat: Add in-app feedback collection widget to desktop GUI#7763

Draft
jh-block wants to merge 2 commits intomainfrom
jhugo/gui-feedback-widget
Draft

feat: Add in-app feedback collection widget to desktop GUI#7763
jh-block wants to merge 2 commits intomainfrom
jhugo/gui-feedback-widget

Conversation

@jh-block
Copy link
Copy Markdown
Collaborator

@jh-block jh-block commented Mar 9, 2026

Summary

Implement a low-interruption periodic feedback prompt that appears inline in the chat. After every 5th message exchange, users see a "How's Goose doing?" banner with 4 emoji-face rating buttons (1-4 scale). Ratings are sent via the existing PostHog telemetry pipeline.

Type of Change

  • Feature

AI Assistance

  • This PR was created or reviewed with AI assistance

Testing

Manual testing: Verified banner appears after 5th exchange, ratings are tracked, cooldowns prevent repeat prompts within 2 hours (in-session) and 24 hours (cross-session), and banner respects telemetry opt-out setting.

Implementation Details

  • New hook useFeedbackPrompt manages trigger heuristics based on chatState transitions
  • New component FeedbackBanner renders inline within chat scroll area with emoji ratings and dismiss button
  • Analytics events feedback_submitted and feedback_dismissed track user sentiment
  • Settings persistence for cross-session cooldown via lastFeedbackTimestamp
  • Added lastFeedbackTimestamp to Electron settings allowlist in main.ts

jh-block and others added 2 commits March 9, 2026 16:08
Implement a low-interruption periodic feedback prompt that appears inline in the chat. After every 5th message exchange, users see a "How's Goose doing?" banner with 4 emoji-face rating buttons (1-4 scale). Ratings are sent via the existing PostHog telemetry pipeline.

- New hook `useFeedbackPrompt` manages trigger heuristics: every 5th exchange, 20-minute in-session cooldown, 24-hour cross-session cooldown
- New component `FeedbackBanner` renders inline within chat scroll area with emoji ratings and dismiss button
- Analytics events `feedback_submitted` and `feedback_dismissed` track user sentiment
- Settings persistence for cross-session cooldown via `lastFeedbackTimestamp`
- Respects telemetry opt-out: banner never shows if telemetry is disabled

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
@DOsinga DOsinga self-assigned this Mar 9, 2026
const handleRate = (rating: 1 | 2 | 3 | 4) => {
setSubmittedRating(rating);
if (rating > 1) {
setTimeout(() => onRate(rating), 1000);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why the time out

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the rating is not the worst one, it shows an acknowledgement ("Thanks for the feedback!") briefly and then removes the whole feedback banner so that it doesn't clutter the chat. Without the timeout it would disappear straight away.

If the rating is the worst one it shows "Sorry to hear that. Let us know how we can improve:" with a link to discord, and doesn't remove it automatically -- it removes it when you either click the discord link or click to dismiss the message

definitely open to any UX feedback here

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we have a toast mechanism for that already?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we have one that's inline in the chat? it might be a bit jarring to do the top-right toast which is quite distant from where the interaction is. i'll have a play with it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants