From 2d9eb04dc409b89797070a16c50d526b715a310d Mon Sep 17 00:00:00 2001 From: Logan Nguyen Date: Sat, 27 Jun 2026 00:37:07 -0500 Subject: [PATCH] chore(onboarding): align founder note and CTA with landing page copy Signed-off-by: Logan Nguyen --- src/settings/tabs/AboutTab.tsx | 7 +-- src/view/onboarding/SubscribeStep.tsx | 11 ++--- .../__tests__/SubscribeStep.test.tsx | 44 ++++++------------- 3 files changed, 23 insertions(+), 39 deletions(-) diff --git a/src/settings/tabs/AboutTab.tsx b/src/settings/tabs/AboutTab.tsx index 19fc5cb3..a3556ea1 100644 --- a/src/settings/tabs/AboutTab.tsx +++ b/src/settings/tabs/AboutTab.tsx @@ -455,7 +455,7 @@ function ShapeThukiCard() { className={styles.rowHelper} style={{ marginBottom: 10, fontStyle: 'italic' }} > - Hey there, I'm{' '} + Hey, I'm{' '} Logan - , founder of Thuki. I'd love to learn how you use it and hear your + , the founder here. Thuki is early and I'm building it around how people + really use it. I'd love to learn how you will use it and hear your ideas, so I can shape what's next to genuinely help you. Leave your - email and I'll personally reach out, I'd love to talk! + email and I'll reach out personally. Thanks!
diff --git a/src/view/onboarding/SubscribeStep.tsx b/src/view/onboarding/SubscribeStep.tsx index dc36fd0b..ad655f44 100644 --- a/src/view/onboarding/SubscribeStep.tsx +++ b/src/view/onboarding/SubscribeStep.tsx @@ -267,7 +267,7 @@ export function SubscribeStep({ onContinue, downloadStatus }: Props) { }} > - Hey there, I'm{' '} + Hey, I'm{' '} Logan - , founder of Thuki. I'd love to learn how you actually use it and hear + , the founder here. Thuki is early and I'm building it around how + people really use it. I'd love to learn how you will use it and hear your ideas, so I can shape these upcoming features to genuinely help - you. Leave your email and I'll personally reach out, I'd love to talk! + you. Leave your email and I'll reach out personally. Thanks!

@@ -334,7 +335,7 @@ export function SubscribeStep({ onContinue, downloadStatus }: Props) { {sendError ? ( diff --git a/src/view/onboarding/__tests__/SubscribeStep.test.tsx b/src/view/onboarding/__tests__/SubscribeStep.test.tsx index 1bdfde03..bbb5cfda 100644 --- a/src/view/onboarding/__tests__/SubscribeStep.test.tsx +++ b/src/view/onboarding/__tests__/SubscribeStep.test.tsx @@ -51,10 +51,10 @@ describe('SubscribeStep', () => { it('renders the founder note with the inline Logan link', () => { render(); expect( - screen.getByText(/founder of Thuki/i, { exact: false }), + screen.getByText(/the founder here/i, { exact: false }), ).toBeInTheDocument(); expect( - screen.getByText(/I'll personally reach out, I'd love to talk!/i, { + screen.getByText(/I'll reach out personally\. Thanks!/i, { exact: false, }), ).toBeInTheDocument(); @@ -77,9 +77,7 @@ describe('SubscribeStep', () => { const onContinue = vi.fn(); render(); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); expect( screen.getByText(/enter a valid email address/i), @@ -98,9 +96,7 @@ describe('SubscribeStep', () => { fireEvent.change(screen.getByLabelText('Email address'), { target: { value: 'not-an-email' }, }); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); expect( screen.getByText(/enter a valid email address/i), @@ -115,9 +111,7 @@ describe('SubscribeStep', () => { fireEvent.change(screen.getByLabelText('Email address'), { target: { value: ' founder@thuki.app ' }, }); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); expect(invoke).toHaveBeenCalledWith('subscribe_email', { email: 'founder@thuki.app', @@ -142,7 +136,7 @@ describe('SubscribeStep', () => { target: { value: 'founder@thuki.app' }, }); const button = screen.getByRole('button', { - name: /help shape what's next for thuki/i, + name: /count me in/i, }); fireEvent.click(button); @@ -166,9 +160,7 @@ describe('SubscribeStep', () => { fireEvent.change(screen.getByLabelText('Email address'), { target: { value: 'founder@thuki.app' }, }); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); // Skip while the subscribe is still pending; this is the single hand-off. fireEvent.click(screen.getByRole('button', { name: /maybe later/i })); expect(onContinue).toHaveBeenCalledTimes(1); @@ -189,9 +181,7 @@ describe('SubscribeStep', () => { fireEvent.change(screen.getByLabelText('Email address'), { target: { value: 'founder@thuki.app' }, }); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); expect( await screen.findByText(/couldn't send right now/i), @@ -199,7 +189,7 @@ describe('SubscribeStep', () => { expect(onContinue).not.toHaveBeenCalled(); // The button returns to its idle, clickable state for a retry. expect( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), + screen.getByRole('button', { name: /count me in/i }), ).not.toBeDisabled(); // "Maybe later" must still be a way out after a failed send. @@ -215,9 +205,7 @@ describe('SubscribeStep', () => { fireEvent.change(screen.getByLabelText('Email address'), { target: { value: 'founder@thuki.app' }, }); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); expect(await screen.findByText(/too many requests/i)).toBeInTheDocument(); expect(onContinue).not.toHaveBeenCalled(); @@ -230,9 +218,7 @@ describe('SubscribeStep', () => { fireEvent.change(screen.getByLabelText('Email address'), { target: { value: 'founder@thuki.app' }, }); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); expect( await screen.findByText(/couldn't send right now/i), ).toBeInTheDocument(); @@ -251,9 +237,7 @@ describe('SubscribeStep', () => { fireEvent.change(screen.getByLabelText('Email address'), { target: { value: 'not-an-email' }, }); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); expect(invoke).not.toHaveBeenCalledWith( 'subscribe_email', @@ -264,9 +248,7 @@ describe('SubscribeStep', () => { it('clears the error as soon as the user edits the email', () => { render(); - fireEvent.click( - screen.getByRole('button', { name: /help shape what's next for thuki/i }), - ); + fireEvent.click(screen.getByRole('button', { name: /count me in/i })); expect( screen.getByText(/enter a valid email address/i), ).toBeInTheDocument();