Commit 1f263ad
authored
feat(onboarding): let users permanently skip the onboarding flow (#3525)
* feat(onboarding): let users permanently skip the onboarding flow
Adds a permanent, cross-device skip to the new onboarding flow so a
no-lease user is no longer trapped in the picker or the stripped
auto-deploy screen.
Backend: new nullable `onboardingSkippedAt` timestamp on the user
settings table (migration 0034), exposed on `/v1/user/me`, and a new
idempotent `POST /v1/user/skipOnboarding` that sets it once via a
set-if-null update so the original skip time is never overwritten.
Frontend: a `useSkipOnboarding` hook that records the event, persists
the flag, awaits a session refresh, then routes to the deployments
list; the onboarding gate and stripped-chrome hook both treat a skipped
user as onboarded; and a shared SkipOnboardingButton on the picker and
the minimal nav of the auto-deploy screen.
Closes CON-750
* fix(onboarding): keep the user in place when the post-skip session refresh fails
- report the refresh error and skip navigation: the gate would still see a
flagless user and bounce the navigation back into onboarding anyway
- restore the import-x/no-cycle suppressions in the user model schema that
this branch mistakenly removed (fixes the api lint CI failure)
- inject Nav's heavy children via DEPENDENCIES and cover its minimal chrome
with a spec (codecov patch gap on the skip button line)
- use faker uuids for unique-constrained usernames in the user service
integration test and type the RequireOnboarding user fixture with mock<T>
* fix(user): restore no-cycle suppressions stripped by the pre-commit hook
lint-staged runs eslint from the repo root where the typescript resolver
cannot resolve @src aliases, so import-x/no-cycle never fires there and
--fix deletes the directives as unused; committed with --no-verify to
keep them (the workspace-level lint, which CI runs, needs them)
* test(user): add the skip onboarding route to the API docs snapshot
* fix(onboarding): only navigate after the refreshed profile carries the skip flag
- run the whole persist-and-refresh sequence inside the mutation so
isSkipping disables the skip button for its full duration instead of
re-enabling during the session-refresh window
- navigate from an effect gated on user.onboardingSkippedAt — the same
profile the onboarding gate reads — so a fail-open flagless 200 from
the profile route no longer bounces the user back into the funnel
* feat(onboarding): consolidate skipping into the shared button and gate provider links
- replace the picker's bespoke skip-the-trial button, sheet reason and
analytics event with the shared SkipOnboardingButton in the page body
- land a skipped user on the new-deployment page instead of the
deployments list, and spell out the skip in the button label
- render marketplace provider names as plain text until the user is
onboarded: the provider detail link would bounce them back into the
onboarding funnel (new useIsOnboarded hook reusing the gate's
lease-existence query without refetching it on mount)
- drop the wallet passthrough from useEnsureTrialStarted, orphaned by
the removed trial conditional
* feat(deployment): add a tooltip and settings icon to the SDL import/export trigger
- swap the overflow dots for a settings icon and name the trigger
"Import or export config" via one constant feeding both the tooltip
and the accessible label
* refactor(analytics): drop the unused onboarding_add_credits_click event
* test(onboarding): model the post-refresh profile transition in the skip spec
* fix(deployment): increase gap between navigation items for improved spacing1 parent 71fbe2a commit 1f263ad
40 files changed
Lines changed: 2102 additions & 135 deletions
File tree
- apps
- api
- drizzle
- meta
- src
- app
- core/services/job-queue
- user
- controllers/user
- model-schemas/user
- routes/user-settings
- schemas
- services/user
- test
- functional/__snapshots__
- seeders
- deploy-web/src
- components
- deployments/ConfigureDeployment
- MarketplacePane
- MarketplaceProvidersTable
- SdlImportExport
- layout
- onboarding-picker
- SkipOnboardingButton
- onboarding/RequireOnboarding
- hooks
- services/analytics
- types
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
0 commit comments