update saas onboarding (#6619)

<img width="1002" height="487" alt="Screenshot 2026-06-11 at 6 20 10 PM"
src="https://github.com/user-attachments/assets/5ee3cfc2-6c4f-4b35-9586-ef45fa216c6a"
/>
This commit is contained in:
EthanHealy01
2026-06-11 19:39:02 +01:00
committed by GitHub
parent 1d598d5caa
commit 33026e1a82
27 changed files with 659 additions and 413 deletions
@@ -1,12 +1,12 @@
import WelcomeSlide from "@app/components/onboarding/slides/WelcomeSlide";
import FreeEditorSlide from "@app/components/onboarding/slides/FreeEditorSlide";
import UsageSnapshotSlide from "@app/components/onboarding/slides/UsageSnapshotSlide";
import TeamSlide from "@app/components/onboarding/slides/TeamSlide";
import DesktopInstallSlide from "@app/components/onboarding/slides/DesktopInstallSlide";
import FreeTrialSlide from "@app/components/onboarding/slides/FreeTrialSlide";
import { SlideConfig } from "@app/types/types";
import { TrialStatus } from "@app/auth/UseSession";
export type SlideId = "welcome" | "free-trial" | "desktop-install";
export type SlideId = "free-editor" | "usage" | "team" | "desktop-install";
export type HeroType = "rocket" | "dual-icon" | "diamond";
export type HeroType = "logo" | "bolt" | "team" | "dual-icon";
export type ButtonAction = "next" | "prev" | "close" | "download-selected";
@@ -23,7 +23,6 @@ export interface SlideFactoryParams {
osUrl: string;
osOptions?: OSOption[];
onDownloadUrlChange?: (url: string) => void;
trialStatus?: TrialStatus | null;
}
export interface HeroDefinition {
@@ -48,47 +47,46 @@ export interface SlideDefinition {
buttons: ButtonDefinition[];
}
const BACK_BUTTON: ButtonDefinition = {
key: "back",
type: "icon",
icon: "chevron-left",
group: "left",
action: "prev",
};
const NEXT_BUTTON: ButtonDefinition = {
key: "next",
type: "button",
label: "onboarding.buttons.next",
variant: "primary",
group: "right",
action: "next",
};
export const SLIDE_DEFINITIONS: Record<SlideId, SlideDefinition> = {
welcome: {
id: "welcome",
createSlide: () => WelcomeSlide(),
hero: { type: "rocket" },
"free-editor": {
id: "free-editor",
createSlide: () => FreeEditorSlide(),
hero: { type: "logo" },
buttons: [{ ...NEXT_BUTTON, key: "free-editor-next" }],
},
usage: {
id: "usage",
createSlide: () => UsageSnapshotSlide(),
hero: { type: "bolt" },
buttons: [
{
key: "welcome-next",
type: "button",
label: "onboarding.buttons.next",
variant: "primary",
group: "right",
action: "next",
},
{ ...BACK_BUTTON, key: "usage-back" },
{ ...NEXT_BUTTON, key: "usage-next" },
],
},
"free-trial": {
id: "free-trial",
createSlide: ({ trialStatus }) => {
if (!trialStatus) {
throw new Error("Trial status is required for free-trial slide");
}
return FreeTrialSlide({ trialStatus });
},
hero: { type: "diamond" },
team: {
id: "team",
createSlide: () => TeamSlide(),
hero: { type: "team" },
buttons: [
{
key: "trial-back",
type: "icon",
icon: "chevron-left",
group: "left",
action: "prev",
},
{
key: "trial-next",
type: "button",
label: "onboarding.buttons.next",
variant: "primary",
group: "right",
action: "next",
},
{ ...BACK_BUTTON, key: "team-back" },
{ ...NEXT_BUTTON, key: "team-next" },
],
},
"desktop-install": {
@@ -97,13 +95,7 @@ export const SLIDE_DEFINITIONS: Record<SlideId, SlideDefinition> = {
DesktopInstallSlide({ osLabel, osUrl, osOptions, onDownloadUrlChange }),
hero: { type: "dual-icon" },
buttons: [
{
key: "desktop-back",
type: "icon",
icon: "chevron-left",
group: "left",
action: "prev",
},
{ ...BACK_BUTTON, key: "desktop-back" },
{
key: "desktop-skip",
type: "button",
@@ -123,8 +115,3 @@ export const SLIDE_DEFINITIONS: Record<SlideId, SlideDefinition> = {
],
},
};
export const FLOW_SEQUENCES = {
saasTrialUser: ["welcome", "free-trial", "desktop-install"] as SlideId[],
saasPaidUser: ["welcome", "desktop-install"] as SlideId[],
};