refactor: centralize public coach site copy

This commit is contained in:
Flatlogic Bot 2026-06-11 12:05:42 +00:00
parent 0dbbbdff80
commit 4b237149e8
3 changed files with 92 additions and 64 deletions

View 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;

View File

@ -4,6 +4,7 @@ import Head from 'next/head';
import Link from 'next/link'; import Link from 'next/link';
import LayoutGuest from '../layouts/Guest'; import LayoutGuest from '../layouts/Guest';
import { getPageTitle } from '../config'; import { getPageTitle } from '../config';
import { publicCoachSite } from '../coachingSite';
const ui = { const ui = {
page: 'bg-[#fffdf9] text-[#19192d]', page: 'bg-[#fffdf9] text-[#19192d]',
@ -23,28 +24,6 @@ const ui = {
heading: 'font-serif font-semibold tracking-tight text-[#19192d]', 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() { function Nav() {
return ( return (
<header className='sticky top-3 z-50 px-5 pt-5'> <header className='sticky top-3 z-50 px-5 pt-5'>
@ -102,12 +81,10 @@ export default function AboutCoach() {
<div> <div>
<p className={ui.overline}>About the coach</p> <p className={ui.overline}>About the coach</p>
<h1 className={`${ui.heading} mt-5 text-5xl leading-tight md:text-6xl`}> <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> </h1>
<p className={`mt-7 text-xl leading-8 ${ui.muted}`}> <p className={`mt-7 text-xl leading-8 ${ui.muted}`}>
Use this page to introduce the coach, their niche, credentials, {publicCoachSite.coach.aboutIntro}
and point of view. The template is built for practices where trust,
confidentiality, and continuity matter as much as booking the first call.
</p> </p>
<div className='mt-9 flex flex-wrap gap-3'> <div className='mt-9 flex flex-wrap gap-3'>
<Link href='/intake/' className={`rounded-none px-7 py-4 font-semibold ${ui.button}`}> <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]'> <p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'>
Coach profile Coach profile
</p> </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}`}> <p className={`mt-2 text-lg ${ui.muted}`}>
Executive coach for founders, operators, and leadership teams. {publicCoachSite.coach.title}
</p> </p>
</div> </div>
<div className='mt-6 grid gap-3'> <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'> <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'> <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`}> <section className={`${ui.section} pt-0`}>
<div className='grid gap-5 md:grid-cols-3'> <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`}> <div key={title} className={`${ui.card} p-6`}>
<p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'> <p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'>
Principle Principle
@ -175,7 +154,10 @@ export default function AboutCoach() {
<footer className={`border-t px-5 py-10 ${ui.border}`}> <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}`}> <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'> <div className='flex gap-5'>
<Link href='/privacy-policy/'>Privacy Policy</Link> <Link href='/privacy-policy/'>Privacy Policy</Link>
<Link href='/terms-of-use/'>Terms of Use</Link> <Link href='/terms-of-use/'>Terms of Use</Link>

View File

@ -4,6 +4,7 @@ import Head from 'next/head';
import Link from 'next/link'; import Link from 'next/link';
import LayoutGuest from '../layouts/Guest'; import LayoutGuest from '../layouts/Guest';
import { getPageTitle } from '../config'; import { getPageTitle } from '../config';
import { publicCoachSite } from '../coachingSite';
const ui = { const ui = {
page: 'bg-[#fffdf9] text-[#19192d]', page: 'bg-[#fffdf9] text-[#19192d]',
@ -22,36 +23,6 @@ const ui = {
heading: 'font-serif font-semibold tracking-tight text-[#19192d]', 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() { function Nav() {
return ( return (
<header className='sticky top-3 z-50 px-5 pt-5'> <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`}> <section className={`${ui.section} pt-0`}>
<div className='grid gap-5 lg:grid-cols-3'> <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 key={item.name} className={`${ui.card} flex flex-col p-6`}>
<div className='border-b border-[#19192d]/10 pb-5'> <div className='border-b border-[#19192d]/10 pb-5'>
<p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'> <p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'>
@ -159,7 +130,7 @@ export default function Services() {
</p> </p>
</div> </div>
<div className='grid gap-3 sm:grid-cols-2'> <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'> <div key={item} className='rounded-none bg-[#fffdf9] p-4 font-semibold'>
{item} {item}
</div> </div>
@ -184,7 +155,10 @@ export default function Services() {
<footer className={`border-t px-5 py-10 ${ui.border}`}> <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}`}> <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'> <div className='flex gap-5'>
<Link href='/privacy-policy/'>Privacy Policy</Link> <Link href='/privacy-policy/'>Privacy Policy</Link>
<Link href='/terms-of-use/'>Terms of Use</Link> <Link href='/terms-of-use/'>Terms of Use</Link>