feat: add calendly booking links

This commit is contained in:
Flatlogic Bot 2026-06-11 16:39:28 +00:00
parent 2757e36bdd
commit 614eded6b4
7 changed files with 98 additions and 28 deletions

View File

@ -2,6 +2,11 @@ export const publicCoachSite = {
workspaceName: 'Coaching SaaS Workspace', workspaceName: 'Coaching SaaS Workspace',
footerLine: 'Coaching beyond the session.', footerLine: 'Coaching beyond the session.',
assessmentPath: '/intake/?package=leadership-assessment', assessmentPath: '/intake/?package=leadership-assessment',
calendly: {
assessmentUrl: 'https://calendly.com/your-coach/coaching-assessment',
oneOnOneUrl: 'https://calendly.com/your-coach/one-on-one-coaching-session',
packageConsultUrl: 'https://calendly.com/your-coach/package-consult',
},
socialLinks: [ socialLinks: [
{ {
label: 'LinkedIn', label: 'LinkedIn',
@ -46,7 +51,8 @@ export const publicCoachSite = {
name: 'Leadership Assessment', name: 'Leadership Assessment',
price: 'Intro', price: 'Intro',
bookingLabel: 'Book assessment', bookingLabel: 'Book assessment',
bookingPath: '/intake/?package=leadership-assessment', bookingPath: 'https://calendly.com/your-coach/coaching-assessment',
intakePath: '/intake/?package=leadership-assessment',
copy: 'A focused first step for founders and senior leaders who want to clarify the coaching agenda.', copy: 'A focused first step for founders and senior leaders who want to clarify the coaching agenda.',
items: [ items: [
'intake review', 'intake review',
@ -59,7 +65,8 @@ export const publicCoachSite = {
name: 'Founder Coaching', name: 'Founder Coaching',
price: 'Monthly', price: 'Monthly',
bookingLabel: 'Book monthly coaching', bookingLabel: 'Book monthly coaching',
bookingPath: '/intake/?package=founder-coaching', bookingPath: 'https://calendly.com/your-coach/one-on-one-coaching-session',
intakePath: '/intake/?package=founder-coaching',
copy: 'Ongoing 1:1 coaching with session memory, commitments, resources, and between-session accountability.', copy: 'Ongoing 1:1 coaching with session memory, commitments, resources, and between-session accountability.',
items: [ items: [
'two sessions per month', 'two sessions per month',
@ -72,7 +79,8 @@ export const publicCoachSite = {
name: 'Executive Operating Rhythm', name: 'Executive Operating Rhythm',
price: 'Custom', price: 'Custom',
bookingLabel: 'Book package consult', bookingLabel: 'Book package consult',
bookingPath: '/intake/?package=executive-operating-rhythm', bookingPath: 'https://calendly.com/your-coach/package-consult',
intakePath: '/intake/?package=executive-operating-rhythm',
copy: 'A deeper engagement for leaders navigating delegation, decision rights, and team operating cadence.', copy: 'A deeper engagement for leaders navigating delegation, decision rights, and team operating cadence.',
items: [ items: [
'leadership themes', 'leadership themes',

View File

@ -0,0 +1,30 @@
import Link from 'next/link';
import React from 'react';
type BookingLinkProps = {
href: string;
children: React.ReactNode;
className?: string;
};
export default function BookingLink({
href,
children,
className,
}: BookingLinkProps) {
const isExternal = /^https?:\/\//.test(href);
if (isExternal) {
return (
<a href={href} className={className} target='_blank' rel='noreferrer'>
{children}
</a>
);
}
return (
<Link href={href} className={className}>
{children}
</Link>
);
}

View File

@ -1,4 +1,5 @@
import Link from 'next/link'; import Link from 'next/link';
import BookingLink from './BookingLink';
import { publicCoachSite } from '../coachingSite'; import { publicCoachSite } from '../coachingSite';
const links = [ const links = [
@ -30,12 +31,12 @@ export default function PublicSiteNav() {
))} ))}
</nav> </nav>
<Link <BookingLink
href={publicCoachSite.assessmentPath} href={publicCoachSite.calendly.assessmentUrl}
className='rounded-none bg-[#35b7a5] px-5 py-2.5 text-sm font-semibold text-white transition hover:brightness-105' className='rounded-none bg-[#35b7a5] px-5 py-2.5 text-sm font-semibold text-white transition hover:brightness-105'
> >
Start assessment Schedule assessment
</Link> </BookingLink>
</div> </div>
<nav className='mx-auto mt-2 flex max-w-6xl gap-4 overflow-x-auto border border-[#19192d]/10 bg-white px-4 py-3 text-sm font-semibold text-[#19192d] md:hidden'> <nav className='mx-auto mt-2 flex max-w-6xl gap-4 overflow-x-auto border border-[#19192d]/10 bg-white px-4 py-3 text-sm font-semibold text-[#19192d] md:hidden'>

View File

@ -3,6 +3,7 @@ import type { ReactElement } from 'react';
import Head from 'next/head'; import Head from 'next/head';
import Image from 'next/image'; import Image from 'next/image';
import Link from 'next/link'; import Link from 'next/link';
import BookingLink from '../components/BookingLink';
import PublicSiteNav from '../components/PublicSiteNav'; import PublicSiteNav from '../components/PublicSiteNav';
import LayoutGuest from '../layouts/Guest'; import LayoutGuest from '../layouts/Guest';
import { getPageTitle } from '../config'; import { getPageTitle } from '../config';
@ -55,8 +56,11 @@ export default function AboutCoach() {
{publicCoachSite.coach.aboutIntro} {publicCoachSite.coach.aboutIntro}
</p> </p>
<div className='mt-9 flex flex-wrap gap-3'> <div className='mt-9 flex flex-wrap gap-3'>
<Link href={publicCoachSite.assessmentPath} className={`rounded-none px-7 py-4 font-semibold ${ui.button}`}> <BookingLink href={publicCoachSite.calendly.assessmentUrl} className={`rounded-none px-7 py-4 font-semibold ${ui.button}`}>
Book assessment Schedule assessment
</BookingLink>
<Link href={publicCoachSite.assessmentPath} className='rounded-none border border-[#19192d]/10 bg-white px-7 py-4 font-semibold text-[#19192d]'>
Send intake
</Link> </Link>
<Link <Link
href='/services/' href='/services/'
@ -140,9 +144,9 @@ export default function AboutCoach() {
Start with an assessment and bring context into the first call. Start with an assessment and bring context into the first call.
</h2> </h2>
<div className='mt-8 flex justify-center'> <div className='mt-8 flex justify-center'>
<Link href={publicCoachSite.assessmentPath} className={`rounded-none px-8 py-4 font-semibold ${ui.button}`}> <BookingLink href={publicCoachSite.calendly.assessmentUrl} className={`rounded-none px-8 py-4 font-semibold ${ui.button}`}>
Book assessment Schedule assessment
</Link> </BookingLink>
</div> </div>
</section> </section>

View File

@ -3,6 +3,7 @@ import type { ReactElement } from 'react';
import Head from 'next/head'; import Head from 'next/head';
import Image from 'next/image'; import Image from 'next/image';
import Link from 'next/link'; import Link from 'next/link';
import BookingLink from '../components/BookingLink';
import PublicSiteNav from '../components/PublicSiteNav'; import PublicSiteNav from '../components/PublicSiteNav';
import { publicCoachSite } from '../coachingSite'; import { publicCoachSite } from '../coachingSite';
import LayoutGuest from '../layouts/Guest'; import LayoutGuest from '../layouts/Guest';
@ -180,12 +181,18 @@ export default function Starter() {
captures what makes your coaching yours, so clients stay connected captures what makes your coaching yours, so clients stay connected
to the work between sessions. to the work between sessions.
</p> </p>
<div className='mt-9 flex justify-center'> <div className='mt-9 flex flex-wrap justify-center gap-3'>
<Link <BookingLink
href={publicCoachSite.assessmentPath} href={publicCoachSite.calendly.assessmentUrl}
className={`rounded-none px-10 py-5 text-lg font-semibold ${ui.button}`} className={`rounded-none px-10 py-5 text-lg font-semibold ${ui.button}`}
> >
Book assessment Schedule assessment
</BookingLink>
<Link
href={publicCoachSite.assessmentPath}
className='rounded-none border border-[#19192d]/10 bg-white px-10 py-5 text-lg font-semibold text-[#19192d]'
>
Send intake
</Link> </Link>
</div> </div>
<p className={`mt-5 text-lg ${ui.muted}`}> <p className={`mt-5 text-lg ${ui.muted}`}>
@ -525,12 +532,12 @@ export default function Starter() {
Designed for real client work. Designed for real client work.
</h2> </h2>
</div> </div>
<Link <BookingLink
href={publicCoachSite.assessmentPath} href={publicCoachSite.calendly.assessmentUrl}
className={`rounded-none px-6 py-3 text-center font-semibold ${ui.button}`} className={`rounded-none px-6 py-3 text-center font-semibold ${ui.button}`}
> >
Book assessment Schedule assessment
</Link> </BookingLink>
</div> </div>
<div className='grid grid-cols-1 gap-4 md:grid-cols-3'> <div className='grid grid-cols-1 gap-4 md:grid-cols-3'>
{publicCoachSite.testimonials.map((item) => ( {publicCoachSite.testimonials.map((item) => (
@ -581,12 +588,12 @@ export default function Starter() {
</div> </div>
))} ))}
</div> </div>
<Link <BookingLink
href={publicCoachSite.assessmentPath} href={publicCoachSite.calendly.assessmentUrl}
className={`mt-8 inline-flex rounded-none px-7 py-4 font-semibold ${ui.button}`} className={`mt-8 inline-flex rounded-none px-7 py-4 font-semibold ${ui.button}`}
> >
Book assessment Schedule assessment
</Link> </BookingLink>
</div> </div>
</div> </div>
</section> </section>

View File

@ -4,6 +4,7 @@ import Image from 'next/image';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React from 'react'; import React from 'react';
import BookingLink from '../components/BookingLink';
import { publicCoachSite } from '../coachingSite'; import { publicCoachSite } from '../coachingSite';
import LayoutGuest from '../layouts/Guest'; import LayoutGuest from '../layouts/Guest';
import { getPageTitle } from '../config'; import { getPageTitle } from '../config';
@ -139,6 +140,21 @@ export default function Intake() {
Share what you want to work on. Your coach can review this, create Share what you want to work on. Your coach can review this, create
a client record, and prepare the first session around your goals. a client record, and prepare the first session around your goals.
</p> </p>
<div className='mt-7 border border-[#19192d]/10 bg-white p-5'>
<p className='text-xs font-semibold uppercase tracking-[0.22em] text-[#35b7a5]'>
Prefer to book first?
</p>
<p className='mt-2 text-sm leading-6 text-[#72798a]'>
Use Calendly to schedule the first assessment, then send intake
context when you are ready.
</p>
<BookingLink
href={publicCoachSite.calendly.assessmentUrl}
className='mt-4 inline-flex rounded-none bg-[#35b7a5] px-5 py-3 text-sm font-semibold text-white transition hover:brightness-105'
>
Schedule on Calendly
</BookingLink>
</div>
<div className='mt-8 overflow-hidden border border-[#19192d]/10 bg-white'> <div className='mt-8 overflow-hidden border border-[#19192d]/10 bg-white'>
<Image <Image
src='/images/coaching/coaching-intake.jpg' src='/images/coaching/coaching-intake.jpg'

View File

@ -3,6 +3,7 @@ import type { ReactElement } from 'react';
import Head from 'next/head'; import Head from 'next/head';
import Image from 'next/image'; import Image from 'next/image';
import Link from 'next/link'; import Link from 'next/link';
import BookingLink from '../components/BookingLink';
import PublicSiteNav from '../components/PublicSiteNav'; import PublicSiteNav from '../components/PublicSiteNav';
import LayoutGuest from '../layouts/Guest'; import LayoutGuest from '../layouts/Guest';
import { getPageTitle } from '../config'; import { getPageTitle } from '../config';
@ -76,8 +77,11 @@ export default function Services() {
</div> </div>
))} ))}
</div> </div>
<Link href={item.bookingPath} className={`mt-7 inline-flex justify-center rounded-none px-6 py-4 font-semibold ${ui.button}`}> <BookingLink href={item.bookingPath} className={`mt-7 inline-flex justify-center rounded-none px-6 py-4 font-semibold ${ui.button}`}>
{item.bookingLabel} {item.bookingLabel}
</BookingLink>
<Link href={item.intakePath} className='mt-3 inline-flex justify-center rounded-none border border-[#19192d]/10 bg-white px-6 py-3 text-sm font-semibold text-[#19192d]'>
Send intake first
</Link> </Link>
</div> </div>
))} ))}
@ -125,9 +129,9 @@ export default function Services() {
Start with intake, then convert the lead into a client workspace. Start with intake, then convert the lead into a client workspace.
</h2> </h2>
<div className='mt-8 flex justify-center'> <div className='mt-8 flex justify-center'>
<Link href={publicCoachSite.assessmentPath} className={`rounded-none px-8 py-4 font-semibold ${ui.button}`}> <BookingLink href={publicCoachSite.calendly.assessmentUrl} className={`rounded-none px-8 py-4 font-semibold ${ui.button}`}>
Book assessment Schedule assessment
</Link> </BookingLink>
</div> </div>
</section> </section>