Polish onboarding v2 verify animation and step screens (#22585)

https://github.com/user-attachments/assets/1d9b8dc2-ef01-4202-a97e-b41cab048f87





A few polish tweaks to onboarding v2:

- **Verify/workspace-creation animation:** emphasize the key phrase of
each message in medium weight, the rest regular (e.g. "Creating your
**workspace**…").
- **Wider content column:** 340px → 440px. Collapses to full width on
mobile via the existing `max-width: 100%` on every consumer.
- **Sticky disabled buttons:** step submit buttons now stay disabled
from submit through navigation instead of briefly re-enabling once the
mutation resolves.
- **Fewer pulse loaders:** stop the pulsing logo from flashing when
navigating between onboarding steps (removed the step-page Suspense
fallback loader). The verify animation, cold-boot gates, and sign-in
fallbacks are unchanged.

Note: the reworded activation messages get new Lingui catalog IDs, so
non-English locales fall back to English until catalogs are
re-extracted.

<!-- This is an auto-generated description by cubic. -->
<a
href="https://cubic.dev/pr/twentyhq/twenty/pull/22585?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
This commit is contained in:
Raphaël Bosi
2026-07-06 16:44:44 +02:00
committed by GitHub
parent 6c40c7b91a
commit 62c7e8f6b4
25 changed files with 162 additions and 106 deletions
@@ -0,0 +1,6 @@
import { AppPath } from 'twenty-shared/types';
export const ONBOARDING_VERIFY_PATHS = [
AppPath.Verify,
AppPath.WorkspaceActivation,
];
@@ -1,8 +0,0 @@
import { msg } from '@lingui/core/macro';
export const WORKSPACE_ACTIVATION_MESSAGES = [
msg`Creating your workspace...`,
msg`Setting up your database...`,
msg`Creating your data model...`,
msg`Prefilling your workspace data...`,
];
@@ -0,0 +1,54 @@
import { StyledOnboardingActivationMessageEmphasis } from '@/onboarding/components/StyledOnboardingActivationMessageEmphasis';
import { type OnboardingActivationMessage } from '@/onboarding/types/OnboardingActivationMessage';
import { Trans } from '@lingui/react/macro';
export const WORKSPACE_ACTIVATION_MESSAGES: OnboardingActivationMessage[] = [
{
id: 'creating-workspace',
content: (
<Trans>
Creating your{' '}
<StyledOnboardingActivationMessageEmphasis>
workspace
</StyledOnboardingActivationMessageEmphasis>
...
</Trans>
),
},
{
id: 'setting-up-database',
content: (
<Trans>
Setting up your{' '}
<StyledOnboardingActivationMessageEmphasis>
database
</StyledOnboardingActivationMessageEmphasis>
...
</Trans>
),
},
{
id: 'creating-data-model',
content: (
<Trans>
Creating your{' '}
<StyledOnboardingActivationMessageEmphasis>
data model
</StyledOnboardingActivationMessageEmphasis>
...
</Trans>
),
},
{
id: 'prefilling-workspace-data',
content: (
<Trans>
Prefilling your{' '}
<StyledOnboardingActivationMessageEmphasis>
workspace data
</StyledOnboardingActivationMessageEmphasis>
...
</Trans>
),
},
];
@@ -0,0 +1,9 @@
import { matchPath } from 'react-router-dom';
import { isDefined } from 'twenty-shared/utils';
import { ONBOARDING_VERIFY_PATHS } from '@/auth/constants/OnboardingVerifyPaths';
export const isOnOnboardingVerifyPath = (pathname: string) =>
ONBOARDING_VERIFY_PATHS.some((verifyPath) =>
isDefined(matchPath(verifyPath, pathname)),
);