184 lines
6.5 KiB
TypeScript
184 lines
6.5 KiB
TypeScript
|
|
import { getHomepageContent } from '$lib/server/content';
|
|||
|
|
import type { HomePageContent, TestimonialContent } from '$lib/types';
|
|||
|
|
|
|||
|
|
// Variant goal: render the live homepage end-to-end, but shift the messaging
|
|||
|
|
// off 1:1 solo walks and onto Tiny Gang pack walks, with puppy visits framed
|
|||
|
|
// as the on-ramp that trains pups to graduate into the pack.
|
|||
|
|
|
|||
|
|
function applyPackFirstOverrides(base: HomePageContent): HomePageContent {
|
|||
|
|
const content = structuredClone(base);
|
|||
|
|
|
|||
|
|
// ── SEO ──────────────────────────────────────────────────────────────
|
|||
|
|
content.seo = {
|
|||
|
|
title: 'Auckland Pack Walks for Small Dogs | Tiny Gang | Goodwalk',
|
|||
|
|
description:
|
|||
|
|
"Goodwalk's Tiny Gang is a small-group pack walk for sociable Auckland dogs. Puppy Academy trains pups to graduate into the pack. Solo walks available on request."
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ── Hero ─────────────────────────────────────────────────────────────
|
|||
|
|
// Keep the live homepage hero — same Maya image, same headline, same CTAs.
|
|||
|
|
// The pack-first pivot lives in the sections below, not the first scroll.
|
|||
|
|
// (Hero intentionally left untouched.)
|
|||
|
|
|
|||
|
|
// ── Services: pack walks lead, puppy academy second, solo walks demoted
|
|||
|
|
content.services = [
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-paw',
|
|||
|
|
title: 'Tiny Gang Pack Walks',
|
|||
|
|
body: 'Our flagship walk. Small group of 4–8 well-matched dogs. Same walker. Real friends.',
|
|||
|
|
priceFrom: 'From $49.50 / walk',
|
|||
|
|
href: '/pack-walks'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-graduation-cap',
|
|||
|
|
title: 'Puppy Academy',
|
|||
|
|
body: 'In-home visits that quietly train your pup to graduate into the Tiny Gang.',
|
|||
|
|
priceFrom: 'From $39 / visit',
|
|||
|
|
href: '/puppy-visits'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-person-walking',
|
|||
|
|
title: 'Solo Walks (on request)',
|
|||
|
|
body: 'For dogs the pack does not suit — reactive on lead, recovering, or larger than the gang.',
|
|||
|
|
priceFrom: 'From $45 / walk',
|
|||
|
|
href: '/dog-walking'
|
|||
|
|
}
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// ── How it works: reframe as the graduation pipeline
|
|||
|
|
content.howItWorks = {
|
|||
|
|
title: 'How a dog joins the pack',
|
|||
|
|
intro: 'Pack walks are not booked. They are earned. Here is the path.',
|
|||
|
|
steps: [
|
|||
|
|
{
|
|||
|
|
phase: 'Apply',
|
|||
|
|
benefit: 'Right fit before anything else',
|
|||
|
|
title: 'Free Meet & Greet at home.',
|
|||
|
|
body:
|
|||
|
|
'We meet your dog where they live. We talk temperament, energy, and play style — the things that decide pack fit.',
|
|||
|
|
icon: 'fas fa-handshake'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
phase: 'Train',
|
|||
|
|
benefit: 'Foundations that hold up in a group',
|
|||
|
|
title: 'Puppy Academy or assessment walks.',
|
|||
|
|
body:
|
|||
|
|
'Puppies do home visits and short outings. Older dogs do two assessment walks. We build manners and trust before any group meets them.',
|
|||
|
|
icon: 'fas fa-graduation-cap'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
phase: 'Graduate',
|
|||
|
|
benefit: 'A weekly slot with real friends',
|
|||
|
|
title: 'Welcome to the Tiny Gang.',
|
|||
|
|
body:
|
|||
|
|
'A regular weekly walk with the same small pack. Same walker, same dogs, same parks. Calmer evenings start here.',
|
|||
|
|
icon: 'fas fa-paw'
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ── Founder story: lean on the pack
|
|||
|
|
content.founderStory = {
|
|||
|
|
...content.founderStory,
|
|||
|
|
title: 'Not just dog walking.',
|
|||
|
|
subtitle: 'Built around the pack.',
|
|||
|
|
body: [
|
|||
|
|
'Most dog walkers sell minutes on a lead. We build a pack.',
|
|||
|
|
'Small groups of well-matched dogs, the same walker every week, and a puppy programme that grows the next intake from scratch.',
|
|||
|
|
'You know who has your dog. Your dog knows the friends they are meeting. And you come home to a tired, happy one. Ready to'
|
|||
|
|
],
|
|||
|
|
emphasis: 'join the Tiny Gang?'
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ── Values: reorder so the pack-related lines lead
|
|||
|
|
content.values = [
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-users',
|
|||
|
|
title: 'Matched, not just grouped',
|
|||
|
|
body: '4 to 8 dogs, matched on size, energy, and play style. Small and medium only.'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-graduation-cap',
|
|||
|
|
title: 'Puppy Academy on-ramp',
|
|||
|
|
body: 'Pups train in-home, then graduate into the pack when they are ready.'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-heart',
|
|||
|
|
title: 'Calm, kind handling',
|
|||
|
|
body: 'Patient routines. Confidence over stress.'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-shield-heart',
|
|||
|
|
title: 'Safety, by default',
|
|||
|
|
body: 'Pet first aid certified. Careful screening. Proactive handling.'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-camera',
|
|||
|
|
title: 'Updates you actually want',
|
|||
|
|
body: 'See your dog out with their friends. Less wondering.'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-calendar-check',
|
|||
|
|
title: 'Built for real schedules',
|
|||
|
|
body: 'Regular weekly slot. Life changes; we adjust.'
|
|||
|
|
}
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// ── Testimonials: pack-walk reviews lead the slider
|
|||
|
|
const isPack = (t: TestimonialContent) =>
|
|||
|
|
!!t.service && t.service.toLowerCase().includes('pack');
|
|||
|
|
content.testimonials = [
|
|||
|
|
...content.testimonials.filter(isPack),
|
|||
|
|
...content.testimonials.filter((t) => !isPack(t))
|
|||
|
|
].map((t, i) => ({
|
|||
|
|
...t,
|
|||
|
|
showInSlider: i < 4 ? true : t.showInSlider
|
|||
|
|
}));
|
|||
|
|
|
|||
|
|
// ── Booking: pack walks first in the picker
|
|||
|
|
content.booking = {
|
|||
|
|
...content.booking,
|
|||
|
|
title: 'Apply to join the Tiny Gang',
|
|||
|
|
subtitle:
|
|||
|
|
"A few details about your dog. We reply within 24 hours to set up your free Meet & Greet.",
|
|||
|
|
serviceOptions: ['Tiny Gang Pack Walks', 'Puppy Academy', 'Solo Walks (on request)', 'Other']
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ── Mega menu mirror so the Header reflects the variant ordering
|
|||
|
|
content.navigation = {
|
|||
|
|
...content.navigation,
|
|||
|
|
megaMenuServices: [
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-paw',
|
|||
|
|
label: 'Tiny Gang Pack Walks',
|
|||
|
|
description: 'Our flagship — small, well-matched groups',
|
|||
|
|
href: '/pack-walks'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-graduation-cap',
|
|||
|
|
label: 'Puppy Academy',
|
|||
|
|
description: 'In-home visits, on-ramp to the pack',
|
|||
|
|
href: '/puppy-visits'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
icon: 'fas fa-person-walking',
|
|||
|
|
label: 'Solo Walks (on request)',
|
|||
|
|
description: 'For dogs the pack does not suit',
|
|||
|
|
href: '/dog-walking'
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
return content;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export async function load() {
|
|||
|
|
const base = await getHomepageContent();
|
|||
|
|
const content = applyPackFirstOverrides(base);
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
siteVariant: 'marketing' as const,
|
|||
|
|
content
|
|||
|
|
};
|
|||
|
|
}
|