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',
footerLine: 'Coaching beyond the session.',
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: [
{
label: 'LinkedIn',
@ -46,7 +51,8 @@ export const publicCoachSite = {
name: 'Leadership Assessment',
price: 'Intro',
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.',
items: [
'intake review',
@ -59,7 +65,8 @@ export const publicCoachSite = {
name: 'Founder Coaching',
price: 'Monthly',
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.',
items: [
'two sessions per month',
@ -72,7 +79,8 @@ export const publicCoachSite = {
name: 'Executive Operating Rhythm',
price: 'Custom',
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.',
items: [
'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 BookingLink from './BookingLink';
import { publicCoachSite } from '../coachingSite';
const links = [
@ -30,12 +31,12 @@ export default function PublicSiteNav() {
))}
</nav>
<Link
href={publicCoachSite.assessmentPath}
<BookingLink
href={publicCoachSite.calendly.assessmentUrl}
className='rounded-none bg-[#35b7a5] px-5 py-2.5 text-sm font-semibold text-white transition hover:brightness-105'
>
Start assessment
</Link>
Schedule assessment
</BookingLink>
</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'>

View File

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

View File

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

View File

@ -4,6 +4,7 @@ import Image from 'next/image';
import Link from 'next/link';
import { useRouter } from 'next/router';
import React from 'react';
import BookingLink from '../components/BookingLink';
import { publicCoachSite } from '../coachingSite';
import LayoutGuest from '../layouts/Guest';
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
a client record, and prepare the first session around your goals.
</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'>
<Image
src='/images/coaching/coaching-intake.jpg'

View File

@ -3,6 +3,7 @@ import type { ReactElement } from 'react';
import Head from 'next/head';
import Image from 'next/image';
import Link from 'next/link';
import BookingLink from '../components/BookingLink';
import PublicSiteNav from '../components/PublicSiteNav';
import LayoutGuest from '../layouts/Guest';
import { getPageTitle } from '../config';
@ -76,8 +77,11 @@ export default function Services() {
</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}
</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>
</div>
))}
@ -125,9 +129,9 @@ export default function Services() {
Start with intake, then convert the lead into a client workspace.
</h2>
<div className='mt-8 flex justify-center'>
<Link href={publicCoachSite.assessmentPath} className={`rounded-none px-8 py-4 font-semibold ${ui.button}`}>
Book assessment
</Link>
<BookingLink href={publicCoachSite.calendly.assessmentUrl} className={`rounded-none px-8 py-4 font-semibold ${ui.button}`}>
Schedule assessment
</BookingLink>
</div>
</section>