diff --git a/README.md b/README.md index e215bc4..0d8c03f 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,49 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). +# Moy Group -## Getting Started +Modern, şık ve çift dilli (TR/EN) kurumsal web sitesi projesi. Moy Group çatısı altında yer alan Moy Beach, Kite Beach Hotel ve Volkswagen Kite (Surfing) mekanlarının tanıtımı, hizmet detayları, galeri ve iletişim/rezervasyon bilgilerini içerir. -First, run the development server: +## Teknolojiler -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` +- **[Next.js 15+ (App Router)](https://nextjs.org/)**: React tabanlı modern web framework. +- **[Tailwind CSS](https://tailwindcss.com/)**: Özelleştirilmiş tasarım sistemi (`tailwind.config.ts` üzerinden yapılandırılmış Moy Group marka renkleri). +- **[Framer Motion](https://www.framer.com/motion/)**: Akıcı sayfa geçişleri ve mikro animasyonlar. +- **[Lucide Icons](https://lucide.dev/)**: Minimal ve modern ikon seti. +- **i18n (Uluslararasılaştırma)**: Klasör bazlı (`app/[lang]`) özel dil desteği mimarisi. Sözlük (dictionary) yaklaşımı ile Türkçe ve İngilizce tam sayfa desteği. -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +## Proje Yapısı -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +- `app/[lang]/`: Tüm sayfalar, TR ve EN desteği için bu dinamik rota altında yer alır. +- `app/components/`: Yeniden kullanılabilir UI bileşenleri (Navbar, Footer, SectionHeader vb.). +- `dictionaries/`: Dil dosyalarının bulunduğu klasör (`tr.json`, `en.json` ve `index.ts`). +- `public/`: Görseller, videolar ve statik kaynaklar. +- `proxy.ts`: Next.js middleware / proxy yönlendirmeleri (Kullanıcının diline göre otomatik sayfa seçimi). -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. +## Kurulum ve Çalıştırma -## Learn More +Projeyi lokalinizde çalıştırmak için aşağıdaki adımları izleyin: -To learn more about Next.js, take a look at the following resources: +1. **Bağımlılıkları Yükleyin** + ```bash + npm install + # veya + yarn install + # veya + pnpm install + ``` -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +2. **Geliştirme Sunucusunu Başlatın** + ```bash + npm run dev + ``` -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! +3. Tarayıcınızda [http://localhost:3000](http://localhost:3000) adresine gidin. -## Deploy on Vercel +## Marka Renkleri +- **Moy Gold**: `#c9a96e` +- **Moy Dark**: `#1a1f24` +- **Moy Light**: `#f8f9fa` +- **Moy Blue**: `#2a3b4c` +- **Moy Green**: `#2c4c3b` -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. +## Geliştirici +created by [ayris.tech](https://ayris.tech) diff --git a/app/[lang]/HomeClient.tsx b/app/[lang]/HomeClient.tsx new file mode 100644 index 0000000..a66d336 --- /dev/null +++ b/app/[lang]/HomeClient.tsx @@ -0,0 +1,468 @@ +"use client"; + +import { useState } from "react"; +import { motion, type Variants } from "framer-motion"; +import Link from "next/link"; +import { Utensils, Umbrella, Home, Wind, Hotel, Star, MapPin, ArrowRight } from "lucide-react"; +import { Button } from "@/app/components/ui/button"; +import { SectionHeader } from "@/app/components/ui/section-header"; +import { Marquee } from "@/app/components/ui/marquee"; +import { AnimatedNumber } from "@/app/components/ui/animated-number"; +import { TextReveal } from "@/app/components/ui/text-reveal"; +import { ShimmerButton } from "@/app/components/ui/shimmer-button"; +import { Badge } from "@/app/components/ui/badge"; + +const HERO_BG = + "https://images.unsplash.com/photo-1499793983690-e29da59ef1c2?auto=format&fit=crop&q=80&w=2070"; + +const MARQUEE_ITEMS = [ + "Akyaka", + "Akçapınar", + "Datça", + "Beach Bar", + "Kite Surf", + "Restaurant", + "Bungalov", + "Hotel", + "Ege Denizi", +]; + +const STATS = [ + { value: 15, suffix: "+", label: "Yıl Deneyim" }, + { value: 3, suffix: "", label: "Lokasyon" }, + { value: 5000, suffix: "+", label: "Mutlu Misafir" }, + { value: 5, suffix: "", label: "Hizmet Kategorisi" }, +]; + +const SERVICES = [ + { + id: "restaurant", + title: "Restaurant", + icon: Utensils, + desc: "Ege'nin taze lezzetleri, yerel malzemeler ve şef imzalı tatlar.", + bg: "https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?auto=format&fit=crop&q=80&w=800", + }, + { + id: "beach", + title: "Beach Bar", + icon: Umbrella, + desc: "Altın kumlar, masmavi deniz ve özenle seçilmiş içecekler.", + bg: "https://images.unsplash.com/photo-1507525428034-b723cf961d3e?auto=format&fit=crop&q=80&w=800", + }, + { + id: "bungalow", + title: "Bungalov", + icon: Home, + desc: "Doğa ile iç içe, huzurlu ve modern konaklama deneyimi.", + bg: "https://images.unsplash.com/photo-1449844908441-8829872d2607?auto=format&fit=crop&q=80&w=800", + }, + { + id: "kitesurf", + title: "Kite Surf", + icon: Wind, + desc: "Rüzgarın enerjisini hissedin; başlangıç ve ileri seviye dersler.", + bg: "https://images.unsplash.com/photo-1526685514088-290076a0d426?auto=format&fit=crop&q=80&w=800", + }, + { + id: "hotel", + title: "Hotel", + icon: Hotel, + desc: "Premium konfor ve Ege'nin eşsiz manzarasıyla özel tatil.", + bg: "https://images.unsplash.com/photo-1566073771259-6a8506099945?auto=format&fit=crop&q=80&w=800", + }, +]; + + + +const TESTIMONIALS = [ + { + name: "Ayşe Y.", + origin: "İstanbul", + comment: + "Ege'de şimdiye kadar geçirdiğim en güzel tatildi. Hizmet kalitesi muazzamdı, her detay özenle düşünülmüş.", + rating: 5, + }, + { + name: "John S.", + origin: "London", + comment: + "The kite surfing instructors were incredibly professional. The location is breathtaking — I'll be back next summer.", + rating: 5, + }, + { + name: "Mehmet K.", + origin: "Ankara", + comment: + "Bungalovlar son derece huzurlu. Doğanın içindeyken şehrin konforundan hiç taviz vermiyorsunuz.", + rating: 5, + }, +]; + +const fadeUp: Variants = { + hidden: { opacity: 0, y: 30 }, + visible: (i = 0) => ({ + opacity: 1, + y: 0, + transition: { duration: 0.65, delay: i * 0.12, ease: [0.16, 1, 0.3, 1] as [number, number, number, number] }, + }), +}; + +export default function HomeClient({ lang, dict }: { lang: string; dict: any }) { + const [activeMap, setActiveMap] = useState(0); + + const VENUES: { id: string; title: string; tag: string; desc: string; img: string; color: string }[] = dict.venuesList; + const LOCATIONS_MAP: { place: string; addr: string; embed: string }[] = dict.locationsMap; + + return ( +
+ + {/* ── Hero ── */} +
+
+
+
+ +
+ {/* Eyebrow */} + + {dict.hero.eyebrow} + + + {/* Main heading */} +

+ +

+ + + {dict.hero.subtitle} + + + + + + + + +
+ + {/* Scroll indicator */} + + {dict.hero.scroll} + + +
+ + {/* ── Marquee Strip ── */} +
+ + + + {/* ── Stats ── */} +
+
+
+ {STATS.map((s, i) => ( + +

+ +

+

+ {s.label} +

+
+ ))} +
+
+
+ + {/* ── Services (Geçici olarak gizlendi) ── */} + {/* +
+
+ + +
+ {SERVICES.map((service, i) => ( + +
+
+ +
+ +
+
+ +
+

{service.title}

+

+ {service.desc} +

+
+ + ))} +
+
+
+ */} + + {/* ── Venues ── */} +
+
+ + +
+ {VENUES.map((venue, i) => ( + + {/* Image */} +
+ {venue.title} +
+ + {venue.tag} + +
+ + {/* Text */} +
+

+ {venue.tag} +

+

+ {venue.title} +

+ +

{venue.desc}

+ + {dict.cta.exploreBtn} + + +
+ + ))} +
+
+
+ + {/* ── Testimonials (Geçici olarak gizlendi) ── */} + {/* +
+
+ +
+ + +
+ {TESTIMONIALS.map((t, i) => ( + + + " + + +
+ {[...Array(t.rating)].map((_, j) => ( + + ))} +
+ +

+ "{t.comment}" +

+ +
+
+
+

{t.name}

+

{t.origin}

+
+
+ + ))} +
+
+
+ */} + + {/* ── CTA Banner ── */} +
+
+
+ +
+

+ {dict.cta.eyebrow} +

+

+ {dict.cta.title1}
+ {dict.cta.title2} +

+

+ {dict.cta.subtitle} +

+
+ + + {dict.cta.btn1} + + + + + +
+
+
+ + {/* ── Map / Location ── */} +
+
+
+
+ +

+ {dict.venues.subtitle} +

+
    + {LOCATIONS_MAP.map((loc, idx) => ( +
  • setActiveMap(idx)} + > + +
    + + {loc.place} + + {loc.addr} +
    +
  • + ))} +
+
+ +
+