feat: add usage onboarding survey overlay (#388)

* feat: add usage-survey feedback types and gating function

Claude-Session: https://claude.ai/code/session_01KAC9Lbx8AmebAnj9WQZXHp

* feat: add onboarding usage-survey i18n strings to all locales

Relabels three ambiguous feedback.usageTypes values (personal/team_internal/
business_workflow) and adds a new onboarding namespace (4 keys) across the
reference locale and all 20 translations, so the tree compiles at every
commit instead of only after both locale groups land.

Claude-Session: https://claude.ai/code/session_01KAC9Lbx8AmebAnj9WQZXHp

* feat: add UsageSurveyOverlay component

* feat: mount UsageSurveyOverlay inside AuthGuard

Claude-Session: https://claude.ai/code/session_01KAC9Lbx8AmebAnj9WQZXHp

* fix: use text-start instead of text-left for RTL support in UsageSurveyOverlay

* refactor: drop redundant usage-type field from the admin feedback dialog

Claude-Session: https://claude.ai/code/session_01KAC9Lbx8AmebAnj9WQZXHp

* feat: accept onboarding source and survey id in the feedback route

Claude-Session: https://claude.ai/code/session_01KAC9Lbx8AmebAnj9WQZXHp

* test: cover the onboarding source in the feedback route integration test

Claude-Session: https://claude.ai/code/session_01KAC9Lbx8AmebAnj9WQZXHp

* chore: remove orphaned usageTypeLabel i18n key

* refactor: derive feedback source/survey_id enums from a single source of truth

* perf: skip the settings fetch in UsageSurveyOverlay for non-admin users
This commit is contained in:
SnapOtter
2026-07-02 00:02:24 +08:00
committed by GitHub
parent 9052da27f3
commit a0d1c70172
31 changed files with 674 additions and 168 deletions
+9 -4
View File
@@ -80,7 +80,6 @@ export const ru: TranslationKeys = {
adminCardDescription:
"A quick note from admins helps us improve Docker, source installs, and docs.",
installMethodLabel: "Install method",
usageTypeLabel: "Use case",
frictionAreaLabel: "Hardest setup area",
importantAreasLabel: "Most important areas",
sentiments: {
@@ -107,9 +106,9 @@ export const ru: TranslationKeys = {
other: "Other",
},
usageTypes: {
personal: "Personal",
team_internal: "Team/internal",
business_workflow: "Business workflow",
personal: "Только я",
team_internal: "Небольшая команда",
business_workflow: "Компания или организация",
education: "Education",
evaluating: "Evaluating",
},
@@ -133,6 +132,12 @@ export const ru: TranslationKeys = {
ai_tools: "AI tools",
},
},
onboarding: {
usageSurveyTitle: "Как вы используете SnapOtter?",
usageSurveyToolsLabel: "Что для вас важнее всего?",
pickAnyHint: "(выберите любое количество)",
continueLabel: "Продолжить",
},
categories: {
essentials: "Основные",
adjustments: "Коррекция",