Add in-app micro-feedback prompts for new features

Show a one-time toast asking how a feature is working after its third
successful use, with an optional comment sent anonymously to the Yaak
API (feature key, text, app version, and OS only — nothing identifying,
and nothing is sent unless the user clicks Send).

- New cmd_send_feedback Tauri command posts fire-and-forget via the
  shared API client (localhost in dev)
- Feature keys registry (cookie-editor, response-history, sse-summary,
  git-sync) with per-feature use counting in the key-value store
- "Never ask for feedback" setting to disable prompts entirely
- Toast gains dynamicHeight and hideDismiss props for richer content
- Fix missing vertical padding on xs/2xs multiline inputs
- Fix unused-import and dead-code warnings in yaak-system-appearance
  on non-Linux builds

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Gregory Schier
2026-07-04 15:06:21 -07:00
parent e52853cc2d
commit b1f1363502
18 changed files with 283 additions and 13 deletions
+1
View File
@@ -402,6 +402,7 @@ export type Settings = {
themeLight: string;
updateChannel: string;
hideLicenseBadge: boolean;
hideFeedbackPrompts: boolean;
autoupdate: boolean;
autoDownloadUpdates: boolean;
checkNotifications: boolean;
@@ -0,0 +1,3 @@
-- Add a setting to disable in-app feature feedback prompts
ALTER TABLE settings
ADD COLUMN hide_feedback_prompts BOOLEAN DEFAULT FALSE NOT NULL;
+4
View File
@@ -246,6 +246,7 @@ pub struct Settings {
pub theme_light: String,
pub update_channel: String,
pub hide_license_badge: bool,
pub hide_feedback_prompts: bool,
pub autoupdate: bool,
pub auto_download_updates: bool,
pub check_notifications: bool,
@@ -303,6 +304,7 @@ impl UpsertModelInfo for Settings {
(ThemeLight, self.theme_light.as_str().into()),
(UpdateChannel, self.update_channel.into()),
(HideLicenseBadge, self.hide_license_badge.into()),
(HideFeedbackPrompts, self.hide_feedback_prompts.into()),
(Autoupdate, self.autoupdate.into()),
(AutoDownloadUpdates, self.auto_download_updates.into()),
(ColoredMethods, self.colored_methods.into()),
@@ -332,6 +334,7 @@ impl UpsertModelInfo for Settings {
SettingsIden::ThemeLight,
SettingsIden::UpdateChannel,
SettingsIden::HideLicenseBadge,
SettingsIden::HideFeedbackPrompts,
SettingsIden::Autoupdate,
SettingsIden::AutoDownloadUpdates,
SettingsIden::ColoredMethods,
@@ -372,6 +375,7 @@ impl UpsertModelInfo for Settings {
autoupdate: row.get("autoupdate")?,
auto_download_updates: row.get("auto_download_updates")?,
hide_license_badge: row.get("hide_license_badge")?,
hide_feedback_prompts: row.get("hide_feedback_prompts")?,
colored_methods: row.get("colored_methods")?,
check_notifications: row.get("check_notifications")?,
hotkeys: serde_json::from_str(&hotkeys).unwrap_or_default(),
@@ -38,6 +38,7 @@ impl<'a> ClientDb<'a> {
autoupdate: true,
colored_methods: false,
hide_license_badge: false,
hide_feedback_prompts: false,
auto_download_updates: true,
check_notifications: true,
hotkeys: HashMap::new(),