feat: Migrate to Next.js with complete mobile-optimized website
Some checks failed
build-website / build (push) Failing after 7s

- Replaced Vue/Nuxt with Next.js 15 for better performance and simpler architecture
- Implemented all website sections with responsive design:
  - Hero section with video background and mobile-optimized spacing
  - About section with feature highlights
  - Services showcase with 3 service cards
  - Contact section with CTAs and trust badges
  - Footer with branding
- Added Lucide React icons throughout
- Mobile optimizations:
  - Responsive text and button sizing
  - Touch-friendly CTAs
  - Proper spacing adjustments for mobile/desktop
  - Scroll indicator with bouncing chevron
- Archived Vue/Nuxt version in vue-archive folder
- Moved all assets to Next.js public folder

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Matt
2025-09-26 16:12:00 +02:00
parent 256f7eb069
commit d0f33f66f3
109 changed files with 3113 additions and 43 deletions

19
app/globals.css Normal file
View File

@@ -0,0 +1,19 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/* iOS Safari Safe Area Support */
html {
/* Allow content to extend into safe areas */
min-height: 100vh;
min-height: -webkit-fill-available;
}
body {
margin: 0;
padding: 0;
min-height: 100vh;
min-height: -webkit-fill-available;
/* Transparent background to allow video to show through */
background: transparent;
}

42
app/layout.tsx Normal file
View File

@@ -0,0 +1,42 @@
import type { Metadata, Viewport } from 'next'
import { Inter, Playfair_Display } from 'next/font/google'
import './globals.css'
const inter = Inter({
subsets: ['latin'],
variable: '--font-sans',
})
const playfair = Playfair_Display({
subsets: ['latin'],
variable: '--font-serif',
})
export const viewport: Viewport = {
width: 'device-width',
initialScale: 1,
viewportFit: 'cover', // Critical for iOS Safari safe areas
}
export const metadata: Metadata = {
title: 'Harbor Smith - Personalized Service Maintenance For Your Boat',
description: 'Reliable Care Above and Below the Waterline. Servicing the Bay Area and Beyond!',
appleWebApp: {
capable: true,
statusBarStyle: 'black-translucent',
},
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en" className={`${inter.variable} ${playfair.variable}`}>
<body className="font-sans">
{children}
</body>
</html>
)
}

21
app/page.tsx Normal file
View File

@@ -0,0 +1,21 @@
import HeroSection from '@/components/HeroSection'
import AboutSection from '@/components/AboutSection'
import ServicesSection from '@/components/ServicesSection'
import TrustIndicators from '@/components/TrustIndicators'
import ContactSection from '@/components/ContactSection'
import Footer from '@/components/Footer'
export default function HomePage() {
return (
<>
<main>
<HeroSection />
<AboutSection />
<ServicesSection />
<TrustIndicators />
<ContactSection />
</main>
<Footer />
</>
)
}