From ac78e5bf40e2e23c4b030b76ed75066cda0f301d Mon Sep 17 00:00:00 2001 From: AyrisAI Date: Sat, 11 Jul 2026 16:15:26 +0300 Subject: [PATCH] bot --- app/[lang]/aktiviteler/page.tsx | 11 ++- app/[lang]/etkinlikler/page.tsx | 33 +++++--- app/[lang]/galeri/page.tsx | 66 ++++++++++++---- app/[lang]/hakkimizda/page.tsx | 82 ++++++++++++++------ app/[lang]/iletisim/page.tsx | 129 ++++++++++++++++++++------------ app/[lang]/layout.tsx | 4 +- app/[lang]/odalar/page.tsx | 91 +++++++++++++++++----- app/[lang]/page.tsx | 86 +++++++++++++++------ app/[lang]/restoran/page.tsx | 78 +++++++++++++------ app/actions/activities.ts | 4 +- app/robots.ts | 25 ++++--- app/sitemap.ts | 4 + components/Footer.tsx | 55 +++++++++----- components/HeroVideo.tsx | 1 + components/Navbar.tsx | 41 +++++----- package-lock.json | 116 +--------------------------- 16 files changed, 504 insertions(+), 322 deletions(-) diff --git a/app/[lang]/aktiviteler/page.tsx b/app/[lang]/aktiviteler/page.tsx index 5698fb3..d4c278e 100644 --- a/app/[lang]/aktiviteler/page.tsx +++ b/app/[lang]/aktiviteler/page.tsx @@ -22,6 +22,7 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str export default async function AktivitelerPage({ params }: { params: Promise<{ lang: string }> }) { const { lang } = await params; + const isEn = lang === "en"; const activities = await prisma.activity.findMany({ where: { lang }, orderBy: { order: "asc" } }); return ( @@ -32,21 +33,22 @@ export default async function AktivitelerPage({ params }: { params: Promise<{ la
Aktiviteler
- Deneyimler + {isEn ? "Experiences" : "Deneyimler"}

- Aktiviteler + {isEn ? "Activities" : "Aktiviteler"}

- Rüzgarı hisset, doğayla bir ol. + {isEn ? "Feel the wind, be one with nature." : "Rüzgarı hisset, doğayla bir ol."}

@@ -62,6 +64,7 @@ export default async function AktivitelerPage({ params }: { params: Promise<{ la src={act.image} alt={act.title} fill + sizes="(max-width: 768px) 100vw, 50vw" className="object-cover group-hover:scale-105 transition-transform duration-700" /> {act.badge && ( diff --git a/app/[lang]/etkinlikler/page.tsx b/app/[lang]/etkinlikler/page.tsx index b2bc296..5f47411 100644 --- a/app/[lang]/etkinlikler/page.tsx +++ b/app/[lang]/etkinlikler/page.tsx @@ -22,6 +22,7 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str export default async function EventsPage({ params }: { params: Promise<{ lang: string }> }) { const { lang } = await params; + const isEn = lang === "en"; const events = await prisma.event.findMany({ where: { lang }, orderBy: { date: "asc" } }); return ( @@ -34,8 +35,9 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s
Kite Beach Akyaka Etkinlikler @@ -48,10 +50,12 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s Kite Beach Akyaka

- Etkinlikler + {isEn ? "Events" : "Etkinlikler"}

- Müzik, spor ve doğanın iç içe geçtiği unutulmaz deneyimler. + {isEn + ? "Unforgettable experiences where music, sports, and nature intertwine." + : "Müzik, spor ve doğanın iç içe geçtiği unutulmaz deneyimler."}

@@ -74,6 +78,7 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s src={event.image} alt={event.title} fill + sizes="(max-width: 768px) 100vw, 50vw" className="object-cover" /> {event.badge && ( @@ -114,7 +119,7 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s href={`/${lang}/iletisim`} className="inline-flex items-center gap-2 text-xs font-bold tracking-widest uppercase transition-colors bg-accent text-white px-6 py-3 rounded-full hover:bg-accent/90" > - Bize Ulaşın + {isEn ? "Contact Us" : "Bize Ulaşın"}
@@ -122,7 +127,9 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s )) : ( -
Henüz etkinlik eklenmedi.
+
+ {isEn ? "No events added yet." : "Henüz etkinlik eklenmedi."} +
)} @@ -132,16 +139,22 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s {/* CTA BAND */}
- Organizasyon -

Kendi Etkinliğinizi Planlayın

+ + {isEn ? "Organization" : "Organizasyon"} + +

+ {isEn ? "Plan Your Own Event" : "Kendi Etkinliğinizi Planlayın"} +

- Özel partiler, düğünler veya kurumsal etkinlikler için Kite Beach Akyaka'nın eşsiz atmosferini kiralayabilirsiniz. Detaylar için bizimle iletişime geçin. + {isEn + ? "You can rent the unique atmosphere of Kite Beach Akyaka for private parties, weddings, or corporate events. Contact us for details." + : "Özel partiler, düğünler veya kurumsal etkinlikler için Kite Beach Akyaka'nın eşsiz atmosferini kiralayabilirsiniz. Detaylar için bizimle iletişime geçin."}

- Bize Ulaşın + {isEn ? "Contact Us" : "Bize Ulaşın"}
diff --git a/app/[lang]/galeri/page.tsx b/app/[lang]/galeri/page.tsx index f1a84ca..3e4cf2f 100644 --- a/app/[lang]/galeri/page.tsx +++ b/app/[lang]/galeri/page.tsx @@ -1,32 +1,66 @@ "use client"; import Image from "next/image"; -import { useState } from "react"; +import { useState, use } from "react"; -const filters = ["Tümü", "Odalar", "Aktiviteler", "Restoran", "Doğa"] as const; -type Filter = (typeof filters)[number]; +const getAltText = (alt: string, isEn: boolean) => { + if (!isEn) return alt; + const translations: Record = { + "Standart Oda": "Standard Room", + "Kitesurf": "Kitesurfing", + "Nehir Doğa": "River Nature", + "Nehir Manzaralı Oda": "River View Room", + "Restoran": "Restaurant", + "Yoga": "Yoga", + "Bungalow": "Bungalow", + "SUP": "Stand Up Paddleboarding", + "Kahvaltı": "Breakfast Spread", + "Bisiklet": "Bicycle Rental", + "Restoran Ambiyans": "Restaurant Ambience", + "Gün Batımı": "Sunset View", + }; + return translations[alt] || alt; +}; -const gallery: { src: string; alt: string; category: Exclude }[] = [ - { src: "https://images.unsplash.com/photo-1582719478250-c89404bb8a0e?q=80&w=2940&auto=format&fit=crop", alt: "Standart Oda", category: "Odalar" }, +const gallery: { src: string; alt: string; category: "Odalar" | "Aktiviteler" | "Restoran" | "Doğa" }[] = [ + { src: "https://images.unsplash.com/photo-1618773928121-c32242e63f39?q=80&w=2940&auto=format&fit=crop", alt: "Standart Oda", category: "Odalar" }, { src: "https://images.unsplash.com/photo-1526367790999-0150786686a2?q=80&w=2940&auto=format&fit=crop", alt: "Kitesurf", category: "Aktiviteler" }, { src: "https://images.unsplash.com/photo-1544551763-46a013bb70d5?q=80&w=2940&auto=format&fit=crop", alt: "Nehir Doğa", category: "Doğa" }, { src: "https://images.unsplash.com/photo-1566665797739-1674de7a421a?q=80&w=2874&auto=format&fit=crop", alt: "Nehir Manzaralı Oda",category: "Odalar" }, { src: "https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?q=80&w=2940&auto=format&fit=crop", alt: "Restoran", category: "Restoran" }, { src: "https://images.unsplash.com/photo-1544367567-0f2fcb009e0b?q=80&w=2940&auto=format&fit=crop", alt: "Yoga", category: "Aktiviteler" }, { src: "https://images.unsplash.com/photo-1499955085172-a104c9463ece?q=80&w=2940&auto=format&fit=crop", alt: "Bungalow", category: "Odalar" }, - { src: "https://images.unsplash.com/photo-1522883392419-7d8cb2435728?q=80&w=2924&auto=format&fit=crop", alt: "SUP", category: "Aktiviteler" }, + { src: "https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=2940&auto=format&fit=crop", alt: "SUP", category: "Aktiviteler" }, { src: "https://images.unsplash.com/photo-1551504734-5ee1c4a1479b?q=80&w=2940&auto=format&fit=crop", alt: "Kahvaltı", category: "Restoran" }, { src: "https://images.unsplash.com/photo-1511994298241-608e28f14fde?q=80&w=2940&auto=format&fit=crop", alt: "Bisiklet", category: "Aktiviteler" }, { src: "https://images.unsplash.com/photo-1544148103-0773bf10d330?q=80&w=2940&auto=format&fit=crop", alt: "Restoran Ambiyans", category: "Restoran" }, { src: "https://images.unsplash.com/photo-1498623116890-37e912163d5d?q=80&w=2940&auto=format&fit=crop", alt: "Gün Batımı", category: "Doğa" }, ]; -export default function GaleriPage() { - const [active, setActive] = useState("Tümü"); +export default function GaleriPage({ params }: { params: Promise<{ lang: string }> }) { + const { lang } = use(params); + const isEn = lang === "en"; + + const filters = isEn + ? ["All", "Rooms", "Activities", "Restaurant", "Nature"] + : ["Tümü", "Odalar", "Aktiviteler", "Restoran", "Doğa"]; + + const [active, setActive] = useState(isEn ? "All" : "Tümü"); const [lightbox, setLightbox] = useState(null); + const getInternalCategory = (filterName: string) => { + if (filterName === "All" || filterName === "Tümü") return "Tümü"; + if (filterName === "Rooms") return "Odalar"; + if (filterName === "Activities") return "Aktiviteler"; + if (filterName === "Restaurant") return "Restoran"; + if (filterName === "Nature") return "Doğa"; + return filterName; + }; + + const internalActive = getInternalCategory(active); + const filtered = - active === "Tümü" ? gallery : gallery.filter((g) => g.category === active); + internalActive === "Tümü" ? gallery : gallery.filter((g) => g.category === internalActive); return (
@@ -35,11 +69,13 @@ export default function GaleriPage() { {/* Heading */}
- Fotoğraflar + {isEn ? "Photos" : "Fotoğraflar"} -

Galeri

+

{isEn ? "Gallery" : "Galeri"}

- Kite Beach Akyaka'nın eşsiz doğasını, modern odalarını ve heyecan verici aktivitelerini keşfedin. + {isEn + ? "Discover the unique nature, modern rooms, and exciting activities of Kite Beach Akyaka." + : "Kite Beach Akyaka'nın eşsiz doğasını, modern odalarını ve heyecan verici aktivitelerini keşfedin."}

@@ -72,13 +108,14 @@ export default function GaleriPage() {
{img.alt}
- {img.alt} + {getAltText(img.alt, isEn)}
@@ -99,6 +136,7 @@ export default function GaleriPage() { src={lightbox} alt="Galeri" fill + sizes="100vw" className="object-contain rounded-xl" />
diff --git a/app/[lang]/hakkimizda/page.tsx b/app/[lang]/hakkimizda/page.tsx index 91a7949..0c01dc5 100644 --- a/app/[lang]/hakkimizda/page.tsx +++ b/app/[lang]/hakkimizda/page.tsx @@ -17,7 +17,7 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str }); } -const values = [ +const valuesTr = [ { icon: Leaf, title: "Doğaya Saygı", @@ -35,14 +35,45 @@ const values = [ }, ]; -const stats = [ +const valuesEn = [ + { + icon: Leaf, + title: "Respect for Nature", + desc: "We adopt zero waste and sustainability principles in all processes of our facility. We offer an environmentally conscious stay experience.", + }, + { + icon: ChefHat, + title: "Local Kitchen", + desc: "We source a large portion of our ingredients from local producers and Aegean villages. Fresh, seasonal and sustainable.", + }, + { + icon: Award, + title: "Premium Experience", + desc: "From our IKO certified kitesurf school to our rooms, we offer the highest quality standards at every point.", + }, +]; + +const statsTr = [ { value: "10+", label: "Yıllık Deneyim" }, { value: "500+", label: "Mutlu Misafir" }, { value: "3", label: "IKO Sertifikalı Eğitmen" }, { value: "4", label: "Benzersiz Aktivite" }, ]; -export default function HakkimizdaPage() { +const statsEn = [ + { value: "10+", label: "Years Experience" }, + { value: "500+", label: "Happy Guests" }, + { value: "3", label: "IKO Certified Instructor" }, + { value: "4", label: "Unique Activity" }, +]; + +export default async function HakkimizdaPage({ params }: { params: Promise<{ lang: string }> }) { + const { lang } = await params; + const isEn = lang === "en"; + + const displayValues = isEn ? valuesEn : valuesTr; + const displayStats = isEn ? statsEn : statsTr; + return (
@@ -51,21 +82,22 @@ export default function HakkimizdaPage() {
Hakkımızda
- Biz Kimiz + {isEn ? "Who We Are" : "Biz Kimiz"}

- Hikayemiz + {isEn ? "Our Story" : "Hikayemiz"}

- Rüzgarın, denizin ve nehrin kesiştiği yerde. + {isEn ? "Where the wind, sea and river meet." : "Rüzgarın, denizin ve nehrin kesiştiği yerde."}

@@ -76,22 +108,25 @@ export default function HakkimizdaPage() {
- Akyaka'nın Kalbinde + {isEn ? "In the Heart of Akyaka" : "Akyaka'nın Kalbinde"}

- Bir Tutku
Yolculuğu + {isEn ? <>A Journey
of Passion : <>Bir Tutku
Yolculuğu}

- Kite Beach Akyaka, Gökova Körfezi'nin kristal sularına dökülen Azmak Nehri'nin - hemen kıyısında doğdu. Amacımız, misafirlerimize sıradan bir konaklamadan çok - daha fazlasını sunmak; rüzgar sörfü tutkusunu doğayla, konforla ve iyi yemekle - bütünleştiren eşsiz bir yaşam alanı yaratmaktı. + {isEn ? ( + "Kite Beach Akyaka was born right on the banks of the Azmak River flowing into the crystal waters of the Gulf of Gokova. Our goal was to offer our guests much more than a typical stay; to create a unique living space that integrates the passion for kitesurfing with nature, comfort, and good food." + ) : ( + "Kite Beach Akyaka, Gökova Körfezi'nin kristal sularına dökülen Azmak Nehri'nin hemen kıyısında doğdu. Amacımız, misafirlerimize sıradan bir konaklamadan çok daha fazlasını sunmak; rüzgar sörfü tutkusunu doğayla, konforla ve iyi yemekle bütünleştiren eşsiz bir yaşam alanı yaratmaktı." + )}

- Doğaya saygılı mimarimiz, lokal üreticileri destekleyen mutfağımız ve IKO - standartlarındaki eğitim merkezimizle, Akyaka'nın sürdürülebilir turizm yüzü - olmayı hedefliyoruz. + {isEn ? ( + "With our nature-friendly architecture, our kitchen supporting local producers, and our training center in IKO standards, we aim to be the face of sustainable tourism in Akyaka." + ) : ( + "Doğaya saygılı mimarimiz, lokal üreticileri destekleyen mutfağımız ve IKO standartlarındaki eğitim merkezimizle, Akyaka'nın sürdürülebilir turizm yüzü olmayı hedefliyoruz." + )}

@@ -102,6 +137,7 @@ export default function HakkimizdaPage() { src="https://images.unsplash.com/photo-1526367790999-0150786686a2?q=80&w=2940&auto=format&fit=crop" alt="Kitesurf" fill + sizes="(max-width: 768px) 100vw, 50vw" className="object-cover" />
@@ -114,7 +150,7 @@ export default function HakkimizdaPage() {
- {stats.map((s, i) => ( + {displayStats.map((s, i) => (
{s.value} {s.label} @@ -129,13 +165,13 @@ export default function HakkimizdaPage() {
- Ne İnanıyoruz + {isEn ? "What We Believe" : "Ne İnanıyoruz"} -

Değerlerimiz

+

{isEn ? "Our Values" : "Değerlerimiz"}

- {values.map((v, i) => { + {displayValues.map((v, i) => { const Icon = v.icon; return (
@@ -156,10 +192,12 @@ export default function HakkimizdaPage() {
- Vizyonumuz + {isEn ? "Our Vision" : "Vizyonumuz"}
- "Akyaka'nın sürdürülebilir turizm yüzü olmak ve her misafirimize benzersiz bir kaçış sunmak." + {isEn + ? "\"To be the face of sustainable tourism in Akyaka and to offer each of our guests a unique escape.\"" + : "\"Akyaka'nın sürdürülebilir turizm yüzü olmak ve her misafirimize benzersiz bir kaçış sunmak.\""}
diff --git a/app/[lang]/iletisim/page.tsx b/app/[lang]/iletisim/page.tsx index b2d5213..9e25fb7 100644 --- a/app/[lang]/iletisim/page.tsx +++ b/app/[lang]/iletisim/page.tsx @@ -16,7 +16,62 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str }); } -export default function IletisimPage() { +export default async function IletisimPage({ params }: { params: Promise<{ lang: string }> }) { + const { lang } = await params; + const isEn = lang === "en"; + + const contactItems = isEn ? [ + { + icon: MapPin, + label: "Address", + value: "Akyaka District, Akcapinar Location, Mugla, Turkey", + href: undefined, + }, + { + icon: Phone, + label: "Phone / WhatsApp", + value: "+90 533 081 6181", + href: "tel:+905330816181", + }, + { + icon: Mail, + label: "Email", + value: "info@kitebeachakyaka.com.tr", + href: "mailto:info@kitebeachakyaka.com.tr", + }, + { + icon: Clock, + label: "Reception", + value: "Every day 08:00 – 22:00", + href: undefined, + }, + ] : [ + { + icon: MapPin, + label: "Adres", + value: "Akyaka Mahallesi, Akçapınar Mevkii, Muğla", + href: undefined, + }, + { + icon: Phone, + label: "Telefon / WhatsApp", + value: "+90 533 081 6181", + href: "tel:+905330816181", + }, + { + icon: Mail, + label: "E-posta", + value: "info@kitebeachakyaka.com.tr", + href: "mailto:info@kitebeachakyaka.com.tr", + }, + { + icon: Clock, + label: "Resepsiyon", + value: "Her gün 08:00 – 22:00", + href: undefined, + }, + ]; + return (
@@ -24,14 +79,17 @@ export default function IletisimPage() { {/* Heading */}
- Bize Ulaşın + {isEn ? "Contact Us" : "Bize Ulaşın"}

- İletişim + {isEn ? "Contact" : "İletişim"}

- Sorularınız veya talepleriniz için bizimle iletişime geçin. - Ekibimiz en kısa sürede dönüş yapacaktır. + {isEn ? ( + "Get in touch with us for your questions or requests. Our team will get back to you as soon as possible." + ) : ( + "Sorularınız veya talepleriniz için bizimle iletişime geçin. Ekibimiz en kısa sürede dönüş yapacaktır." + )}

@@ -40,23 +98,25 @@ export default function IletisimPage() { {/* Form — takes 3 cols */}
-

Mesaj Gönderin

+

+ {isEn ? "Send a Message" : "Mesaj Gönderin"} +