feat: add onboarding info fields to first user setup (#23989)

Add optional demographic and newsletter preference fields to the setup
page: business use (yes/no), industry type, organization size, and two
newsletter toggles (marketing, release/security updates).

The new data flows through telemetry via a FirstUserOnboarding struct in
the snapshot payload, sent once when the first user is created. The
telemetry-server and BigQuery schema changes are required separately to
persist this data.

---------

Co-authored-by: default <davidiii@fraley.us>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeremy Ruppel
2026-04-03 09:52:52 -04:00
committed by GitHub
parent 53482adc2d
commit da3c46b557
9 changed files with 549 additions and 15 deletions
+13
View File
@@ -1502,6 +1502,7 @@ type Snapshot struct {
PrebuiltWorkspaces []PrebuiltWorkspace `json:"prebuilt_workspaces"`
AIBridgeInterceptionsSummaries []AIBridgeInterceptionsSummary `json:"aibridge_interceptions_summaries"`
BoundaryUsageSummary *BoundaryUsageSummary `json:"boundary_usage_summary"`
FirstUserOnboarding *FirstUserOnboarding `json:"first_user_onboarding"`
}
// Deployment contains information about the host running Coder.
@@ -1551,6 +1552,18 @@ type User struct {
LoginType string `json:"login_type,omitempty"`
}
// FirstUserOnboarding contains optional demographic and newsletter
// preference data collected during first user setup. This is sent
// once when the first user is created. Pointer fields distinguish an
// explicit answer from a skipped question.
type FirstUserOnboarding struct {
IsBusiness *bool `json:"is_business"`
IndustryType string `json:"industry_type"`
OrgSize string `json:"org_size"`
NewsletterMarketing *bool `json:"newsletter_marketing"`
NewsletterReleases *bool `json:"newsletter_releases"`
}
type Group struct {
ID uuid.UUID `json:"id"`
Name string `json:"name"`