From 218608d77070a871d2b8c0183dee88dade5e715c Mon Sep 17 00:00:00 2001 From: DevCalebR Date: Wed, 27 May 2026 19:53:05 -0400 Subject: [PATCH] Simplify public site header --- app/(auth)/sign-up/[[...sign-up]]/page.tsx | 6 +-- app/contact/page.tsx | 8 +-- app/page.tsx | 12 ++--- app/pricing/page.tsx | 10 ++-- app/simulator/page.tsx | 2 +- components/public-site-footer.tsx | 16 +++--- components/public-site-nav.tsx | 59 ++++++++++------------ tests/legal-pages.test.ts | 14 ++--- tests/public-auth-routing.test.ts | 3 +- tests/simulator-route.test.ts | 5 +- 10 files changed, 65 insertions(+), 70 deletions(-) diff --git a/app/(auth)/sign-up/[[...sign-up]]/page.tsx b/app/(auth)/sign-up/[[...sign-up]]/page.tsx index 05d6adb..9c4da2a 100644 --- a/app/(auth)/sign-up/[[...sign-up]]/page.tsx +++ b/app/(auth)/sign-up/[[...sign-up]]/page.tsx @@ -15,15 +15,15 @@ import { resolveSignedInAppDestination } from '@/lib/public-auth-routing'; function getIntentCopy(intent: string | undefined) { if (intent === 'pilot') { return { - label: 'Start Free Pilot', - title: 'Create your account and start pilot onboarding', + label: 'Start 14-day pilot', + title: 'Create your account and start your 14-day pilot', detail: 'This path is for a business owner creating a new CallbackCloser account. If you are already signed in, CallbackCloser will send you to onboarding, your dashboard, or the admin new-business flow based on your role.', }; } return { - label: 'Create Account', + label: 'Create account', title: 'Create your CallbackCloser account', detail: 'Create a new owner account here. Founder-operated customer pilot setup is separate and stays inside the admin new-business flow.', diff --git a/app/contact/page.tsx b/app/contact/page.tsx index ba165d9..df31f42 100644 --- a/app/contact/page.tsx +++ b/app/contact/page.tsx @@ -4,7 +4,7 @@ import { PublicSiteFooter } from '@/components/public-site-footer'; import { PublicSiteNav } from '@/components/public-site-nav'; import { buttonVariants } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; -import { PUBLIC_CREATE_ACCOUNT_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; +import { PUBLIC_SIGN_IN_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; const outreachInputs = [ 'Business name and service type', @@ -49,10 +49,10 @@ export default function ContactPage() {

Founder/operator customer pilot setup is separate from public signup and stays inside the admin new-business flow.

- Start pilot onboarding + Start 14-day pilot - - Create account + + Sign in View pricing diff --git a/app/page.tsx b/app/page.tsx index 770f652..81c1460 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -5,7 +5,7 @@ import { PublicSiteNav } from '@/components/public-site-nav'; import { Badge } from '@/components/ui/badge'; import { buttonVariants } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; -import { PUBLIC_CREATE_ACCOUNT_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; +import { PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; const roiPoints = [ { @@ -147,13 +147,13 @@ export default function LandingPage() {
- Start Free Pilot + Start 14-day pilot - - Create Account + + Try the simulator - See Demo + See demo
@@ -164,7 +164,7 @@ export default function LandingPage() {

Close one extra job and this can pay for itself.

- Start Free Pilot creates a new account or takes an existing user to the right next step automatically. + Start 14-day pilot creates a new account or takes an existing user to the right next step automatically. Founder-operated customer pilot setup stays separate in the admin new-business flow.

diff --git a/app/pricing/page.tsx b/app/pricing/page.tsx index ff85ca8..95aa8c6 100644 --- a/app/pricing/page.tsx +++ b/app/pricing/page.tsx @@ -5,7 +5,7 @@ import { PublicSiteNav } from '@/components/public-site-nav'; import { Badge } from '@/components/ui/badge'; import { buttonVariants } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; -import { PUBLIC_CREATE_ACCOUNT_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; +import { PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; const pricingPlans = [ { @@ -89,7 +89,7 @@ export default function PricingPage() { ) : ( - Start Free Pilot + Start 14-day pilot )} @@ -123,10 +123,10 @@ export default function PricingPage() {

STOP, START, and HELP handling remain part of the live messaging flow, and the consent page stays public.

Businesses remain responsible for lawful texting practices and consent requirements in their market.

- - Create account + + Start 14-day pilot - + Review SMS consent diff --git a/app/simulator/page.tsx b/app/simulator/page.tsx index 6382a15..674d37e 100644 --- a/app/simulator/page.tsx +++ b/app/simulator/page.tsx @@ -31,7 +31,7 @@ export default function SimulatorPage() {
- Start Free Pilot + Start 14-day pilot View product demo diff --git a/components/public-site-footer.tsx b/components/public-site-footer.tsx index 9355b0a..ade4d3a 100644 --- a/components/public-site-footer.tsx +++ b/components/public-site-footer.tsx @@ -1,18 +1,16 @@ import Link from 'next/link'; -import { PUBLIC_CREATE_ACCOUNT_PATH, PUBLIC_SIGN_IN_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; +import { PUBLIC_SIGN_IN_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; const footerLinks = [ - { href: PUBLIC_CREATE_ACCOUNT_PATH, label: 'Create account' }, - { href: PUBLIC_START_FREE_PILOT_PATH, label: 'Start Free Pilot' }, - { href: PUBLIC_SIGN_IN_PATH, label: 'Sign in' }, { href: '/pricing', label: 'Pricing' }, - { href: '/demo', label: 'Missed-Call Demo' }, { href: '/contact', label: 'Contact' }, - { href: '/privacy', label: 'Privacy Policy' }, - { href: '/terms', label: 'Terms & Conditions' }, - { href: '/refund', label: 'Refund' }, { href: '/sms-consent', label: 'SMS Consent' }, + { href: '/privacy', label: 'Privacy' }, + { href: '/terms', label: 'Terms' }, + { href: '/refund', label: 'Refund' }, + { href: PUBLIC_SIGN_IN_PATH, label: 'Sign in' }, + { href: PUBLIC_START_FREE_PILOT_PATH, label: 'Start 14-day pilot' }, ]; export function PublicSiteFooter() { @@ -22,7 +20,7 @@ export function PublicSiteFooter() {

CallbackCloser

Stop missed calls from turning into lost jobs with fast follow-up and clearer owner handoff.

-

White-glove onboarding plus visible Pricing, Privacy Policy, Terms & Conditions, Refund, and SMS Consent trust pages.

+

White-glove onboarding plus visible pricing, contact, refund, privacy, terms, and SMS consent trust pages.

Contact:{' '} diff --git a/components/public-site-nav.tsx b/components/public-site-nav.tsx index b32fa50..e5b74ff 100644 --- a/components/public-site-nav.tsx +++ b/components/public-site-nav.tsx @@ -2,50 +2,45 @@ import Link from 'next/link'; import { Badge } from '@/components/ui/badge'; import { buttonVariants } from '@/components/ui/button'; -import { PUBLIC_CREATE_ACCOUNT_PATH, PUBLIC_SIGN_IN_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; +import { PUBLIC_SIGN_IN_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing'; const primaryLinks = [ - { href: '/demo', label: 'Demo' }, { href: '/simulator', label: 'Simulator' }, { href: '/pricing', label: 'Pricing' }, { href: '/contact', label: 'Contact' }, - { href: '/sms-consent', label: 'SMS Consent' }, - { href: '/privacy', label: 'Privacy' }, - { href: '/terms', label: 'Terms' }, ]; export function PublicSiteNav() { return (

-
-
- - CallbackCloser - - - Built for local service businesses - -
+
+
+
+ + CallbackCloser + + + Built for local service businesses + +
-
- +
+ -
- - Sign in - - - Create account - - - Start Free Pilot - +
+ + Sign in + + + Start 14-day pilot + +
diff --git a/tests/legal-pages.test.ts b/tests/legal-pages.test.ts index fba441f..5a0f8d9 100644 --- a/tests/legal-pages.test.ts +++ b/tests/legal-pages.test.ts @@ -74,25 +74,25 @@ test('public-facing surfaces link to trust and contact routes', () => { assert.match(home, /href="\/pricing"/); assert.match(home, /href="\/sms-consent"/); - assert.match(home, /PUBLIC_CREATE_ACCOUNT_PATH/); assert.match(home, /PUBLIC_START_FREE_PILOT_PATH/); - assert.match(nav, /href: '\/demo'/); assert.match(nav, /href: '\/pricing'/); assert.match(nav, /href: '\/contact'/); - assert.match(nav, /href: '\/sms-consent'/); - assert.match(nav, /href: '\/privacy'/); - assert.match(nav, /href: '\/terms'/); + assert.match(nav, /href: '\/simulator'/); + assert.doesNotMatch(nav, /href: '\/demo'/); + assert.doesNotMatch(nav, /href: '\/sms-consent'/); + assert.doesNotMatch(nav, /href: '\/privacy'/); + assert.doesNotMatch(nav, /href: '\/terms'/); assert.match(nav, /PUBLIC_SIGN_IN_PATH/); - assert.match(nav, /PUBLIC_CREATE_ACCOUNT_PATH/); assert.match(nav, /PUBLIC_START_FREE_PILOT_PATH/); assert.match(footer, /href: '\/privacy'/); assert.match(footer, /href: '\/terms'/); assert.match(footer, /href: '\/refund'/); assert.match(footer, /href: '\/contact'/); assert.match(footer, /href: '\/sms-consent'/); - assert.match(footer, /PUBLIC_CREATE_ACCOUNT_PATH/); assert.match(footer, /PUBLIC_START_FREE_PILOT_PATH/); assert.match(footer, /PUBLIC_SIGN_IN_PATH/); + assert.doesNotMatch(footer, /PUBLIC_CREATE_ACCOUNT_PATH/); + assert.doesNotMatch(footer, /href: '\/demo'/); assert.match(billing, /href="\/pricing"/); assert.match(billing, /href="\/refund"/); diff --git a/tests/public-auth-routing.test.ts b/tests/public-auth-routing.test.ts index f62bf8c..129dc62 100644 --- a/tests/public-auth-routing.test.ts +++ b/tests/public-auth-routing.test.ts @@ -55,12 +55,13 @@ test('clerk auth surfaces use explicit path routing and fallback redirects', () assert.match(signUpPage, /routing="path"/); assert.match(signUpPage, /fallbackRedirectUrl=\{DEFAULT_CLERK_AFTER_AUTH_URL\}/); assert.match(signUpPage, / { +test('homepage keeps demo access while the top nav stays focused on the simulator route', () => { const home = read('app/page.tsx'); const nav = read('components/public-site-nav.tsx'); assert.match(home, /href="\/demo"/); - assert.match(nav, /href: '\/demo'/); + assert.match(home, /href="\/simulator"/); + assert.doesNotMatch(nav, /href: '\/demo'/); assert.match(nav, /href: '\/simulator'/); });