feat: add post-signup survey feature#4186
Conversation
|
👋 Commands for maintainers:
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 4 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit f484471. Configure here.
| className="flex-1 px-4 py-2 text-sm font-medium text-gray-700 rounded-md border border-slate-300 bg-white hover:bg-slate-50 disabled:opacity-60" | ||
| > | ||
| Skip for now | ||
| </LoadingButton> |
There was a problem hiding this comment.
Skip button missing loading prop
Medium Severity
The Skip LoadingButton passes loadingText="Skipping..." but never sets the loading prop. The Continue button correctly passes loading={loading === "continue"}, but the Skip button omits loading={loading === "skip"}. Because LoadingButton defaults loading to false, the spinner and "Skipping..." text never appear — the button just becomes disabled with the original label when the skip request is in flight.
Reviewed by Cursor Bugbot for commit f484471. Configure here.
| ); | ||
| }; | ||
|
|
||
| export default SignupSurvey; |
There was a problem hiding this comment.
Prefer named exports
Low Severity
export default SignupSurvey adds a new default export for a page component under web_src/src. Named exports improve Vite compile behavior and IDE stability. See web_src/AGENTS.md (TypeScript).
Triggered by project rule: SuperPlane frontend — Bugbot rules
Reviewed by Cursor Bugbot for commit f484471. Configure here.
| placeholder="Tell us where" | ||
| maxLength={200} | ||
| className="mt-2 w-full px-3 py-2 outline-1 outline-slate-300 rounded-md shadow-md focus:outline-gray-800" | ||
| /> |
There was a problem hiding this comment.
Prefer shadcn/ui primitives
Low Severity
A raw <input type="text"> is used for the "Other" source field, but @/components/ui/input provides a shadcn Input component. Use @/components/ui primitives instead of raw HTML when an equivalent exists.
Triggered by project rule: SuperPlane frontend — Bugbot rules
Reviewed by Cursor Bugbot for commit f484471. Configure here.
| if *req.SourceChannel == models.SourceChannelOther && nonEmpty(req.SourceOther) { | ||
| trimmed := strings.TrimSpace(*req.SourceOther) | ||
| if len(trimmed) > useCaseMaxLen { | ||
| trimmed = trimmed[:useCaseMaxLen] |
There was a problem hiding this comment.
Byte-based string truncation corrupts multi-byte UTF-8
Medium Severity
len(trimmed) counts bytes and trimmed[:useCaseMaxLen] slices by bytes, not runes. For multi-byte UTF-8 input (e.g. CJK characters at 3 bytes each), the slice can cut a character in half, producing an invalid UTF-8 string. PostgreSQL in UTF-8 mode rejects invalid sequences, so this causes a 500 error for affected users. The frontend maxLength counts characters, so a user typing 500 CJK characters sends ~1500 bytes, triggering this truncation path.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit f484471. Configure here.
Add comprehensive post-signup survey functionality including: - Database migrations and schema updates for survey responses - Backend models and API endpoints for survey data - Frontend React component for survey form - Authentication and configuration updates - Tests for models and components
f484471 to
2f4e240
Compare


What's done
Add post-signup survey functionality including:
How it works:
recording_demo.mov
Resolves: #4052