import { useState, useEffect } from 'react'; import { Bird, Menu, X } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; import { Home } from './components/Home'; import { YachtSearch } from './components/YachtSearch'; import { TripCalculator } from './components/TripCalculator'; import { HowItWorks } from './components/HowItWorks'; import { About } from './components/About'; import { Contact } from './components/Contact'; import { OffsetOrder } from './components/OffsetOrder'; import { getVesselData } from './api/aisClient'; import { calculateTripCarbon } from './utils/carbonCalculator'; import { analytics } from './utils/analytics'; import type { VesselData, CarbonCalculation, CalculatorType } from './types'; const sampleVessel: VesselData = { imo: "1234567", vesselName: "Sample Yacht", type: "Yacht", length: 50, width: 9, estimatedEnginePower: 2250 }; function App() { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [vesselData, setVesselData] = useState(null); const [currentPage, setCurrentPage] = useState<'home' | 'calculator' | 'how-it-works' | 'about' | 'contact'>('home'); const [showOffsetOrder, setShowOffsetOrder] = useState(false); const [offsetTons, setOffsetTons] = useState(0); const [monetaryAmount, setMonetaryAmount] = useState(); const [calculatorType, setCalculatorType] = useState('trip'); const [mobileMenuOpen, setMobileMenuOpen] = useState(false); useEffect(() => { analytics.pageView(window.location.pathname); }, [currentPage]); const handleSearch = async (imo: string) => { setLoading(true); setError(null); setVesselData(null); try { const vessel = await getVesselData(imo); setVesselData(vessel); } catch (err) { setError('Unable to fetch vessel data. Please verify the IMO number and try again.'); } finally { setLoading(false); } }; const handleOffsetClick = (tons: number, monetaryAmount?: number) => { setOffsetTons(tons); setMonetaryAmount(monetaryAmount); setShowOffsetOrder(true); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleNavigate = (page: 'home' | 'calculator' | 'how-it-works' | 'about' | 'contact') => { setCurrentPage(page); setMobileMenuOpen(false); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const renderPage = () => { if (currentPage === 'calculator' && showOffsetOrder) { return (
{ setShowOffsetOrder(false); window.scrollTo({ top: 0, behavior: 'smooth' }); }} calculatorType={calculatorType} />
); } switch (currentPage) { case 'calculator': return (

Calculate & Offset Your Yacht's Carbon Footprint

Use the calculator below to estimate your carbon footprint and explore offsetting options through our verified projects.

); case 'how-it-works': return ; case 'about': return ; case 'contact': return ; default: return ; } }; return (
handleNavigate('home')} >

Puffin Offset

{/* Mobile menu button */} {/* Desktop navigation */}
{/* Mobile navigation */} {mobileMenuOpen && ( )}
{renderPage()}
); } export default App;