Files
Sauci/apps/web/components/Navbar.tsx
T

144 lines
4.4 KiB
TypeScript

'use client'
import { useState, useEffect } from 'react'
import Link from 'next/link'
import Image from 'next/image'
import { motion, AnimatePresence } from 'framer-motion'
import { Menu, X } from 'lucide-react'
const APP_STORE_URL = 'https://apps.apple.com/gb/app/sauci-couple-games-romance/id6757159885'
const PLAY_STORE_URL = 'https://play.google.com/store/apps/details?id=com.sauci.app'
export default function Navbar() {
const [isScrolled, setIsScrolled] = useState(false)
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false)
const [downloadUrl, setDownloadUrl] = useState(APP_STORE_URL)
useEffect(() => {
const handleScroll = () => {
setIsScrolled(window.scrollY > 20)
}
window.addEventListener('scroll', handleScroll)
return () => window.removeEventListener('scroll', handleScroll)
}, [])
useEffect(() => {
const userAgent = navigator.userAgent || ''
if (/Android/i.test(userAgent)) {
setDownloadUrl(PLAY_STORE_URL)
}
}, [])
return (
<motion.nav
initial={{ y: -100 }}
animate={{ y: 0 }}
className={`fixed top-0 left-0 right-0 z-50 transition-all duration-300 ${
isScrolled ? 'glass py-4' : 'py-6'
}`}
>
<div className="max-w-7xl mx-auto px-6 flex items-center justify-between">
<Link href="/" className="flex items-center gap-3">
<Image
src="/logo.png"
alt="Sauci"
width={40}
height={40}
className="w-10 h-10"
/>
<span className="text-2xl font-bold gradient-text">Sauci</span>
</Link>
{/* Desktop Navigation */}
<div className="hidden md:flex items-center gap-8">
<a href="#features" className="text-white/70 hover:text-white transition-colors">
Features
</a>
<a href="#how-it-works" className="text-white/70 hover:text-white transition-colors">
How It Works
</a>
<a href="#pricing" className="text-white/70 hover:text-white transition-colors">
Pro
</a>
<a href="#faq" className="text-white/70 hover:text-white transition-colors">
FAQ
</a>
<a
href={downloadUrl}
target="_blank"
rel="noopener noreferrer"
className="btn-primary text-sm py-3 px-6"
>
Download App
</a>
</div>
{/* Mobile Menu Button */}
<button
className="md:hidden text-white"
onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}
>
{isMobileMenuOpen ? <X size={24} /> : <Menu size={24} />}
</button>
</div>
{/* Mobile Menu */}
<AnimatePresence>
{isMobileMenuOpen && (
<motion.div
initial={{ opacity: 0, y: -20 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -20 }}
transition={{ duration: 0.2 }}
className="md:hidden glass mt-4 mx-6 p-6"
>
<div className="flex flex-col gap-4">
<a
href="#features"
className="text-white/70 hover:text-white transition-colors"
onClick={() => setIsMobileMenuOpen(false)}
>
Features
</a>
<a
href="#how-it-works"
className="text-white/70 hover:text-white transition-colors"
onClick={() => setIsMobileMenuOpen(false)}
>
How It Works
</a>
<a
href="#pricing"
className="text-white/70 hover:text-white transition-colors"
onClick={() => setIsMobileMenuOpen(false)}
>
Pro
</a>
<a
href="#faq"
className="text-white/70 hover:text-white transition-colors"
onClick={() => setIsMobileMenuOpen(false)}
>
FAQ
</a>
<a
href={downloadUrl}
target="_blank"
rel="noopener noreferrer"
className="btn-primary text-sm py-3 px-6 text-center"
>
Download App
</a>
</div>
</motion.div>
)}
</AnimatePresence>
</motion.nav>
)
}