diff --git a/backend/src/db/migrations/20260611010000-add-booking-fields-to-intake-leads.js b/backend/src/db/migrations/20260611010000-add-booking-fields-to-intake-leads.js new file mode 100644 index 0000000..0f55718 --- /dev/null +++ b/backend/src/db/migrations/20260611010000-add-booking-fields-to-intake-leads.js @@ -0,0 +1,20 @@ +'use strict'; + +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.addColumn('intake_leads', 'package_name', { + type: Sequelize.TEXT, + allowNull: true, + }); + + await queryInterface.addColumn('intake_leads', 'preferred_time', { + type: Sequelize.TEXT, + allowNull: true, + }); + }, + + async down(queryInterface) { + await queryInterface.removeColumn('intake_leads', 'preferred_time'); + await queryInterface.removeColumn('intake_leads', 'package_name'); + }, +}; diff --git a/backend/src/db/models/intake_leads.js b/backend/src/db/models/intake_leads.js index 1677a72..84d7faa 100644 --- a/backend/src/db/models/intake_leads.js +++ b/backend/src/db/models/intake_leads.js @@ -7,6 +7,8 @@ module.exports = function(sequelize, DataTypes) { email: { type: DataTypes.TEXT }, company: { type: DataTypes.TEXT }, role_title: { type: DataTypes.TEXT }, + package_name: { type: DataTypes.TEXT }, + preferred_time: { type: DataTypes.TEXT }, goal: { type: DataTypes.TEXT }, challenge: { type: DataTypes.TEXT }, desired_outcome: { type: DataTypes.TEXT }, diff --git a/backend/src/routes/coaching.js b/backend/src/routes/coaching.js index 2670b95..bc97af0 100644 --- a/backend/src/routes/coaching.js +++ b/backend/src/routes/coaching.js @@ -691,6 +691,8 @@ router.post( status: "active", goals: lead.goal, notes: [ + lead.package_name && `Requested package: ${lead.package_name}`, + lead.preferred_time && `Preferred first-call time: ${lead.preferred_time}`, lead.challenge && `Challenge: ${lead.challenge}`, lead.desired_outcome && `Desired outcome: ${lead.desired_outcome}`, lead.consent_ai_notes ? "Consented to AI-assisted session notes." : "AI notes consent not granted yet.", diff --git a/backend/src/routes/coachingPublic.js b/backend/src/routes/coachingPublic.js index 2201906..badea15 100644 --- a/backend/src/routes/coachingPublic.js +++ b/backend/src/routes/coachingPublic.js @@ -26,6 +26,8 @@ router.post( email, company: data.company, role_title: data.role_title, + package_name: data.package_name, + preferred_time: data.preferred_time, goal: data.goal, challenge: data.challenge, desired_outcome: data.desired_outcome, diff --git a/frontend/src/coachingSite.ts b/frontend/src/coachingSite.ts index de0608b..e2db955 100644 --- a/frontend/src/coachingSite.ts +++ b/frontend/src/coachingSite.ts @@ -1,6 +1,17 @@ export const publicCoachSite = { workspaceName: 'Coaching SaaS Workspace', footerLine: 'Coaching beyond the session.', + assessmentPath: '/intake/?package=leadership-assessment', + socialLinks: [ + { + label: 'LinkedIn', + href: 'https://www.linkedin.com/', + }, + { + label: 'Interview series', + href: 'https://www.youtube.com/', + }, + ], coach: { name: 'Alex Morgan', title: 'Executive coach for founders, operators, and leadership teams.', @@ -9,8 +20,8 @@ export const publicCoachSite = { 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', + 'ICF-style executive coaching profile', + 'Founder and senior leadership transitions', 'Decision systems and operating rhythm', 'Confidential client workspace', ], @@ -31,8 +42,11 @@ export const publicCoachSite = { ], packages: [ { + slug: 'leadership-assessment', name: 'Leadership Assessment', price: 'Intro', + bookingLabel: 'Book assessment', + bookingPath: '/intake/?package=leadership-assessment', copy: 'A focused first step for founders and senior leaders who want to clarify the coaching agenda.', items: [ 'intake review', @@ -41,8 +55,11 @@ export const publicCoachSite = { ], }, { + slug: 'founder-coaching', name: 'Founder Coaching', price: 'Monthly', + bookingLabel: 'Book monthly coaching', + bookingPath: '/intake/?package=founder-coaching', copy: 'Ongoing 1:1 coaching with session memory, commitments, resources, and between-session accountability.', items: [ 'two sessions per month', @@ -51,8 +68,11 @@ export const publicCoachSite = { ], }, { + slug: 'executive-operating-rhythm', name: 'Executive Operating Rhythm', price: 'Custom', + bookingLabel: 'Book package consult', + bookingPath: '/intake/?package=executive-operating-rhythm', copy: 'A deeper engagement for leaders navigating delegation, decision rights, and team operating cadence.', items: [ 'leadership themes', @@ -69,4 +89,24 @@ export const publicCoachSite = { 'A private place for client resources', 'Less admin after every session', ], + testimonials: [ + { + quote: + 'The session recap caught the exact leadership pattern I wanted to revisit. I edited one sentence and sent it.', + name: 'Ari Morgan', + role: 'Executive Coach', + }, + { + quote: + 'My clients finally have one place for notes, commitments, and the resources I share after each call.', + name: 'Leah Stone', + role: 'Founder Coach', + }, + { + quote: + 'Prep used to mean hunting through old docs. Now I start every session with the thread already visible.', + name: 'Daniel Reyes', + role: 'Leadership Advisor', + }, + ], } as const; diff --git a/frontend/src/components/PublicSiteNav.tsx b/frontend/src/components/PublicSiteNav.tsx index 97108f3..5a7253d 100644 --- a/frontend/src/components/PublicSiteNav.tsx +++ b/frontend/src/components/PublicSiteNav.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import { publicCoachSite } from '../coachingSite'; const links = [ { href: '/how-it-works/', label: 'How it works' }, @@ -30,7 +31,7 @@ export default function PublicSiteNav() { Start assessment diff --git a/frontend/src/pages/about.tsx b/frontend/src/pages/about.tsx index 69b7fd9..6dff414 100644 --- a/frontend/src/pages/about.tsx +++ b/frontend/src/pages/about.tsx @@ -55,8 +55,8 @@ export default function AboutCoach() { {publicCoachSite.coach.aboutIntro}
+ Connect +
+@@ -543,21 +526,21 @@ export default function Starter() { - Start your workspace + Book assessment
- “{quote}” + “{item.quote}”
{name}
-{role}
+{item.name}
+{item.role}