From 753876b071158e288d30ca364a35a0b8fd4247a3 Mon Sep 17 00:00:00 2001 From: matt Date: Fri, 19 Sep 2025 11:53:47 +0200 Subject: [PATCH] feat: comprehensive website optimization for performance and mobile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Optimizations implemented: - Added hardware acceleration for smooth animations (will-change, transform3d) - Optimized touch targets for mobile (minimum 48x48px) - Added explicit image dimensions to prevent CLS - Implemented comprehensive SEO meta tags and Open Graph - Added structured data for LocalBusiness and Service schemas - Configured resource hints (preconnect, dns-prefetch, preload) - Added lazy loading to non-critical images - Improved button accessibility with touch-action: manipulation These optimizations improve Core Web Vitals, mobile UX, and SEO visibility. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- apps/website/assets/css/main.css | 32 +++++- apps/website/assets/css/voyage-layout.css | 21 +++- apps/website/components/AppFooter.vue | 2 +- apps/website/components/AppNavbar.vue | 2 + apps/website/components/GallerySection.vue | 12 +- apps/website/components/HeroSection.vue | 2 +- apps/website/components/ServicesSection.vue | 8 +- apps/website/components/WelcomeSection.vue | 2 +- apps/website/nuxt.config.ts | 118 +++++++++++++++++++- 9 files changed, 178 insertions(+), 21 deletions(-) diff --git a/apps/website/assets/css/main.css b/apps/website/assets/css/main.css index 6351add..889818f 100644 --- a/apps/website/assets/css/main.css +++ b/apps/website/assets/css/main.css @@ -58,6 +58,29 @@ body { } } +/* Hardware Acceleration for Smooth Animations */ +.hero-video-container, +.parallax, +.animate-fade-in, +.animate-fade-up-delay, +.animate-fade-up-delay-2, +.animate-slide-up, +.animate-scale-in, +.animate-wave { + will-change: transform, opacity; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + transform: translateZ(0); +} + +/* Optimize scroll performance */ +.hero-voyage { + will-change: scroll-position; + contain: layout style paint; +} + /* Accessibility: Reduced Motion */ @media (prefers-reduced-motion: reduce) { html { @@ -71,6 +94,7 @@ body { animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; + will-change: auto !important; } .hero-video-container, @@ -180,11 +204,14 @@ body { /* Harbor Smith Custom Components */ @layer components { /* Navigation Styles handled via voyage-layout.css */ - /* Button Styles */ + /* Button Styles - Optimized for Mobile Touch Targets (min 48x48px) */ .btn-primary-warm { @apply px-8 py-3 bg-gradient-to-r from-harbor-gold to-harbor-yellow text-white font-semibold rounded-full; @apply hover:shadow-xl transform hover:-translate-y-0.5 transition-all duration-300; @apply relative overflow-hidden; + min-height: 48px; + min-width: 48px; + touch-action: manipulation; } .btn-secondary-warm { @@ -200,6 +227,9 @@ body { border: 1px solid rgba(255, 255, 255, 0.35); backdrop-filter: blur(12px); transition: all 0.3s ease; + min-height: 48px; + min-width: 48px; + touch-action: manipulation; } .btn-secondary-warm:hover { diff --git a/apps/website/assets/css/voyage-layout.css b/apps/website/assets/css/voyage-layout.css index 6505539..ac21233 100644 --- a/apps/website/assets/css/voyage-layout.css +++ b/apps/website/assets/css/voyage-layout.css @@ -153,11 +153,12 @@ img { display: inline-flex; align-items: center; justify-content: center; - width: 40px; - height: 40px; + width: 48px; + height: 48px; border-radius: 50%; background: rgba(255, 255, 255, 0.1); transition: var(--transition); + touch-action: manipulation; } .social-links a:hover { @@ -276,6 +277,12 @@ html { font-weight: 500; transition: var(--transition); position: relative; + /* Ensure touch targets are at least 48x48px for mobile */ + padding: 12px 16px; + min-height: 48px; + display: inline-flex; + align-items: center; + touch-action: manipulation; } .voyage-nav.scrolled .nav-link { @@ -303,6 +310,11 @@ html { padding: 0.75rem 1.5rem; border-radius: 50px; transition: var(--transition); + /* Ensure minimum touch target size */ + min-height: 48px; + display: inline-flex; + align-items: center; + touch-action: manipulation; } .nav-cta:hover { @@ -1513,8 +1525,8 @@ html { } .social-links a { - width: 40px; - height: 40px; + width: 48px; + height: 48px; display: flex; align-items: center; justify-content: center; @@ -1522,6 +1534,7 @@ html { border-radius: 50%; font-size: 1.25rem; transition: var(--transition); + touch-action: manipulation; } .social-links a:hover { diff --git a/apps/website/components/AppFooter.vue b/apps/website/components/AppFooter.vue index 825a0e6..f7f5a4c 100644 --- a/apps/website/components/AppFooter.vue +++ b/apps/website/components/AppFooter.vue @@ -3,7 +3,7 @@