Onboarding / Deployment Scripts / Marketing updates

This commit is contained in:
2026-05-11 21:02:24 +12:00
parent a90dfb7c66
commit 955a563d14
110 changed files with 9803 additions and 937 deletions
+129 -119
View File
@@ -11,6 +11,7 @@
import ServicesSection from '$lib/components/ServicesSection.svelte';
import TestimonialsSection from '$lib/components/TestimonialsSection.svelte';
import ValuesSection from '$lib/components/ValuesSection.svelte';
import OnboardingPage from '$lib/components/OnboardingPage.svelte';
import type { PageData } from './$types';
export let data: PageData;
@@ -25,127 +26,136 @@
return `${siteUrl}${value.startsWith('/') ? value : `/${value}`}`;
}
$: homepageStructuredData = [
{
'@context': 'https://schema.org',
'@type': 'WebSite',
name: 'Goodwalk',
url: siteUrl,
inLanguage: 'en-NZ'
},
{
'@context': 'https://schema.org',
'@type': 'LocalBusiness',
name: 'Goodwalk',
description:
'Professional dog walking services across Auckland Central, including pack walks, 1:1 walks, and puppy visits.',
url: siteUrl,
logo: `${siteUrl}/images/goodwalk-auckland-dog-walking-logo.png`,
image: absoluteUrl(data.content.hero.imageUrl),
email: 'info@goodwalk.co.nz',
telephone: '+64-22-642-1011',
sameAs: ['https://www.instagram.com/goodwalk.nz/', 'https://g.page/r/CUsvrWPhkYrAEB0/'],
address: {
'@type': 'PostalAddress',
addressLocality: 'Auckland Central',
addressRegion: 'Auckland',
addressCountry: 'NZ'
},
areaServed: [
'Morningside',
'Kingsland',
'Ponsonby',
'Grey Lynn',
'Mt Albert',
'Mt Eden',
'Sandringham',
'Mt Roskill',
'Arch Hill',
'Freemans Bay',
'Herne Bay',
'Pt Chevalier',
'Avondale',
'Three Kings',
'Hillsborough',
'Eden Terrace',
'Balmoral'
],
openingHoursSpecification: [
{
'@type': 'OpeningHoursSpecification',
dayOfWeek: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
opens: '08:00',
closes: '16:00'
}
],
hasOfferCatalog: {
'@type': 'OfferCatalog',
name: 'Dog Walking Services',
itemListElement: data.content.services.map((service) => ({
'@type': 'Offer',
itemOffered: {
'@type': 'Service',
name: service.title,
url: `${siteUrl}${service.href}`
$: homepageStructuredData =
data.siteVariant === 'marketing' && data.content
? [
{
'@context': 'https://schema.org',
'@type': 'WebSite',
name: 'Goodwalk',
url: siteUrl,
inLanguage: 'en-NZ'
},
{
'@context': 'https://schema.org',
'@type': 'LocalBusiness',
name: 'Goodwalk',
description:
'Professional dog walking services across Auckland Central, including pack walks, 1:1 walks, and puppy visits.',
url: siteUrl,
logo: `${siteUrl}/images/goodwalk-auckland-dog-walking-logo.png`,
image: absoluteUrl(data.content.hero.imageUrl),
email: 'info@goodwalk.co.nz',
telephone: '+64-22-642-1011',
sameAs: ['https://www.instagram.com/goodwalk.nz/', 'https://g.page/r/CUsvrWPhkYrAEB0/'],
address: {
'@type': 'PostalAddress',
addressLocality: 'Auckland Central',
addressRegion: 'Auckland',
addressCountry: 'NZ'
},
areaServed: [
'Morningside',
'Kingsland',
'Ponsonby',
'Grey Lynn',
'Mt Albert',
'Mt Eden',
'Sandringham',
'Mt Roskill',
'Arch Hill',
'Freemans Bay',
'Herne Bay',
'Pt Chevalier',
'Avondale',
'Three Kings',
'Hillsborough',
'Eden Terrace',
'Balmoral'
],
openingHoursSpecification: [
{
'@type': 'OpeningHoursSpecification',
dayOfWeek: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
opens: '08:00',
closes: '16:00'
}
],
hasOfferCatalog: {
'@type': 'OfferCatalog',
name: 'Dog Walking Services',
itemListElement: data.content.services.map((service) => ({
'@type': 'Offer',
itemOffered: {
'@type': 'Service',
name: service.title,
url: `${siteUrl}${service.href}`
}
}))
},
aggregateRating: {
'@type': 'AggregateRating',
ratingValue: '5.0',
bestRating: '5',
worstRating: '1',
reviewCount: String(data.content.testimonials.length)
},
review: data.content.testimonials.map((testimonial) => ({
'@context': 'https://schema.org',
'@type': 'Review',
reviewRating: {
'@type': 'Rating',
ratingValue: '5',
bestRating: '5'
},
author: {
'@type': 'Person',
name: testimonial.reviewer
},
reviewBody: testimonial.quote
}))
},
{
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: data.content.info.faqs.map((faq) => ({
'@type': 'Question',
name: faq.question,
acceptedAnswer: {
'@type': 'Answer',
text: faq.answer
}
}))
}
}))
},
aggregateRating: {
'@type': 'AggregateRating',
ratingValue: '5.0',
bestRating: '5',
worstRating: '1',
reviewCount: String(data.content.testimonials.length)
},
review: data.content.testimonials.map((testimonial) => ({
'@type': 'Review',
reviewRating: {
'@type': 'Rating',
ratingValue: '5',
bestRating: '5'
},
author: {
'@type': 'Person',
name: testimonial.reviewer
},
reviewBody: testimonial.quote
}))
},
{
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: data.content.info.faqs.map((faq) => ({
'@type': 'Question',
name: faq.question,
acceptedAnswer: {
'@type': 'Answer',
text: faq.answer
}
}))
}
];
]
: [];
</script>
<SeoHead
title={data.content.seo.title}
description={data.content.seo.description}
canonicalPath="/"
image={data.content.hero.imageUrl}
imageAlt={data.content.hero.imageAlt}
structuredData={homepageStructuredData}
preloadImage={true}
/>
{#if data.siteVariant === 'onboarding'}
<OnboardingPage preview={data.isPreview} />
{:else}
{@const content = data.content!}
<SeoHead
title={content.seo.title}
description={content.seo.description}
canonicalPath="/"
image={content.hero.imageUrl}
imageAlt={content.hero.imageAlt}
structuredData={homepageStructuredData}
preloadImage={true}
/>
<Header navigation={data.content.navigation} />
<HeroSection hero={data.content.hero} reviewCta={data.content.intro.reviewCta} />
<PromiseSection promise={data.content.promise} />
<ServicesSection services={data.content.services} />
{#if data.howItWorksEnabled}
<HowItWorksSection content={data.content.howItWorks} />
<Header navigation={content.navigation} />
<HeroSection hero={content.hero} reviewCta={content.intro.reviewCta} />
<PromiseSection promise={content.promise} />
<ServicesSection services={content.services} />
{#if data.howItWorksEnabled}
<HowItWorksSection content={content.howItWorks} />
{/if}
<TestimonialsSection testimonials={content.testimonials} seedKey="/" />
<ValuesSection values={content.values} />
<BookingSection booking={content.booking} />
<InfoSection info={content.info} />
<InstagramSection instagram={content.instagram} />
<Footer footer={content.footer} />
{/if}
<TestimonialsSection testimonials={data.content.testimonials} />
<ValuesSection values={data.content.values} />
<BookingSection booking={data.content.booking} />
<InfoSection info={data.content.info} />
<InstagramSection instagram={data.content.instagram} />
<Footer footer={data.content.footer} />