refactor: centralize public coach site copy
This commit is contained in:
parent
0dbbbdff80
commit
4b237149e8
72
frontend/src/coachingSite.ts
Normal file
72
frontend/src/coachingSite.ts
Normal file
@ -0,0 +1,72 @@
|
||||
export const publicCoachSite = {
|
||||
workspaceName: 'Coaching SaaS Workspace',
|
||||
footerLine: 'Coaching beyond the session.',
|
||||
coach: {
|
||||
name: 'Alex Morgan',
|
||||
title: 'Executive coach for founders, operators, and leadership teams.',
|
||||
aboutHeadline:
|
||||
'Coaching for founders and senior leaders who are carrying the room.',
|
||||
aboutIntro:
|
||||
'Use this page to introduce the coach, their niche, credentials, and point of view. The template is built for practices where trust, confidentiality, and continuity matter as much as booking the first call.',
|
||||
credentials: [
|
||||
'Founder and executive coaching',
|
||||
'Leadership transitions',
|
||||
'Decision systems and operating rhythm',
|
||||
'Confidential client workspace',
|
||||
],
|
||||
},
|
||||
principles: [
|
||||
[
|
||||
'Still human',
|
||||
'AI helps with memory, prep, and follow-up. The coaching judgment stays with the coach.',
|
||||
],
|
||||
[
|
||||
'Between-session continuity',
|
||||
'The work does not disappear when the call ends. Notes, commitments, and resources stay connected.',
|
||||
],
|
||||
[
|
||||
'Private by default',
|
||||
'Private coach notes stay private. Clients see only approved notes, commitments, and resources.',
|
||||
],
|
||||
],
|
||||
packages: [
|
||||
{
|
||||
name: 'Leadership Assessment',
|
||||
price: 'Intro',
|
||||
copy: 'A focused first step for founders and senior leaders who want to clarify the coaching agenda.',
|
||||
items: [
|
||||
'intake review',
|
||||
'goals and pressure points',
|
||||
'recommended coaching plan',
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Founder Coaching',
|
||||
price: 'Monthly',
|
||||
copy: 'Ongoing 1:1 coaching with session memory, commitments, resources, and between-session accountability.',
|
||||
items: [
|
||||
'two sessions per month',
|
||||
'shared client portal',
|
||||
'coach-approved follow-up',
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Executive Operating Rhythm',
|
||||
price: 'Custom',
|
||||
copy: 'A deeper engagement for leaders navigating delegation, decision rights, and team operating cadence.',
|
||||
items: [
|
||||
'leadership themes',
|
||||
'decision-system work',
|
||||
'next-session prep briefs',
|
||||
],
|
||||
},
|
||||
],
|
||||
outcomes: [
|
||||
'Clearer decisions',
|
||||
'Better delegation boundaries',
|
||||
'Stronger leadership presence',
|
||||
'Follow-through between sessions',
|
||||
'A private place for client resources',
|
||||
'Less admin after every session',
|
||||
],
|
||||
} as const;
|
||||
@ -4,6 +4,7 @@ import Head from 'next/head';
|
||||
import Link from 'next/link';
|
||||
import LayoutGuest from '../layouts/Guest';
|
||||
import { getPageTitle } from '../config';
|
||||
import { publicCoachSite } from '../coachingSite';
|
||||
|
||||
const ui = {
|
||||
page: 'bg-[#fffdf9] text-[#19192d]',
|
||||
@ -23,28 +24,6 @@ const ui = {
|
||||
heading: 'font-serif font-semibold tracking-tight text-[#19192d]',
|
||||
};
|
||||
|
||||
const credentials = [
|
||||
'Founder and executive coaching',
|
||||
'Leadership transitions',
|
||||
'Decision systems and operating rhythm',
|
||||
'Confidential client workspace',
|
||||
];
|
||||
|
||||
const principles = [
|
||||
[
|
||||
'Still human',
|
||||
'AI helps with memory, prep, and follow-up. The coaching judgment stays with the coach.',
|
||||
],
|
||||
[
|
||||
'Between-session continuity',
|
||||
'The work does not disappear when the call ends. Notes, commitments, and resources stay connected.',
|
||||
],
|
||||
[
|
||||
'Private by default',
|
||||
'Private coach notes stay private. Clients see only approved notes, commitments, and resources.',
|
||||
],
|
||||
];
|
||||
|
||||
function Nav() {
|
||||
return (
|
||||
<header className='sticky top-3 z-50 px-5 pt-5'>
|
||||
@ -102,12 +81,10 @@ export default function AboutCoach() {
|
||||
<div>
|
||||
<p className={ui.overline}>About the coach</p>
|
||||
<h1 className={`${ui.heading} mt-5 text-5xl leading-tight md:text-6xl`}>
|
||||
Coaching for founders and senior leaders who are carrying the room.
|
||||
{publicCoachSite.coach.aboutHeadline}
|
||||
</h1>
|
||||
<p className={`mt-7 text-xl leading-8 ${ui.muted}`}>
|
||||
Use this page to introduce the coach, their niche, credentials,
|
||||
and point of view. The template is built for practices where trust,
|
||||
confidentiality, and continuity matter as much as booking the first call.
|
||||
{publicCoachSite.coach.aboutIntro}
|
||||
</p>
|
||||
<div className='mt-9 flex flex-wrap gap-3'>
|
||||
<Link href='/intake/' className={`rounded-none px-7 py-4 font-semibold ${ui.button}`}>
|
||||
@ -127,13 +104,15 @@ export default function AboutCoach() {
|
||||
<p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'>
|
||||
Coach profile
|
||||
</p>
|
||||
<h2 className='mt-3 text-3xl font-semibold'>Alex Morgan</h2>
|
||||
<h2 className='mt-3 text-3xl font-semibold'>
|
||||
{publicCoachSite.coach.name}
|
||||
</h2>
|
||||
<p className={`mt-2 text-lg ${ui.muted}`}>
|
||||
Executive coach for founders, operators, and leadership teams.
|
||||
{publicCoachSite.coach.title}
|
||||
</p>
|
||||
</div>
|
||||
<div className='mt-6 grid gap-3'>
|
||||
{credentials.map((item) => (
|
||||
{publicCoachSite.coach.credentials.map((item) => (
|
||||
<div key={item} className='flex items-center gap-3 rounded-none bg-[#fffdf9] p-4'>
|
||||
<span className='flex h-7 w-7 items-center justify-center rounded-none bg-[#35b7a5] text-sm font-semibold text-white'>
|
||||
✓
|
||||
@ -147,7 +126,7 @@ export default function AboutCoach() {
|
||||
|
||||
<section className={`${ui.section} pt-0`}>
|
||||
<div className='grid gap-5 md:grid-cols-3'>
|
||||
{principles.map(([title, copy]) => (
|
||||
{publicCoachSite.principles.map(([title, copy]) => (
|
||||
<div key={title} className={`${ui.card} p-6`}>
|
||||
<p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'>
|
||||
Principle
|
||||
@ -175,7 +154,10 @@ export default function AboutCoach() {
|
||||
|
||||
<footer className={`border-t px-5 py-10 ${ui.border}`}>
|
||||
<div className={`mx-auto flex max-w-7xl flex-col justify-between gap-5 text-sm md:flex-row ${ui.muted}`}>
|
||||
<p>© 2026 Coaching SaaS Workspace. Coaching beyond the session.</p>
|
||||
<p>
|
||||
© 2026 {publicCoachSite.workspaceName}.{' '}
|
||||
{publicCoachSite.footerLine}
|
||||
</p>
|
||||
<div className='flex gap-5'>
|
||||
<Link href='/privacy-policy/'>Privacy Policy</Link>
|
||||
<Link href='/terms-of-use/'>Terms of Use</Link>
|
||||
|
||||
@ -4,6 +4,7 @@ import Head from 'next/head';
|
||||
import Link from 'next/link';
|
||||
import LayoutGuest from '../layouts/Guest';
|
||||
import { getPageTitle } from '../config';
|
||||
import { publicCoachSite } from '../coachingSite';
|
||||
|
||||
const ui = {
|
||||
page: 'bg-[#fffdf9] text-[#19192d]',
|
||||
@ -22,36 +23,6 @@ const ui = {
|
||||
heading: 'font-serif font-semibold tracking-tight text-[#19192d]',
|
||||
};
|
||||
|
||||
const packages = [
|
||||
{
|
||||
name: 'Leadership Assessment',
|
||||
price: 'Intro',
|
||||
copy: 'A focused first step for founders and senior leaders who want to clarify the coaching agenda.',
|
||||
items: ['intake review', 'goals and pressure points', 'recommended coaching plan'],
|
||||
},
|
||||
{
|
||||
name: 'Founder Coaching',
|
||||
price: 'Monthly',
|
||||
copy: 'Ongoing 1:1 coaching with session memory, commitments, resources, and between-session accountability.',
|
||||
items: ['two sessions per month', 'shared client portal', 'coach-approved follow-up'],
|
||||
},
|
||||
{
|
||||
name: 'Executive Operating Rhythm',
|
||||
price: 'Custom',
|
||||
copy: 'A deeper engagement for leaders navigating delegation, decision rights, and team operating cadence.',
|
||||
items: ['leadership themes', 'decision-system work', 'next-session prep briefs'],
|
||||
},
|
||||
];
|
||||
|
||||
const outcomes = [
|
||||
'Clearer decisions',
|
||||
'Better delegation boundaries',
|
||||
'Stronger leadership presence',
|
||||
'Follow-through between sessions',
|
||||
'A private place for client resources',
|
||||
'Less admin after every session',
|
||||
];
|
||||
|
||||
function Nav() {
|
||||
return (
|
||||
<header className='sticky top-3 z-50 px-5 pt-5'>
|
||||
@ -118,7 +89,7 @@ export default function Services() {
|
||||
|
||||
<section className={`${ui.section} pt-0`}>
|
||||
<div className='grid gap-5 lg:grid-cols-3'>
|
||||
{packages.map((item) => (
|
||||
{publicCoachSite.packages.map((item) => (
|
||||
<div key={item.name} className={`${ui.card} flex flex-col p-6`}>
|
||||
<div className='border-b border-[#19192d]/10 pb-5'>
|
||||
<p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'>
|
||||
@ -159,7 +130,7 @@ export default function Services() {
|
||||
</p>
|
||||
</div>
|
||||
<div className='grid gap-3 sm:grid-cols-2'>
|
||||
{outcomes.map((item) => (
|
||||
{publicCoachSite.outcomes.map((item) => (
|
||||
<div key={item} className='rounded-none bg-[#fffdf9] p-4 font-semibold'>
|
||||
{item}
|
||||
</div>
|
||||
@ -184,7 +155,10 @@ export default function Services() {
|
||||
|
||||
<footer className={`border-t px-5 py-10 ${ui.border}`}>
|
||||
<div className={`mx-auto flex max-w-7xl flex-col justify-between gap-5 text-sm md:flex-row ${ui.muted}`}>
|
||||
<p>© 2026 Coaching SaaS Workspace. Coaching beyond the session.</p>
|
||||
<p>
|
||||
© 2026 {publicCoachSite.workspaceName}.{' '}
|
||||
{publicCoachSite.footerLine}
|
||||
</p>
|
||||
<div className='flex gap-5'>
|
||||
<Link href='/privacy-policy/'>Privacy Policy</Link>
|
||||
<Link href='/terms-of-use/'>Terms of Use</Link>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user