Files
gw-svelte/src/lib/content/dog-walking.ts
T
admin 0eed557f95 4.2.0 — deploy hardening and visual consistency pass
Make the production deploy foolproof against the shared nginx container's read-only bind mounts on the Digital Ocean droplet. The previous maintenance flow tried to docker-cp/docker-exec into /var/www/html and /etc/nginx/conf.d, both of which are mounted :ro on prod, and /var/www/html happens to point at the WordPress html dir — so writes either failed silently or risked scribbling into another site's tree. Maintenance assets and the engagement flag are now written directly to host paths (/docker/nginx/maintenance and /docker/nginx/conf.d/maintenance.flag) that nginx already sees through its existing bind mounts, so the script no longer depends on a writable container layer, survives container rebuilds, and works regardless of read_only settings. A pre-flight check verifies the maintenance bind mount is actually present on the nginx container and fails fast with a clear "run the one-time setup" message if it isn't, instead of silently serving stale content. The nginx config now serves maintenance.html and /m/ from a dedicated /var/www/maintenance root rather than sharing the WordPress html dir.

On the front end, hero images on Pack Walks, 1:1 Walks and Puppy Visits were rendering at whatever aspect ratio their source files happened to have, so one page felt tall, another wide, another oversized. They are now locked to a 4:3 frame with object-fit: cover, matching the About Us section images, which were given the same treatment. The About Us body grid was also alternating between 0.7fr/1.3fr and 1.3fr/0.7fr columns depending on whether a section was reversed, which made the copy width jump between sections; both layouts are now an even 50/50 split, with the existing order swap still handling the image-left vs image-right alternation.

The reveal-on-scroll action used to require 18% of an element to intersect before fading it in, with an additional -8% bottom margin, which meant the section directly below a service-page hero stayed invisible on initial load until the user scrolled — making the page look blank below the hero on navigation. The action now does a synchronous bounding-rect check on mount and reveals anything already in the viewport immediately, falling back to the IntersectionObserver for everything below the fold.

The "Explore our services" block on About Us was a bespoke icon-tile grid that did not match the homepage's "What we do" cards; it now reuses the shared ServicesSection component (with the heading exposed as a prop), so both pages produce identical card layout, descriptions, "from $" prices, and Learn more CTAs. The footer Explore column was missing the About Us link — added between Our Pricing and Contact Us so it propagates through the homepage content sync into PostgreSQL on the next deploy.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-05 20:54:56 +12:00

85 lines
3.8 KiB
TypeScript

import type { ServicePageContent } from '$lib/types';
export const dogWalkingContent: ServicePageContent = {
hero: {
eyebrow: '1:1 Walks',
title: 'Walks for larger breeds, too!',
paragraphs: [
'Looking for personal attention for your big pup? Our professional dog walking service is perfect for larger dogs who walk well on leash and have good recall. Safety is paramount, so we only accommodate dogs with no reactivity issues. At Goodwalk, we pride ourselves on building relationships with both you and your furry family member.',
"Give your dog his best life while joining our growing community of happy pet parents! For those seeking extra care, we offer specialised one-on-one walks tailored to your dog's individual needs and personality"
],
imageUrl:
'/images/auckland-large-dog-one-on-one-walk.jpg',
imageAlt: 'Large breed dog enjoying a Goodwalk one on one dog walk'
},
highlight: {
eyebrow: '▼・ᴥ・▼',
title: 'Personalised adventures for your dog!',
imageUrl: '/images/auckland-dogs-outdoor-pack.jpg',
imageAlt: 'Goodwalk dogs gathered together outdoors'
},
pricing: {
title: '1:1 Large Dog Breed Prices',
plans: [
{
title: '30 Minutes',
price: '$45',
period: 'Per Walk',
features: ['Free pickup/dropoff', '30 minute walk', 'Social media updates', 'Basic training']
},
{
title: '45 Minutes',
price: '$55',
period: 'Per Walk',
popular: true,
features: ['Free pickup/dropoff', '45 minute walk', 'Social media updates', 'Basic training']
},
{
title: '60 Minutes',
price: '$65',
period: 'Per Walk',
features: ['Free pickup/dropoff', '60 minute walk', 'Social media updates', 'Basic training']
}
]
},
benefits: {
title: 'Benefits of our 1:1 walks',
items: [
{
title: 'Individualised Attention',
body: 'Large breeds receive personalised care and undivided attention from the walker, addressing their unique needs and preferences without competition from other dogs.'
},
{
title: 'Tailored Exercise',
body: 'Walkers can customise the pace, duration, and route of the walk to accommodate the energy levels and physical abilities of large breeds, providing an appropriate level of exercise tailored to their specific needs.'
},
{
title: 'Bonding and Socialisation',
body: 'During one-on-one walks, large breeds bond closely with their walker and socialise with people and animals encountered, promoting confidence and social skills'
},
{
title: 'Enhanced safety',
body: "With one-on-one walks, there's reduced risk of potential conflicts or incidents that may arise in group settings, ensuring a safer walking experience for large breeds."
},
{
title: 'Training Opportunities',
body: 'One-on-one walks offer dedicated time for training and reinforcement of good behaviours, such as loose leash walking or obedience commands, helping large breeds develop and maintain positive habits.'
},
{
title: 'Stress Reduction',
body: 'Large breeds may feel more relaxed and comfortable during one-on-one walks, as they can explore and enjoy their surroundings without the potential stressors of a group dynamic, leading to a more positive walking experience overall.'
}
]
},
testimonialsHeading: 'What our clients say',
booking: {
title: "Let's meet!",
subtitle: 'Fill out your details below, and we can arrange a Meet & Greet for a one on one walk!',
formAction: '/contact-us',
serviceOptions: [],
ownerStepLabel: 'Your details',
dogStepLabel: 'Your dog',
dogIntro: 'Tell us about your dog, your area, and anything important we should know before arranging a one on one Meet & Greet.'
}
};