bot
This commit is contained in:
@@ -22,6 +22,7 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str
|
|||||||
|
|
||||||
export default async function AktivitelerPage({ params }: { params: Promise<{ lang: string }> }) {
|
export default async function AktivitelerPage({ params }: { params: Promise<{ lang: string }> }) {
|
||||||
const { lang } = await params;
|
const { lang } = await params;
|
||||||
|
const isEn = lang === "en";
|
||||||
const activities = await prisma.activity.findMany({ where: { lang }, orderBy: { order: "asc" } });
|
const activities = await prisma.activity.findMany({ where: { lang }, orderBy: { order: "asc" } });
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -32,21 +33,22 @@ export default async function AktivitelerPage({ params }: { params: Promise<{ la
|
|||||||
<div className="absolute inset-0">
|
<div className="absolute inset-0">
|
||||||
<Image
|
<Image
|
||||||
src="https://images.unsplash.com/photo-1526367790999-0150786686a2?q=80&w=2940&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1526367790999-0150786686a2?q=80&w=2940&auto=format&fit=crop"
|
||||||
alt="Aktiviteler"
|
alt={isEn ? "Activities" : "Aktiviteler"}
|
||||||
fill
|
fill
|
||||||
|
sizes="100vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 bg-gradient-to-t from-dark/85 via-dark/30 to-black/20" />
|
<div className="absolute inset-0 bg-gradient-to-t from-dark/85 via-dark/30 to-black/20" />
|
||||||
</div>
|
</div>
|
||||||
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-14 w-full">
|
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-14 w-full">
|
||||||
<span className="block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-3 animate-fade-up">
|
<span className="block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-3 animate-fade-up">
|
||||||
Deneyimler
|
{isEn ? "Experiences" : "Deneyimler"}
|
||||||
</span>
|
</span>
|
||||||
<h1 className="font-serif text-5xl md:text-7xl text-white font-bold animate-fade-up delay-100">
|
<h1 className="font-serif text-5xl md:text-7xl text-white font-bold animate-fade-up delay-100">
|
||||||
Aktiviteler
|
{isEn ? "Activities" : "Aktiviteler"}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-white/60 text-lg mt-3 font-light animate-fade-up delay-200">
|
<p className="text-white/60 text-lg mt-3 font-light animate-fade-up delay-200">
|
||||||
Rüzgarı hisset, doğayla bir ol.
|
{isEn ? "Feel the wind, be one with nature." : "Rüzgarı hisset, doğayla bir ol."}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -62,6 +64,7 @@ export default async function AktivitelerPage({ params }: { params: Promise<{ la
|
|||||||
src={act.image}
|
src={act.image}
|
||||||
alt={act.title}
|
alt={act.title}
|
||||||
fill
|
fill
|
||||||
|
sizes="(max-width: 768px) 100vw, 50vw"
|
||||||
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
||||||
/>
|
/>
|
||||||
{act.badge && (
|
{act.badge && (
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str
|
|||||||
|
|
||||||
export default async function EventsPage({ params }: { params: Promise<{ lang: string }> }) {
|
export default async function EventsPage({ params }: { params: Promise<{ lang: string }> }) {
|
||||||
const { lang } = await params;
|
const { lang } = await params;
|
||||||
|
const isEn = lang === "en";
|
||||||
const events = await prisma.event.findMany({ where: { lang }, orderBy: { date: "asc" } });
|
const events = await prisma.event.findMany({ where: { lang }, orderBy: { date: "asc" } });
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -34,8 +35,9 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s
|
|||||||
<div className="absolute inset-0 z-0">
|
<div className="absolute inset-0 z-0">
|
||||||
<Image
|
<Image
|
||||||
src="https://images.unsplash.com/photo-1514525253161-7a46d19cd819?q=80&w=2874&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1514525253161-7a46d19cd819?q=80&w=2874&auto=format&fit=crop"
|
||||||
alt="Kite Beach Akyaka Etkinlikler"
|
alt={isEn ? "Kite Beach Akyaka Events" : "Kite Beach Akyaka Etkinlikler"}
|
||||||
fill
|
fill
|
||||||
|
sizes="100vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
priority
|
priority
|
||||||
/>
|
/>
|
||||||
@@ -48,10 +50,12 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s
|
|||||||
Kite Beach Akyaka
|
Kite Beach Akyaka
|
||||||
</span>
|
</span>
|
||||||
<h1 className="font-serif text-5xl md:text-7xl font-bold text-white mb-6">
|
<h1 className="font-serif text-5xl md:text-7xl font-bold text-white mb-6">
|
||||||
Etkinlikler
|
{isEn ? "Events" : "Etkinlikler"}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-white/80 text-lg md:text-xl font-light max-w-2xl mx-auto leading-relaxed">
|
<p className="text-white/80 text-lg md:text-xl font-light max-w-2xl mx-auto leading-relaxed">
|
||||||
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."}
|
||||||
</p>
|
</p>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
</div>
|
</div>
|
||||||
@@ -74,6 +78,7 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s
|
|||||||
src={event.image}
|
src={event.image}
|
||||||
alt={event.title}
|
alt={event.title}
|
||||||
fill
|
fill
|
||||||
|
sizes="(max-width: 768px) 100vw, 50vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
{event.badge && (
|
{event.badge && (
|
||||||
@@ -114,7 +119,7 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s
|
|||||||
href={`/${lang}/iletisim`}
|
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"
|
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 <ArrowRight className="w-4 h-4" />
|
{isEn ? "Contact Us" : "Bize Ulaşın"} <ArrowRight className="w-4 h-4" />
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -122,7 +127,9 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s
|
|||||||
</div>
|
</div>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
)) : (
|
)) : (
|
||||||
<div className="text-center py-20 text-gray-500">Henüz etkinlik eklenmedi.</div>
|
<div className="text-center py-20 text-gray-500">
|
||||||
|
{isEn ? "No events added yet." : "Henüz etkinlik eklenmedi."}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -132,16 +139,22 @@ export default async function EventsPage({ params }: { params: Promise<{ lang: s
|
|||||||
{/* CTA BAND */}
|
{/* CTA BAND */}
|
||||||
<section className="bg-dark text-white py-24 text-center px-4">
|
<section className="bg-dark text-white py-24 text-center px-4">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<span className="block text-accent text-xs font-bold tracking-[0.25em] uppercase mb-4">Organizasyon</span>
|
<span className="block text-accent text-xs font-bold tracking-[0.25em] uppercase mb-4">
|
||||||
<h2 className="font-serif text-4xl md:text-5xl font-bold mb-6">Kendi Etkinliğinizi Planlayın</h2>
|
{isEn ? "Organization" : "Organizasyon"}
|
||||||
|
</span>
|
||||||
|
<h2 className="font-serif text-4xl md:text-5xl font-bold mb-6">
|
||||||
|
{isEn ? "Plan Your Own Event" : "Kendi Etkinliğinizi Planlayın"}
|
||||||
|
</h2>
|
||||||
<p className="text-white/60 max-w-xl mx-auto mb-10 leading-relaxed text-sm">
|
<p className="text-white/60 max-w-xl mx-auto mb-10 leading-relaxed text-sm">
|
||||||
Ö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."}
|
||||||
</p>
|
</p>
|
||||||
<Link
|
<Link
|
||||||
href="/iletisim"
|
href={`/${lang}/iletisim`}
|
||||||
className="inline-block border-2 border-white/20 hover:border-white px-10 py-4 rounded-full text-xs font-bold tracking-[0.15em] uppercase transition-all"
|
className="inline-block border-2 border-white/20 hover:border-white px-10 py-4 rounded-full text-xs font-bold tracking-[0.15em] uppercase transition-all"
|
||||||
>
|
>
|
||||||
Bize Ulaşın
|
{isEn ? "Contact Us" : "Bize Ulaşın"}
|
||||||
</Link>
|
</Link>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
+52
-14
@@ -1,32 +1,66 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import Image from "next/image";
|
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;
|
const getAltText = (alt: string, isEn: boolean) => {
|
||||||
type Filter = (typeof filters)[number];
|
if (!isEn) return alt;
|
||||||
|
const translations: Record<string, string> = {
|
||||||
|
"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<Filter, "Tümü"> }[] = [
|
const gallery: { src: string; alt: string; category: "Odalar" | "Aktiviteler" | "Restoran" | "Doğa" }[] = [
|
||||||
{ src: "https://images.unsplash.com/photo-1582719478250-c89404bb8a0e?q=80&w=2940&auto=format&fit=crop", alt: "Standart Oda", category: "Odalar" },
|
{ 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-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-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-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-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-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-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-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-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-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" },
|
{ 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() {
|
export default function GaleriPage({ params }: { params: Promise<{ lang: string }> }) {
|
||||||
const [active, setActive] = useState<Filter>("Tümü");
|
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<string>(isEn ? "All" : "Tümü");
|
||||||
const [lightbox, setLightbox] = useState<string | null>(null);
|
const [lightbox, setLightbox] = useState<string | null>(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 =
|
const filtered =
|
||||||
active === "Tümü" ? gallery : gallery.filter((g) => g.category === active);
|
internalActive === "Tümü" ? gallery : gallery.filter((g) => g.category === internalActive);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-background pt-28 pb-20">
|
<div className="min-h-screen bg-background pt-28 pb-20">
|
||||||
@@ -35,11 +69,13 @@ export default function GaleriPage() {
|
|||||||
{/* Heading */}
|
{/* Heading */}
|
||||||
<div className="text-center mb-12">
|
<div className="text-center mb-12">
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
||||||
Fotoğraflar
|
{isEn ? "Photos" : "Fotoğraflar"}
|
||||||
</span>
|
</span>
|
||||||
<h1 className="font-serif text-5xl font-bold text-dark mb-4">Galeri</h1>
|
<h1 className="font-serif text-5xl font-bold text-dark mb-4">{isEn ? "Gallery" : "Galeri"}</h1>
|
||||||
<p className="text-muted max-w-md mx-auto text-sm leading-relaxed">
|
<p className="text-muted max-w-md mx-auto text-sm leading-relaxed">
|
||||||
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."}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -72,13 +108,14 @@ export default function GaleriPage() {
|
|||||||
<div className="relative w-full" style={{ paddingBottom: idx % 3 === 0 ? "133%" : "75%" }}>
|
<div className="relative w-full" style={{ paddingBottom: idx % 3 === 0 ? "133%" : "75%" }}>
|
||||||
<Image
|
<Image
|
||||||
src={img.src}
|
src={img.src}
|
||||||
alt={img.alt}
|
alt={getAltText(img.alt, isEn)}
|
||||||
fill
|
fill
|
||||||
|
sizes="(max-width: 640px) 100vw, (max-width: 768px) 50vw, 33vw"
|
||||||
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 bg-dark/40 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-center justify-center">
|
<div className="absolute inset-0 bg-dark/40 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-center justify-center">
|
||||||
<span className="text-white font-semibold text-[13px] tracking-wider bg-dark/60 backdrop-blur-sm px-4 py-2 rounded-full">
|
<span className="text-white font-semibold text-[13px] tracking-wider bg-dark/60 backdrop-blur-sm px-4 py-2 rounded-full">
|
||||||
{img.alt}
|
{getAltText(img.alt, isEn)}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -99,6 +136,7 @@ export default function GaleriPage() {
|
|||||||
src={lightbox}
|
src={lightbox}
|
||||||
alt="Galeri"
|
alt="Galeri"
|
||||||
fill
|
fill
|
||||||
|
sizes="100vw"
|
||||||
className="object-contain rounded-xl"
|
className="object-contain rounded-xl"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const values = [
|
const valuesTr = [
|
||||||
{
|
{
|
||||||
icon: Leaf,
|
icon: Leaf,
|
||||||
title: "Doğaya Saygı",
|
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: "10+", label: "Yıllık Deneyim" },
|
||||||
{ value: "500+", label: "Mutlu Misafir" },
|
{ value: "500+", label: "Mutlu Misafir" },
|
||||||
{ value: "3", label: "IKO Sertifikalı Eğitmen" },
|
{ value: "3", label: "IKO Sertifikalı Eğitmen" },
|
||||||
{ value: "4", label: "Benzersiz Aktivite" },
|
{ 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 (
|
return (
|
||||||
<div className="min-h-screen bg-background">
|
<div className="min-h-screen bg-background">
|
||||||
|
|
||||||
@@ -51,21 +82,22 @@ export default function HakkimizdaPage() {
|
|||||||
<div className="absolute inset-0">
|
<div className="absolute inset-0">
|
||||||
<Image
|
<Image
|
||||||
src="https://images.unsplash.com/photo-1544551763-46a013bb70d5?q=80&w=2940&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1544551763-46a013bb70d5?q=80&w=2940&auto=format&fit=crop"
|
||||||
alt="Hakkımızda"
|
alt={isEn ? "About Us" : "Hakkımızda"}
|
||||||
fill
|
fill
|
||||||
|
sizes="100vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 bg-gradient-to-t from-dark/85 via-dark/30 to-black/20" />
|
<div className="absolute inset-0 bg-gradient-to-t from-dark/85 via-dark/30 to-black/20" />
|
||||||
</div>
|
</div>
|
||||||
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-14 w-full">
|
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-14 w-full">
|
||||||
<span className="block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-3 animate-fade-up">
|
<span className="block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-3 animate-fade-up">
|
||||||
Biz Kimiz
|
{isEn ? "Who We Are" : "Biz Kimiz"}
|
||||||
</span>
|
</span>
|
||||||
<h1 className="font-serif text-5xl md:text-7xl text-white font-bold animate-fade-up delay-100">
|
<h1 className="font-serif text-5xl md:text-7xl text-white font-bold animate-fade-up delay-100">
|
||||||
Hikayemiz
|
{isEn ? "Our Story" : "Hikayemiz"}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-white/60 text-lg mt-3 font-light animate-fade-up delay-200">
|
<p className="text-white/60 text-lg mt-3 font-light animate-fade-up delay-200">
|
||||||
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."}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -76,22 +108,25 @@ export default function HakkimizdaPage() {
|
|||||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-16 items-center">
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-16 items-center">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-5">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-5">
|
||||||
Akyaka'nın Kalbinde
|
{isEn ? "In the Heart of Akyaka" : "Akyaka'nın Kalbinde"}
|
||||||
</span>
|
</span>
|
||||||
<h2 className="font-serif text-4xl font-bold text-dark mb-6 leading-tight">
|
<h2 className="font-serif text-4xl font-bold text-dark mb-6 leading-tight">
|
||||||
Bir Tutku<br />Yolculuğu
|
{isEn ? <>A Journey<br />of Passion</> : <>Bir Tutku<br />Yolculuğu</>}
|
||||||
</h2>
|
</h2>
|
||||||
<div className="space-y-4 text-gray-500 leading-relaxed text-[15px]">
|
<div className="space-y-4 text-gray-500 leading-relaxed text-[15px]">
|
||||||
<p>
|
<p>
|
||||||
Kite Beach Akyaka, Gökova Körfezi'nin kristal sularına dökülen Azmak Nehri'nin
|
{isEn ? (
|
||||||
hemen kıyısında doğdu. Amacımız, misafirlerimize sıradan bir konaklamadan çok
|
"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."
|
||||||
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ı.
|
"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ı."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Doğaya saygılı mimarimiz, lokal üreticileri destekleyen mutfağımız ve IKO
|
{isEn ? (
|
||||||
standartlarındaki eğitim merkezimizle, Akyaka'nın sürdürülebilir turizm yüzü
|
"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."
|
||||||
olmayı hedefliyoruz.
|
) : (
|
||||||
|
"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."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
@@ -102,6 +137,7 @@ export default function HakkimizdaPage() {
|
|||||||
src="https://images.unsplash.com/photo-1526367790999-0150786686a2?q=80&w=2940&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1526367790999-0150786686a2?q=80&w=2940&auto=format&fit=crop"
|
||||||
alt="Kitesurf"
|
alt="Kitesurf"
|
||||||
fill
|
fill
|
||||||
|
sizes="(max-width: 768px) 100vw, 50vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -114,7 +150,7 @@ export default function HakkimizdaPage() {
|
|||||||
<section className="py-20 bg-primary">
|
<section className="py-20 bg-primary">
|
||||||
<div className="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<ScrollReveal stagger className="grid grid-cols-2 md:grid-cols-4 gap-0 divide-x divide-white/10">
|
<ScrollReveal stagger className="grid grid-cols-2 md:grid-cols-4 gap-0 divide-x divide-white/10">
|
||||||
{stats.map((s, i) => (
|
{displayStats.map((s, i) => (
|
||||||
<div key={i} className="text-center py-8 px-6">
|
<div key={i} className="text-center py-8 px-6">
|
||||||
<span className="block font-serif text-4xl font-bold text-white mb-2">{s.value}</span>
|
<span className="block font-serif text-4xl font-bold text-white mb-2">{s.value}</span>
|
||||||
<span className="block text-white/50 text-[12px] uppercase tracking-wider">{s.label}</span>
|
<span className="block text-white/50 text-[12px] uppercase tracking-wider">{s.label}</span>
|
||||||
@@ -129,13 +165,13 @@ export default function HakkimizdaPage() {
|
|||||||
<div className="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<ScrollReveal className="text-center mb-14">
|
<ScrollReveal className="text-center mb-14">
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
||||||
Ne İnanıyoruz
|
{isEn ? "What We Believe" : "Ne İnanıyoruz"}
|
||||||
</span>
|
</span>
|
||||||
<h2 className="font-serif text-4xl font-bold text-dark">Değerlerimiz</h2>
|
<h2 className="font-serif text-4xl font-bold text-dark">{isEn ? "Our Values" : "Değerlerimiz"}</h2>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
|
|
||||||
<ScrollReveal stagger className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
<ScrollReveal stagger className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||||
{values.map((v, i) => {
|
{displayValues.map((v, i) => {
|
||||||
const Icon = v.icon;
|
const Icon = v.icon;
|
||||||
return (
|
return (
|
||||||
<div key={i} className="bg-white rounded-2xl p-8 border border-sand card-lift">
|
<div key={i} className="bg-white rounded-2xl p-8 border border-sand card-lift">
|
||||||
@@ -156,10 +192,12 @@ export default function HakkimizdaPage() {
|
|||||||
<div className="max-w-3xl mx-auto px-4 text-center">
|
<div className="max-w-3xl mx-auto px-4 text-center">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-5">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-5">
|
||||||
Vizyonumuz
|
{isEn ? "Our Vision" : "Vizyonumuz"}
|
||||||
</span>
|
</span>
|
||||||
<blockquote className="font-serif text-3xl md:text-4xl font-bold leading-tight mb-8">
|
<blockquote className="font-serif text-3xl md:text-4xl font-bold leading-tight mb-8">
|
||||||
"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.\""}
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<div className="section-line mx-auto" />
|
<div className="section-line mx-auto" />
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
|
|||||||
@@ -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 (
|
return (
|
||||||
<div className="min-h-screen bg-background pt-28 pb-20">
|
<div className="min-h-screen bg-background pt-28 pb-20">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
@@ -24,14 +79,17 @@ export default function IletisimPage() {
|
|||||||
{/* Heading */}
|
{/* Heading */}
|
||||||
<div className="text-center mb-16">
|
<div className="text-center mb-16">
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
||||||
Bize Ulaşın
|
{isEn ? "Contact Us" : "Bize Ulaşın"}
|
||||||
</span>
|
</span>
|
||||||
<h1 className="font-serif text-5xl font-bold text-dark mb-4">
|
<h1 className="font-serif text-5xl font-bold text-dark mb-4">
|
||||||
İletişim
|
{isEn ? "Contact" : "İletişim"}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-muted max-w-lg mx-auto text-sm leading-relaxed">
|
<p className="text-muted max-w-lg mx-auto text-sm leading-relaxed">
|
||||||
Sorularınız veya talepleriniz için bizimle iletişime geçin.
|
{isEn ? (
|
||||||
Ekibimiz en kısa sürede dönüş yapacaktır.
|
"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."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -40,23 +98,25 @@ export default function IletisimPage() {
|
|||||||
{/* Form — takes 3 cols */}
|
{/* Form — takes 3 cols */}
|
||||||
<ScrollReveal className="lg:col-span-3">
|
<ScrollReveal className="lg:col-span-3">
|
||||||
<div className="bg-white rounded-3xl p-10 md:p-12 border border-sand shadow-sm">
|
<div className="bg-white rounded-3xl p-10 md:p-12 border border-sand shadow-sm">
|
||||||
<h2 className="font-serif text-2xl font-bold text-dark mb-8">Mesaj Gönderin</h2>
|
<h2 className="font-serif text-2xl font-bold text-dark mb-8">
|
||||||
|
{isEn ? "Send a Message" : "Mesaj Gönderin"}
|
||||||
|
</h2>
|
||||||
<form className="space-y-6">
|
<form className="space-y-6">
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-5">
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-5">
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="name" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
<label htmlFor="name" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
||||||
Ad Soyad
|
{isEn ? "Full Name" : "Ad Soyad"}
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
id="name"
|
id="name"
|
||||||
className="w-full px-4 py-3 rounded-xl border border-sand focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none transition-all bg-background text-[14px]"
|
className="w-full px-4 py-3 rounded-xl border border-sand focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none transition-all bg-background text-[14px]"
|
||||||
placeholder="Adınız Soyadınız"
|
placeholder={isEn ? "Your Full Name" : "Adınız Soyadınız"}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="phone" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
<label htmlFor="phone" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
||||||
Telefon
|
{isEn ? "Phone" : "Telefon"}
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="tel"
|
type="tel"
|
||||||
@@ -69,7 +129,7 @@ export default function IletisimPage() {
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="email" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
<label htmlFor="email" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
||||||
E-posta
|
{isEn ? "Email" : "E-posta"}
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="email"
|
type="email"
|
||||||
@@ -81,29 +141,29 @@ export default function IletisimPage() {
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="subject" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
<label htmlFor="subject" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
||||||
Konu
|
{isEn ? "Subject" : "Konu"}
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
id="subject"
|
id="subject"
|
||||||
className="w-full px-4 py-3 rounded-xl border border-sand focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none transition-all bg-background text-[14px] text-foreground"
|
className="w-full px-4 py-3 rounded-xl border border-sand focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none transition-all bg-background text-[14px] text-foreground"
|
||||||
>
|
>
|
||||||
<option>Oda Bilgisi</option>
|
<option>{isEn ? "Room Information" : "Oda Bilgisi"}</option>
|
||||||
<option>Kitesurf Dersi / Kiralama</option>
|
<option>{isEn ? "Kitesurf Lesson / Rental" : "Kitesurf Dersi / Kiralama"}</option>
|
||||||
<option>Restoran Bilgisi</option>
|
<option>{isEn ? "Restaurant Information" : "Restoran Bilgisi"}</option>
|
||||||
<option>Aktivite Bilgisi</option>
|
<option>{isEn ? "Activity Information" : "Aktivite Bilgisi"}</option>
|
||||||
<option>Diğer</option>
|
<option>{isEn ? "Other" : "Diğer"}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label htmlFor="message" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
<label htmlFor="message" className="block text-[12px] font-semibold text-foreground/60 mb-2 tracking-wider uppercase">
|
||||||
Mesajınız
|
{isEn ? "Your Message" : "Mesajınız"}
|
||||||
</label>
|
</label>
|
||||||
<textarea
|
<textarea
|
||||||
id="message"
|
id="message"
|
||||||
rows={5}
|
rows={5}
|
||||||
className="w-full px-4 py-3 rounded-xl border border-sand focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none transition-all bg-background text-[14px] resize-none"
|
className="w-full px-4 py-3 rounded-xl border border-sand focus:ring-2 focus:ring-primary/20 focus:border-primary outline-none transition-all bg-background text-[14px] resize-none"
|
||||||
placeholder="Talebinizi buraya yazabilirsiniz..."
|
placeholder={isEn ? "You can write your request here..." : "Talebinizi buraya yazabilirsiniz..."}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -111,7 +171,7 @@ export default function IletisimPage() {
|
|||||||
type="button"
|
type="button"
|
||||||
className="btn-shimmer w-full bg-accent text-white py-4 rounded-xl text-[12px] font-bold tracking-[0.15em] uppercase hover:bg-accent/90 transition-colors shadow-lg"
|
className="btn-shimmer w-full bg-accent text-white py-4 rounded-xl text-[12px] font-bold tracking-[0.15em] uppercase hover:bg-accent/90 transition-colors shadow-lg"
|
||||||
>
|
>
|
||||||
Mesaj Gönder
|
{isEn ? "Send Message" : "Mesaj Gönder"}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@@ -122,34 +182,11 @@ export default function IletisimPage() {
|
|||||||
|
|
||||||
{/* Contact info card */}
|
{/* Contact info card */}
|
||||||
<div className="bg-primary rounded-3xl p-8 text-white">
|
<div className="bg-primary rounded-3xl p-8 text-white">
|
||||||
<h3 className="font-serif text-xl font-bold mb-7">İletişim Bilgileri</h3>
|
<h3 className="font-serif text-xl font-bold mb-7">
|
||||||
|
{isEn ? "Contact Information" : "İletişim Bilgileri"}
|
||||||
|
</h3>
|
||||||
<ul className="space-y-6">
|
<ul className="space-y-6">
|
||||||
{[
|
{contactItems.map(({ icon: Icon, label, value, href }) => (
|
||||||
{
|
|
||||||
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,
|
|
||||||
},
|
|
||||||
].map(({ icon: Icon, label, value, href }) => (
|
|
||||||
<li key={label} className="flex items-start gap-4">
|
<li key={label} className="flex items-start gap-4">
|
||||||
<div className="w-9 h-9 bg-white/10 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5">
|
<div className="w-9 h-9 bg-white/10 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5">
|
||||||
<Icon size={15} className="text-accent" />
|
<Icon size={15} className="text-accent" />
|
||||||
|
|||||||
@@ -133,9 +133,9 @@ export default async function RootLayout({
|
|||||||
__html: JSON.stringify(buildJsonLd(lang)).replace(/</g, "\\u003c"),
|
__html: JSON.stringify(buildJsonLd(lang)).replace(/</g, "\\u003c"),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<Navbar />
|
<Navbar lang={lang} />
|
||||||
<main className="flex-grow">{children}</main>
|
<main className="flex-grow">{children}</main>
|
||||||
<Footer />
|
<Footer lang={lang} />
|
||||||
<WhatsAppButton />
|
<WhatsAppButton />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+74
-17
@@ -3,9 +3,9 @@ import Link from "next/link";
|
|||||||
import { Check, Wifi, Wind, Coffee, Eye, Trees } from "lucide-react";
|
import { Check, Wifi, Wind, Coffee, Eye, Trees } from "lucide-react";
|
||||||
import ScrollReveal from "@/components/ScrollReveal";
|
import ScrollReveal from "@/components/ScrollReveal";
|
||||||
|
|
||||||
const rooms = [
|
const roomsTr = [
|
||||||
{
|
{
|
||||||
img: "https://images.unsplash.com/photo-1582719478250-c89404bb8a0e?q=80&w=2940&auto=format&fit=crop",
|
img: "https://images.unsplash.com/photo-1618773928121-c32242e63f39?q=80&w=2940&auto=format&fit=crop",
|
||||||
tag: "Standart",
|
tag: "Standart",
|
||||||
name: "Standart Oda",
|
name: "Standart Oda",
|
||||||
desc: "Konforlu ve modern tasarımlı standart odalarımızda rahatlığın tadını çıkarın. Çift kişilik yatak ve şık dekorasyon ile dinlendirici bir atmosfer.",
|
desc: "Konforlu ve modern tasarımlı standart odalarımızda rahatlığın tadını çıkarın. Çift kişilik yatak ve şık dekorasyon ile dinlendirici bir atmosfer.",
|
||||||
@@ -51,7 +51,62 @@ const rooms = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export default function OdalarPage() {
|
const roomsEn = [
|
||||||
|
{
|
||||||
|
img: "https://images.unsplash.com/photo-1618773928121-c32242e63f39?q=80&w=2940&auto=format&fit=crop",
|
||||||
|
tag: "Standard",
|
||||||
|
name: "Standard Room",
|
||||||
|
desc: "Enjoy comfort in our modern standard rooms. Relaxing atmosphere with a double bed and stylish decoration.",
|
||||||
|
sqm: "20 m²",
|
||||||
|
price: "₺4.500",
|
||||||
|
features: [
|
||||||
|
{ icon: Wifi, label: "Free Wi-Fi" },
|
||||||
|
{ icon: Wind, label: "Air Conditioning" },
|
||||||
|
{ icon: Coffee, label: "Minibar" },
|
||||||
|
{ icon: Eye, label: "Garden View" },
|
||||||
|
],
|
||||||
|
reversed: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
img: "https://images.unsplash.com/photo-1566665797739-1674de7a421a?q=80&w=2874&auto=format&fit=crop",
|
||||||
|
tag: "Popular",
|
||||||
|
name: "River View Room",
|
||||||
|
desc: "Spacious rooms where you wake up to the unique view of the Azmak river. Listen to the sound of nature while sipping morning coffee on your private balcony.",
|
||||||
|
sqm: "25 m²",
|
||||||
|
price: "₺5.500",
|
||||||
|
features: [
|
||||||
|
{ icon: Eye, label: "River View" },
|
||||||
|
{ icon: Trees, label: "Private Balcony" },
|
||||||
|
{ icon: Coffee, label: "Nespresso Machine" },
|
||||||
|
{ icon: Wifi, label: "Free Wi-Fi" },
|
||||||
|
],
|
||||||
|
reversed: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
img: "https://images.unsplash.com/photo-1499955085172-a104c9463ece?q=80&w=2940&auto=format&fit=crop",
|
||||||
|
tag: "Premium",
|
||||||
|
name: "Wooden Bungalow",
|
||||||
|
desc: "Wooden living area with private entrance and terrace, fully integrated with nature. Ideal for couples seeking privacy and serenity.",
|
||||||
|
sqm: "35 m²",
|
||||||
|
price: "₺7.000",
|
||||||
|
features: [
|
||||||
|
{ icon: Trees, label: "Private Terrace" },
|
||||||
|
{ icon: Eye, label: "Nature View" },
|
||||||
|
{ icon: Coffee, label: "Premium Amenities" },
|
||||||
|
{ icon: Wind, label: "Air Conditioning" },
|
||||||
|
],
|
||||||
|
reversed: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default async function OdalarPage({ params }: { params: Promise<{ lang: string }> }) {
|
||||||
|
const { lang } = await params;
|
||||||
|
const isEn = lang === "en";
|
||||||
|
const displayRooms = isEn ? roomsEn : roomsTr;
|
||||||
|
const displayAmenities = isEn
|
||||||
|
? ["Organic Breakfast Spread", "Free Parking", "Beach & River Access", "Sunbed & Towel", "Wi-Fi", "24/7 Reception"]
|
||||||
|
: ["Organik Serpme Kahvaltı", "Ücretsiz Otopark", "Plaj & Nehir Erişimi", "Şezlong & Havlu", "Wi-Fi", "24/7 Resepsiyon"];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-background">
|
<div className="min-h-screen bg-background">
|
||||||
|
|
||||||
@@ -59,22 +114,23 @@ export default function OdalarPage() {
|
|||||||
<section className="relative h-[55vh] w-full flex items-end overflow-hidden">
|
<section className="relative h-[55vh] w-full flex items-end overflow-hidden">
|
||||||
<div className="absolute inset-0">
|
<div className="absolute inset-0">
|
||||||
<Image
|
<Image
|
||||||
src="https://images.unsplash.com/photo-1582719478250-c89404bb8a0e?q=80&w=2940&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1618773928121-c32242e63f39?q=80&w=2940&auto=format&fit=crop"
|
||||||
alt="Odalarımız"
|
alt={isEn ? "Our Rooms" : "Odalarımız"}
|
||||||
fill
|
fill
|
||||||
|
sizes="100vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 bg-gradient-to-t from-dark/85 via-dark/30 to-black/20" />
|
<div className="absolute inset-0 bg-gradient-to-t from-dark/85 via-dark/30 to-black/20" />
|
||||||
</div>
|
</div>
|
||||||
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-14 w-full">
|
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-14 w-full">
|
||||||
<span className="block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-3 animate-fade-up">
|
<span className="block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-3 animate-fade-up">
|
||||||
Konaklama
|
{isEn ? "Accommodation" : "Konaklama"}
|
||||||
</span>
|
</span>
|
||||||
<h1 className="font-serif text-5xl md:text-7xl text-white font-bold animate-fade-up delay-100">
|
<h1 className="font-serif text-5xl md:text-7xl text-white font-bold animate-fade-up delay-100">
|
||||||
Odalarımız
|
{isEn ? "Our Rooms" : "Odalarımız"}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-white/60 text-lg mt-3 font-light animate-fade-up delay-200">
|
<p className="text-white/60 text-lg mt-3 font-light animate-fade-up delay-200">
|
||||||
Doğanın içinde, konforlu bir mola.
|
{isEn ? "A comfortable break in the heart of nature." : "Doğanın içinde, konforlu bir mola."}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -82,12 +138,10 @@ export default function OdalarPage() {
|
|||||||
{/* Room Listings */}
|
{/* Room Listings */}
|
||||||
<section className="py-20 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<section className="py-20 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="space-y-16">
|
<div className="space-y-16">
|
||||||
{rooms.map((room, i) => (
|
{displayRooms.map((room, i) => (
|
||||||
<ScrollReveal key={i}>
|
<ScrollReveal key={i}>
|
||||||
<div
|
<div
|
||||||
className={`grid grid-cols-1 md:grid-cols-2 gap-0 bg-white rounded-3xl overflow-hidden shadow-sm border border-sand ${
|
className="grid grid-cols-1 md:grid-cols-2 gap-0 bg-white rounded-3xl overflow-hidden shadow-sm border border-sand"
|
||||||
room.reversed ? "" : ""
|
|
||||||
}`}
|
|
||||||
>
|
>
|
||||||
{/* Image */}
|
{/* Image */}
|
||||||
<div className={`relative h-80 md:h-auto ${room.reversed ? "md:order-2" : ""}`}>
|
<div className={`relative h-80 md:h-auto ${room.reversed ? "md:order-2" : ""}`}>
|
||||||
@@ -95,6 +149,7 @@ export default function OdalarPage() {
|
|||||||
src={room.img}
|
src={room.img}
|
||||||
alt={room.name}
|
alt={room.name}
|
||||||
fill
|
fill
|
||||||
|
sizes="(max-width: 768px) 100vw, 50vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
{/* Tag */}
|
{/* Tag */}
|
||||||
@@ -122,14 +177,16 @@ export default function OdalarPage() {
|
|||||||
|
|
||||||
<div className="flex justify-between items-center pt-8 border-t border-sand">
|
<div className="flex justify-between items-center pt-8 border-t border-sand">
|
||||||
<div>
|
<div>
|
||||||
<span className="text-muted text-xs block mb-1 uppercase tracking-wider">Gecelik</span>
|
<span className="text-muted text-xs block mb-1 uppercase tracking-wider">
|
||||||
|
{isEn ? "Per Night" : "Gecelik"}
|
||||||
|
</span>
|
||||||
<span className="font-serif text-3xl font-bold text-dark">{room.price}</span>
|
<span className="font-serif text-3xl font-bold text-dark">{room.price}</span>
|
||||||
</div>
|
</div>
|
||||||
<Link
|
<Link
|
||||||
href="/iletisim"
|
href={`/${lang}/iletisim`}
|
||||||
className="btn-shimmer bg-accent text-white px-7 py-3.5 rounded-full text-[11px] font-bold tracking-[0.12em] uppercase hover:bg-accent/90 transition-colors shadow-lg"
|
className="btn-shimmer bg-accent text-white px-7 py-3.5 rounded-full text-[11px] font-bold tracking-[0.12em] uppercase hover:bg-accent/90 transition-colors shadow-lg"
|
||||||
>
|
>
|
||||||
Bize Ulaşın
|
{isEn ? "Contact Us" : "Bize Ulaşın"}
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -143,10 +200,10 @@ export default function OdalarPage() {
|
|||||||
<section className="py-16 bg-primary">
|
<section className="py-16 bg-primary">
|
||||||
<div className="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
<div className="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||||
<h3 className="font-serif text-3xl text-white font-bold mb-4">
|
<h3 className="font-serif text-3xl text-white font-bold mb-4">
|
||||||
Tüm odalarda dahil olanlar
|
{isEn ? "What's included in all rooms" : "Tüm odalarda dahil olanlar"}
|
||||||
</h3>
|
</h3>
|
||||||
<div className="flex flex-wrap justify-center gap-4 mt-8">
|
<div className="flex flex-wrap justify-center gap-4 mt-8">
|
||||||
{["Organik Serpme Kahvaltı", "Ücretsiz Otopark", "Plaj & Nehir Erişimi", "Şezlong & Havlu", "Wi-Fi", "24/7 Resepsiyon"].map((item) => (
|
{displayAmenities.map((item) => (
|
||||||
<span key={item} className="inline-flex items-center gap-2 bg-white/10 text-white text-[13px] px-4 py-2 rounded-full border border-white/15">
|
<span key={item} className="inline-flex items-center gap-2 bg-white/10 text-white text-[13px] px-4 py-2 rounded-full border border-white/15">
|
||||||
<Check size={13} className="text-accent" />
|
<Check size={13} className="text-accent" />
|
||||||
{item}
|
{item}
|
||||||
|
|||||||
+63
-23
@@ -28,7 +28,7 @@ const defaultFeatures = [
|
|||||||
|
|
||||||
const rooms = [
|
const rooms = [
|
||||||
{
|
{
|
||||||
img: "https://images.unsplash.com/photo-1582719478250-c89404bb8a0e?q=80&w=2940&auto=format&fit=crop",
|
img: "https://images.unsplash.com/photo-1618773928121-c32242e63f39?q=80&w=2940&auto=format&fit=crop",
|
||||||
badge: "Standart",
|
badge: "Standart",
|
||||||
badgeStyle: "bg-white/90 text-dark",
|
badgeStyle: "bg-white/90 text-dark",
|
||||||
name: "Standart Oda",
|
name: "Standart Oda",
|
||||||
@@ -74,6 +74,24 @@ const testimonials = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const testimonialsEn = [
|
||||||
|
{
|
||||||
|
text: "I've stayed in many places in Akyaka, but Kite Beach was a completely different experience. The sound of the river, kitesurf lessons, and the amazing breakfast — everything was perfect.",
|
||||||
|
name: "Ayse K.",
|
||||||
|
from: "Istanbul",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Yoga sessions on the wooden platform, early in the morning with a river view. Hard to put into words — a must-try.",
|
||||||
|
name: "Marco B.",
|
||||||
|
from: "Italy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "The instructors are very caring. After my kitesurf lessons, I became addicted. I will definitely return next summer.",
|
||||||
|
name: "Mehmet O.",
|
||||||
|
from: "Ankara",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
import { getDictionary, Locale } from "./dictionaries";
|
import { getDictionary, Locale } from "./dictionaries";
|
||||||
import prisma from "@/lib/prisma";
|
import prisma from "@/lib/prisma";
|
||||||
import { buildMeta } from "@/lib/metadata";
|
import { buildMeta } from "@/lib/metadata";
|
||||||
@@ -139,6 +157,8 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
getInstagramData(),
|
getInstagramData(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const displayTestimonials = lang === "en" ? testimonialsEn : testimonials;
|
||||||
|
|
||||||
const heroData = heroDb || {
|
const heroData = heroDb || {
|
||||||
location: dict.home.location,
|
location: dict.home.location,
|
||||||
welcome: dict.home.welcome,
|
welcome: dict.home.welcome,
|
||||||
@@ -306,10 +326,12 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
</p>
|
</p>
|
||||||
<div className="section-line mb-8" />
|
<div className="section-line mb-8" />
|
||||||
<Link
|
<Link
|
||||||
href="/hakkimizda"
|
href={`/${lang}/hakkimizda`}
|
||||||
className="inline-flex items-center gap-2 text-dark font-bold text-sm tracking-wide group"
|
className="inline-flex items-center gap-2 text-dark font-bold text-sm tracking-wide group"
|
||||||
>
|
>
|
||||||
<span className="border-b-2 border-accent pb-0.5">Hikayemizi Okuyun</span>
|
<span className="border-b-2 border-accent pb-0.5">
|
||||||
|
{lang === "en" ? "Read Our Story" : "Hikayemizi Okuyun"}
|
||||||
|
</span>
|
||||||
<ArrowRight className="w-4 h-4 group-hover:translate-x-1.5 transition-transform" />
|
<ArrowRight className="w-4 h-4 group-hover:translate-x-1.5 transition-transform" />
|
||||||
</Link>
|
</Link>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
@@ -346,6 +368,7 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
src={room.img}
|
src={room.img}
|
||||||
alt={room.name}
|
alt={room.name}
|
||||||
fill
|
fill
|
||||||
|
sizes="(max-width: 768px) 100vw, 33vw"
|
||||||
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
||||||
/>
|
/>
|
||||||
<span className={`absolute top-4 left-4 text-[10px] font-bold px-3 py-1.5 rounded-full tracking-wider uppercase ${room.badgeStyle} backdrop-blur-sm`}>
|
<span className={`absolute top-4 left-4 text-[10px] font-bold px-3 py-1.5 rounded-full tracking-wider uppercase ${room.badgeStyle} backdrop-blur-sm`}>
|
||||||
@@ -396,15 +419,17 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
<ScrollReveal className="flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-10">
|
<ScrollReveal className="flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-10">
|
||||||
<div>
|
<div>
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
||||||
Ne Yapacaksınız?
|
{lang === "en" ? "What Will You Do?" : "Ne Yapacaksınız?"}
|
||||||
</span>
|
</span>
|
||||||
<h2 className="font-serif text-5xl font-bold text-dark">Aktiviteler</h2>
|
<h2 className="font-serif text-5xl font-bold text-dark">
|
||||||
|
{lang === "en" ? "Activities" : "Aktiviteler"}
|
||||||
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<Link
|
<Link
|
||||||
href="/aktiviteler"
|
href={`/${lang}/aktiviteler`}
|
||||||
className="inline-flex items-center gap-2 text-sm font-semibold text-primary hover:text-accent transition-colors"
|
className="inline-flex items-center gap-2 text-sm font-semibold text-primary hover:text-accent transition-colors"
|
||||||
>
|
>
|
||||||
Tümünü Gör <ArrowRight className="w-4 h-4" />
|
{lang === "en" ? "See All" : "Tümünü Gör"} <ArrowRight className="w-4 h-4" />
|
||||||
</Link>
|
</Link>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
|
|
||||||
@@ -417,7 +442,7 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
className={i === 0 || i === 3 ? "md:col-span-2" : ""}
|
className={i === 0 || i === 3 ? "md:col-span-2" : ""}
|
||||||
delay={i * 50}
|
delay={i * 50}
|
||||||
>
|
>
|
||||||
<Link href="/aktiviteler" className={`group relative block rounded-3xl overflow-hidden ${activities.length === 1 ? "aspect-[4/3] md:aspect-video" : i < 2 ? "h-[400px]" : "h-[280px]"}`}>
|
<Link href={`/${lang}/aktiviteler`} className={`group relative block rounded-3xl overflow-hidden ${activities.length === 1 ? "aspect-[4/3] md:aspect-video" : i < 2 ? "h-[400px]" : "h-[280px]"}`}>
|
||||||
<Image
|
<Image
|
||||||
src={act.image}
|
src={act.image}
|
||||||
alt={act.title}
|
alt={act.title}
|
||||||
@@ -446,7 +471,9 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
))
|
))
|
||||||
) : (
|
) : (
|
||||||
<div className="md:col-span-3 py-10 text-center text-gray-500">Henüz aktivite eklenmedi.</div>
|
<div className="md:col-span-3 py-10 text-center text-gray-500">
|
||||||
|
{lang === "en" ? "No activities added yet." : "Henüz aktivite eklenmedi."}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -464,15 +491,17 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
<ScrollReveal className="flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-16">
|
<ScrollReveal className="flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-16">
|
||||||
<div>
|
<div>
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
||||||
Takvim
|
{lang === "en" ? "Calendar" : "Takvim"}
|
||||||
</span>
|
</span>
|
||||||
<h2 className="font-serif text-5xl font-bold">Etkinlikler</h2>
|
<h2 className="font-serif text-5xl font-bold">
|
||||||
|
{lang === "en" ? "Events" : "Etkinlikler"}
|
||||||
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<Link
|
<Link
|
||||||
href="/etkinlikler"
|
href={`/${lang}/etkinlikler`}
|
||||||
className="inline-flex items-center gap-2 text-sm font-semibold text-white/70 hover:text-white transition-colors border border-white/20 hover:border-white px-6 py-2.5 rounded-full"
|
className="inline-flex items-center gap-2 text-sm font-semibold text-white/70 hover:text-white transition-colors border border-white/20 hover:border-white px-6 py-2.5 rounded-full"
|
||||||
>
|
>
|
||||||
Tüm Etkinlikler <ArrowRight className="w-4 h-4" />
|
{lang === "en" ? "All Events" : "Tüm Etkinlikler"} <ArrowRight className="w-4 h-4" />
|
||||||
</Link>
|
</Link>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
|
|
||||||
@@ -511,16 +540,18 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<Link
|
<Link
|
||||||
href="/etkinlikler"
|
href={`/${lang}/etkinlikler`}
|
||||||
className="inline-flex items-center gap-2 text-xs font-bold tracking-widest uppercase text-accent hover:text-white transition-colors w-max"
|
className="inline-flex items-center gap-2 text-xs font-bold tracking-widest uppercase text-accent hover:text-white transition-colors w-max"
|
||||||
>
|
>
|
||||||
Detayları İncele <ArrowRight className="w-4 h-4" />
|
{lang === "en" ? "View Details" : "Detayları İncele"} <ArrowRight className="w-4 h-4" />
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
))
|
))
|
||||||
) : (
|
) : (
|
||||||
<div className="py-10 text-center text-white/50">Henüz etkinlik eklenmedi.</div>
|
<div className="py-10 text-center text-white/50">
|
||||||
|
{lang === "en" ? "No events added yet." : "Henüz etkinlik eklenmedi."}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
</div>
|
</div>
|
||||||
@@ -571,7 +602,7 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
rel="noreferrer"
|
rel="noreferrer"
|
||||||
className="inline-flex items-center gap-2 border-2 border-dark text-dark text-xs px-8 py-3.5 rounded-full font-bold uppercase tracking-widest hover:bg-dark hover:text-white transition-colors"
|
className="inline-flex items-center gap-2 border-2 border-dark text-dark text-xs px-8 py-3.5 rounded-full font-bold uppercase tracking-widest hover:bg-dark hover:text-white transition-colors"
|
||||||
>
|
>
|
||||||
Bizi Takip Edin
|
{lang === "en" ? "Follow Us" : "Bizi Takip Edin"}
|
||||||
<ArrowRight className="w-3.5 h-3.5" />
|
<ArrowRight className="w-3.5 h-3.5" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -586,13 +617,15 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<ScrollReveal className="text-center mb-16">
|
<ScrollReveal className="text-center mb-16">
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-4">
|
||||||
Misafir Yorumları
|
{lang === "en" ? "Guest Reviews" : "Misafir Yorumları"}
|
||||||
</span>
|
</span>
|
||||||
<h2 className="font-serif text-5xl font-bold text-dark">Deneyimler</h2>
|
<h2 className="font-serif text-5xl font-bold text-dark">
|
||||||
|
{lang === "en" ? "Experiences" : "Deneyimler"}
|
||||||
|
</h2>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
|
|
||||||
<ScrollReveal stagger className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
<ScrollReveal stagger className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||||
{testimonials.map((t, i) => (
|
{displayTestimonials.map((t, i) => (
|
||||||
<div key={i} className="relative bg-sand rounded-2xl p-8 border border-sand overflow-hidden">
|
<div key={i} className="relative bg-sand rounded-2xl p-8 border border-sand overflow-hidden">
|
||||||
{/* Large decorative quote */}
|
{/* Large decorative quote */}
|
||||||
<span className="absolute top-3 right-5 font-serif text-[8rem] leading-none text-primary/8 select-none">
|
<span className="absolute top-3 right-5 font-serif text-[8rem] leading-none text-primary/8 select-none">
|
||||||
@@ -638,6 +671,7 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
src="https://images.unsplash.com/photo-1498623116890-37e912163d5d?q=80&w=2940&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1498623116890-37e912163d5d?q=80&w=2940&auto=format&fit=crop"
|
||||||
alt=""
|
alt=""
|
||||||
fill
|
fill
|
||||||
|
sizes="100vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -645,13 +679,19 @@ export default async function Home({ params }: { params: Promise<{ lang: string
|
|||||||
<div className="relative z-10 max-w-3xl mx-auto px-4 text-center">
|
<div className="relative z-10 max-w-3xl mx-auto px-4 text-center">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-6">
|
<span className="inline-block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-6">
|
||||||
Hemen Başlayın
|
{lang === "en" ? "Get Started" : "Hemen Başlayın"}
|
||||||
</span>
|
</span>
|
||||||
<h2 className="font-serif text-5xl md:text-6xl font-bold text-white leading-tight mb-6">
|
<h2 className="font-serif text-5xl md:text-6xl font-bold text-white leading-tight mb-6">
|
||||||
Hayalindeki tatili<br />planlamaya hazır mısın?
|
{lang === "en" ? (
|
||||||
|
<>Are you ready to plan<br />your dream vacation?</>
|
||||||
|
) : (
|
||||||
|
<>Hayalindeki tatili<br />planlamaya hazır mısın?</>
|
||||||
|
)}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-white/50 mb-10 text-base leading-relaxed">
|
<p className="text-white/50 mb-10 text-base leading-relaxed">
|
||||||
Rüzgar seni çağırıyor. Hemen yerini ayırt ve bu eşsiz deneyimin bir parçası ol.
|
{lang === "en"
|
||||||
|
? "The wind is calling you. Book your spot now and become a part of this unique experience."
|
||||||
|
: "Rüzgar seni çağırıyor. Hemen yerini ayırt ve bu eşsiz deneyimin bir parçası ol."}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const menuCategories = [
|
const menuCategoriesTr = [
|
||||||
{
|
{
|
||||||
icon: Coffee,
|
icon: Coffee,
|
||||||
name: "Serpme Kahvaltı",
|
name: "Serpme Kahvaltı",
|
||||||
@@ -42,7 +42,35 @@ const menuCategories = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export default function RestoranPage() {
|
const menuCategoriesEn = [
|
||||||
|
{
|
||||||
|
icon: Coffee,
|
||||||
|
name: "Breakfast Spread",
|
||||||
|
desc: "Start the day energized with local cheeses, homemade jams, organic olive oil, and freshly baked village bread.",
|
||||||
|
hours: "08:30 – 11:30",
|
||||||
|
highlight: "Local Products",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: UtensilsCrossed,
|
||||||
|
name: "Lunch & Dinner",
|
||||||
|
desc: "Daily fresh seafood, Aegean olive oil appetizers (meze), and select pasta from Italian cuisine for dinner.",
|
||||||
|
hours: "12:00 – 23:00",
|
||||||
|
highlight: "Fresh Aegean Cuisine",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: Wine,
|
||||||
|
name: "Lounge & Bar",
|
||||||
|
desc: "Delightful moments against the sunset with signature cocktails prepared by our mixologists, local wines, and Turkish raki.",
|
||||||
|
hours: "16:00 – 01:00",
|
||||||
|
highlight: "Sunset View",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default async function RestoranPage({ params }: { params: Promise<{ lang: string }> }) {
|
||||||
|
const { lang } = await params;
|
||||||
|
const isEn = lang === "en";
|
||||||
|
const displayMenuCategories = isEn ? menuCategoriesEn : menuCategoriesTr;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-background">
|
<div className="min-h-screen bg-background">
|
||||||
|
|
||||||
@@ -51,21 +79,22 @@ export default function RestoranPage() {
|
|||||||
<div className="absolute inset-0">
|
<div className="absolute inset-0">
|
||||||
<Image
|
<Image
|
||||||
src="https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?q=80&w=2940&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?q=80&w=2940&auto=format&fit=crop"
|
||||||
alt="Restoran & Bar"
|
alt={isEn ? "Restaurant & Bar" : "Restoran & Bar"}
|
||||||
fill
|
fill
|
||||||
|
sizes="100vw"
|
||||||
className="object-cover"
|
className="object-cover"
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 bg-gradient-to-t from-dark/85 via-dark/30 to-black/20" />
|
<div className="absolute inset-0 bg-gradient-to-t from-dark/85 via-dark/30 to-black/20" />
|
||||||
</div>
|
</div>
|
||||||
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-14 w-full">
|
<div className="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-14 w-full">
|
||||||
<span className="block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-3 animate-fade-up">
|
<span className="block text-accent text-xs tracking-[0.3em] uppercase font-semibold mb-3 animate-fade-up">
|
||||||
Lezzetler
|
{isEn ? "Flavors" : "Lezzetler"}
|
||||||
</span>
|
</span>
|
||||||
<h1 className="font-serif text-5xl md:text-7xl text-white font-bold animate-fade-up delay-100">
|
<h1 className="font-serif text-5xl md:text-7xl text-white font-bold animate-fade-up delay-100">
|
||||||
Restoran & Bar
|
{isEn ? "Restaurant & Bar" : "Restoran & Bar"}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-white/60 text-lg mt-3 font-light animate-fade-up delay-200">
|
<p className="text-white/60 text-lg mt-3 font-light animate-fade-up delay-200">
|
||||||
Ege lezzetleri ve nehir manzarası.
|
{isEn ? "Aegean flavors and river view." : "Ege lezzetleri ve nehir manzarası."}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -75,15 +104,17 @@ export default function RestoranPage() {
|
|||||||
<div className="max-w-3xl mx-auto px-4 sm:px-6 text-center">
|
<div className="max-w-3xl mx-auto px-4 sm:px-6 text-center">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-5">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-5">
|
||||||
Mutfağımız
|
{isEn ? "Our Kitchen" : "Mutfağımız"}
|
||||||
</span>
|
</span>
|
||||||
<h2 className="font-serif text-4xl font-bold text-dark mb-6">
|
<h2 className="font-serif text-4xl font-bold text-dark mb-6">
|
||||||
Tazeden, Yerelden, Sevgiyle
|
{isEn ? "Fresh, Local, With Love" : "Tazeden, Yerelden, Sevgiyle"}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-gray-500 leading-relaxed text-[15px]">
|
<p className="text-gray-500 leading-relaxed text-[15px]">
|
||||||
Şeflerimizin özenle hazırladığı taze Ege mutfağı lezzetleri, organik kahvaltılıklar ve
|
{isEn ? (
|
||||||
imza kokteyllerimizle Kite Beach Restoran'da günün her saati kendinizi şımartın.
|
"Pamper yourself at any time of the day at Kite Beach Restaurant with fresh Aegean cuisine flavors carefully prepared by our chefs, organic breakfast items, and our signature cocktails. Enjoy your meal on our wooden terrace, right by the Azmak River."
|
||||||
Azmak nehrinin hemen kenarında, ahşap terasımızda yemeğinizin tadını çıkarın.
|
) : (
|
||||||
|
"Şeflerimizin özenle hazırladığı taze Ege mutfağı lezzetleri, organik kahvaltılıklar ve imza kokteyllerimizle Kite Beach Restoran'da günün her saati kendinizi şımartın. Azmak nehrinin hemen kenarında, ahşap terasımızda yemeğinizin tadını çıkarın."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
</div>
|
</div>
|
||||||
@@ -93,7 +124,7 @@ export default function RestoranPage() {
|
|||||||
<section className="pb-20 bg-white">
|
<section className="pb-20 bg-white">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<ScrollReveal stagger className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
<ScrollReveal stagger className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||||
{menuCategories.map((cat, i) => {
|
{displayMenuCategories.map((cat, i) => {
|
||||||
const Icon = cat.icon;
|
const Icon = cat.icon;
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@@ -123,23 +154,25 @@ export default function RestoranPage() {
|
|||||||
<section className="py-20 bg-background">
|
<section className="py-20 bg-background">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<ScrollReveal className="text-center mb-12">
|
<ScrollReveal className="text-center mb-12">
|
||||||
<h2 className="font-serif text-4xl font-bold text-dark">Atmosfer</h2>
|
<h2 className="font-serif text-4xl font-bold text-dark">{isEn ? "Atmosphere" : "Atmosfer"}</h2>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
||||||
<div className="relative h-80 rounded-2xl overflow-hidden md:col-span-2 group">
|
<div className="relative h-80 rounded-2xl overflow-hidden md:col-span-2 group">
|
||||||
<Image
|
<Image
|
||||||
src="https://images.unsplash.com/photo-1544148103-0773bf10d330?q=80&w=2940&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1544148103-0773bf10d330?q=80&w=2940&auto=format&fit=crop"
|
||||||
alt="Restoran atmosferi"
|
alt={isEn ? "Restaurant atmosphere" : "Restoran atmosferi"}
|
||||||
fill
|
fill
|
||||||
|
sizes="(max-width: 768px) 100vw, 66vw"
|
||||||
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="relative h-80 rounded-2xl overflow-hidden group">
|
<div className="relative h-80 rounded-2xl overflow-hidden group">
|
||||||
<Image
|
<Image
|
||||||
src="https://images.unsplash.com/photo-1551504734-5ee1c4a1479b?q=80&w=2940&auto=format&fit=crop"
|
src="https://images.unsplash.com/photo-1551504734-5ee1c4a1479b?q=80&w=2940&auto=format&fit=crop"
|
||||||
alt="Kahvaltı"
|
alt={isEn ? "Breakfast" : "Kahvaltı"}
|
||||||
fill
|
fill
|
||||||
|
sizes="(max-width: 768px) 100vw, 33vw"
|
||||||
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
className="object-cover group-hover:scale-105 transition-transform duration-700"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -153,20 +186,23 @@ export default function RestoranPage() {
|
|||||||
<div className="max-w-3xl mx-auto px-4 text-center">
|
<div className="max-w-3xl mx-auto px-4 text-center">
|
||||||
<ScrollReveal>
|
<ScrollReveal>
|
||||||
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-5">
|
<span className="inline-block text-accent text-xs tracking-[0.25em] uppercase font-semibold mb-5">
|
||||||
Özel Günler
|
{isEn ? "Special Days" : "Özel Günler"}
|
||||||
</span>
|
</span>
|
||||||
<h3 className="font-serif text-4xl font-bold mb-5">
|
<h3 className="font-serif text-4xl font-bold mb-5">
|
||||||
Özel Etkinlikler & İletişim
|
{isEn ? "Special Events & Contact" : "Özel Etkinlikler & İletişim"}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-white/50 mb-8 leading-relaxed">
|
<p className="text-white/50 mb-8 leading-relaxed">
|
||||||
Doğum günü, yıl dönümü veya özel grup yemekleriniz için nehir manzaralı
|
{isEn ? (
|
||||||
terasımızla ilgili bizimle iletişime geçebilirsiniz. Ekibimiz organizasyonunuzu özel kılmak için burada.
|
"You can contact us about our terrace with a river view for your birthday, anniversary, or special group dinners. Our team is here to make your organization special."
|
||||||
|
) : (
|
||||||
|
"Doğum günü, yıl dönümü veya özel grup yemekleriniz için nehir manzaralı terasımızla ilgili bizimle iletişime geçebilirsiniz. Ekibimiz organizasyonunuzu özel kılmak için burada."
|
||||||
|
)}
|
||||||
</p>
|
</p>
|
||||||
<Link
|
<Link
|
||||||
href="/iletisim"
|
href={`/${lang}/iletisim`}
|
||||||
className="btn-shimmer inline-block bg-accent text-white px-10 py-4 rounded-full text-xs font-bold tracking-[0.15em] uppercase"
|
className="btn-shimmer inline-block bg-accent text-white px-10 py-4 rounded-full text-xs font-bold tracking-[0.15em] uppercase"
|
||||||
>
|
>
|
||||||
Bize Ulaşın
|
{isEn ? "Contact Us" : "Bize Ulaşın"}
|
||||||
</Link>
|
</Link>
|
||||||
</ScrollReveal>
|
</ScrollReveal>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export async function loadMockActivities() {
|
|||||||
title: "Stand-Up Paddle",
|
title: "Stand-Up Paddle",
|
||||||
description: "Azmak nehrinin berrak sularında eşsiz bir keşif.",
|
description: "Azmak nehrinin berrak sularında eşsiz bir keşif.",
|
||||||
price: "₺300/Saat",
|
price: "₺300/Saat",
|
||||||
image: "https://images.unsplash.com/photo-1522883392419-7d8cb2435728?q=80&w=2924&auto=format&fit=crop",
|
image: "https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=2940&auto=format&fit=crop",
|
||||||
badge: null,
|
badge: null,
|
||||||
order: 3
|
order: 3
|
||||||
},
|
},
|
||||||
@@ -56,7 +56,7 @@ export async function loadMockActivities() {
|
|||||||
title: "Stand-Up Paddle",
|
title: "Stand-Up Paddle",
|
||||||
description: "A unique discovery in the crystal clear waters of Azmak River.",
|
description: "A unique discovery in the crystal clear waters of Azmak River.",
|
||||||
price: "₺300/Hour",
|
price: "₺300/Hour",
|
||||||
image: "https://images.unsplash.com/photo-1522883392419-7d8cb2435728?q=80&w=2924&auto=format&fit=crop",
|
image: "https://images.unsplash.com/photo-1507525428034-b723cf961d3e?q=80&w=2940&auto=format&fit=crop",
|
||||||
badge: null,
|
badge: null,
|
||||||
order: 3
|
order: 3
|
||||||
},
|
},
|
||||||
|
|||||||
+16
-9
@@ -1,4 +1,6 @@
|
|||||||
import { MetadataRoute } from 'next';
|
import type { MetadataRoute } from 'next';
|
||||||
|
|
||||||
|
const PROTECTED = ['/admin/', '/api/'];
|
||||||
|
|
||||||
export default function robots(): MetadataRoute.Robots {
|
export default function robots(): MetadataRoute.Robots {
|
||||||
return {
|
return {
|
||||||
@@ -6,18 +8,23 @@ export default function robots(): MetadataRoute.Robots {
|
|||||||
{
|
{
|
||||||
userAgent: '*',
|
userAgent: '*',
|
||||||
allow: '/',
|
allow: '/',
|
||||||
disallow: ['/admin/', '/api/'],
|
disallow: PROTECTED,
|
||||||
},
|
},
|
||||||
// Allow AI citation/search bots (they surface the site in AI answers)
|
// AI arama / citation botları
|
||||||
{ userAgent: 'OAI-SearchBot', allow: '/' },
|
{ userAgent: 'OAI-SearchBot', allow: '/', disallow: PROTECTED },
|
||||||
{ userAgent: 'PerplexityBot', allow: '/' },
|
{ userAgent: 'ChatGPT-User', allow: '/', disallow: PROTECTED },
|
||||||
{ userAgent: 'anthropic-ai', allow: '/' },
|
{ userAgent: 'PerplexityBot', allow: '/', disallow: PROTECTED },
|
||||||
{ userAgent: 'ClaudeBot', allow: '/' },
|
{ userAgent: 'Perplexity-User', allow: '/', disallow: PROTECTED },
|
||||||
// Block training crawlers
|
{ userAgent: 'Claude-SearchBot', allow: '/', disallow: PROTECTED },
|
||||||
|
{ userAgent: 'Claude-User', allow: '/', disallow: PROTECTED },
|
||||||
|
// Training crawler'ları engelle
|
||||||
{ userAgent: 'GPTBot', disallow: '/' },
|
{ userAgent: 'GPTBot', disallow: '/' },
|
||||||
|
{ userAgent: 'ClaudeBot', disallow: '/' },
|
||||||
{ userAgent: 'Google-Extended', disallow: '/' },
|
{ userAgent: 'Google-Extended', disallow: '/' },
|
||||||
{ userAgent: 'CCBot', disallow: '/' },
|
{ userAgent: 'CCBot', disallow: '/' },
|
||||||
|
{ userAgent: 'Bytespider', disallow: '/' }, // ByteDance/TikTok
|
||||||
|
{ userAgent: 'Meta-ExternalAgent', disallow: '/' }, // Meta training
|
||||||
],
|
],
|
||||||
sitemap: 'https://kitebeachakyaka.com.tr/sitemap.xml',
|
sitemap: 'https://kitebeachakyaka.com.tr/sitemap.xml',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -4,12 +4,16 @@ const baseUrl = 'https://kitebeachakyaka.com.tr';
|
|||||||
const langs = ['tr', 'en'];
|
const langs = ['tr', 'en'];
|
||||||
const routes = [
|
const routes = [
|
||||||
{ path: '', changeFrequency: 'daily' as const, priority: 1.0 },
|
{ path: '', changeFrequency: 'daily' as const, priority: 1.0 },
|
||||||
|
{ path: '/odalar', changeFrequency: 'weekly' as const, priority: 0.9 },
|
||||||
{ path: '/aktiviteler', changeFrequency: 'weekly' as const, priority: 0.9 },
|
{ path: '/aktiviteler', changeFrequency: 'weekly' as const, priority: 0.9 },
|
||||||
{ path: '/etkinlikler', changeFrequency: 'weekly' as const, priority: 0.9 },
|
{ path: '/etkinlikler', changeFrequency: 'weekly' as const, priority: 0.9 },
|
||||||
{ path: '/restoran', changeFrequency: 'weekly' as const, priority: 0.8 },
|
{ path: '/restoran', changeFrequency: 'weekly' as const, priority: 0.8 },
|
||||||
{ path: '/iletisim', changeFrequency: 'monthly' as const, priority: 0.8 },
|
{ path: '/iletisim', changeFrequency: 'monthly' as const, priority: 0.8 },
|
||||||
{ path: '/hakkimizda', changeFrequency: 'monthly' as const, priority: 0.7 },
|
{ path: '/hakkimizda', changeFrequency: 'monthly' as const, priority: 0.7 },
|
||||||
{ path: '/galeri', changeFrequency: 'monthly' as const, priority: 0.7 },
|
{ path: '/galeri', changeFrequency: 'monthly' as const, priority: 0.7 },
|
||||||
|
{ path: '/gizlilik', changeFrequency: 'monthly' as const, priority: 0.3 },
|
||||||
|
{ path: '/kvkk', changeFrequency: 'monthly' as const, priority: 0.3 },
|
||||||
|
{ path: '/cerez', changeFrequency: 'monthly' as const, priority: 0.3 },
|
||||||
];
|
];
|
||||||
|
|
||||||
export default function sitemap(): MetadataRoute.Sitemap {
|
export default function sitemap(): MetadataRoute.Sitemap {
|
||||||
|
|||||||
+35
-20
@@ -2,16 +2,6 @@ import Link from "next/link";
|
|||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import { MapPin, Phone, Mail } from "lucide-react";
|
import { MapPin, Phone, Mail } from "lucide-react";
|
||||||
|
|
||||||
const quickLinks = [
|
|
||||||
{ name: "Ana Sayfa", href: "/" },
|
|
||||||
{ name: "Odalar", href: "/odalar" },
|
|
||||||
{ name: "Aktiviteler", href: "/aktiviteler"},
|
|
||||||
{ name: "Restoran", href: "/restoran" },
|
|
||||||
{ name: "Etkinlikler", href: "/etkinlikler"},
|
|
||||||
{ name: "Galeri", href: "/galeri" },
|
|
||||||
{ name: "Hakkımızda", href: "/hakkimizda" },
|
|
||||||
];
|
|
||||||
|
|
||||||
function InstagramIcon() {
|
function InstagramIcon() {
|
||||||
return (
|
return (
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
||||||
@@ -39,7 +29,26 @@ function YoutubeIcon() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Footer() {
|
export default function Footer({ lang = "tr" }: { lang?: string }) {
|
||||||
|
const isEn = lang === "en";
|
||||||
|
const quickLinks = isEn ? [
|
||||||
|
{ name: "Home", href: "/en" },
|
||||||
|
{ name: "Rooms", href: "/en/odalar" },
|
||||||
|
{ name: "Activities", href: "/en/aktiviteler"},
|
||||||
|
{ name: "Restaurant", href: "/en/restoran" },
|
||||||
|
{ name: "Events", href: "/en/etkinlikler"},
|
||||||
|
{ name: "Gallery", href: "/en/galeri" },
|
||||||
|
{ name: "About Us", href: "/en/hakkimizda" },
|
||||||
|
] : [
|
||||||
|
{ name: "Ana Sayfa", href: "/tr" },
|
||||||
|
{ name: "Odalar", href: "/tr/odalar" },
|
||||||
|
{ name: "Aktiviteler", href: "/tr/aktiviteler"},
|
||||||
|
{ name: "Restoran", href: "/tr/restoran" },
|
||||||
|
{ name: "Etkinlikler", href: "/tr/etkinlikler"},
|
||||||
|
{ name: "Galeri", href: "/tr/galeri" },
|
||||||
|
{ name: "Hakkımızda", href: "/tr/hakkimizda" },
|
||||||
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<footer className="bg-dark text-white">
|
<footer className="bg-dark text-white">
|
||||||
{/* Top accent line */}
|
{/* Top accent line */}
|
||||||
@@ -50,7 +59,7 @@ export default function Footer() {
|
|||||||
|
|
||||||
{/* Brand */}
|
{/* Brand */}
|
||||||
<div className="md:col-span-4">
|
<div className="md:col-span-4">
|
||||||
<Link href="/" className="inline-block mb-5">
|
<Link href={isEn ? "/en" : "/tr"} className="inline-block mb-5">
|
||||||
<Image
|
<Image
|
||||||
src="/logo.png"
|
src="/logo.png"
|
||||||
alt="Kite Beach Logo"
|
alt="Kite Beach Logo"
|
||||||
@@ -60,7 +69,9 @@ export default function Footer() {
|
|||||||
/>
|
/>
|
||||||
</Link>
|
</Link>
|
||||||
<p className="text-white/40 text-[13px] leading-relaxed mb-7 max-w-xs">
|
<p className="text-white/40 text-[13px] leading-relaxed mb-7 max-w-xs">
|
||||||
Nehrin huzuru, denizin enerjisi — tek bir noktada. Akyaka'nın kalbinde butik bir kaçış noktası.
|
{isEn
|
||||||
|
? "The tranquility of the river, the energy of the sea — in one place. A boutique escape in the heart of Akyaka."
|
||||||
|
: "Nehrin huzuru, denizin enerjisi — tek bir noktada. Akyaka'nın kalbinde butik bir kaçış noktası."}
|
||||||
</p>
|
</p>
|
||||||
{/* Social icons */}
|
{/* Social icons */}
|
||||||
<div className="flex gap-3">
|
<div className="flex gap-3">
|
||||||
@@ -84,7 +95,7 @@ export default function Footer() {
|
|||||||
{/* Quick Links */}
|
{/* Quick Links */}
|
||||||
<div className="md:col-span-3">
|
<div className="md:col-span-3">
|
||||||
<h3 className="text-[11px] font-bold tracking-[0.25em] text-white/30 uppercase mb-6">
|
<h3 className="text-[11px] font-bold tracking-[0.25em] text-white/30 uppercase mb-6">
|
||||||
Sayfalar
|
{isEn ? "Pages" : "Sayfalar"}
|
||||||
</h3>
|
</h3>
|
||||||
<ul className="space-y-3">
|
<ul className="space-y-3">
|
||||||
{quickLinks.map((link) => (
|
{quickLinks.map((link) => (
|
||||||
@@ -103,7 +114,7 @@ export default function Footer() {
|
|||||||
{/* Contact */}
|
{/* Contact */}
|
||||||
<div className="md:col-span-5">
|
<div className="md:col-span-5">
|
||||||
<h3 className="text-[11px] font-bold tracking-[0.25em] text-white/30 uppercase mb-6">
|
<h3 className="text-[11px] font-bold tracking-[0.25em] text-white/30 uppercase mb-6">
|
||||||
İletişim
|
{isEn ? "Contact" : "İletişim"}
|
||||||
</h3>
|
</h3>
|
||||||
<ul className="space-y-5">
|
<ul className="space-y-5">
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
@@ -111,7 +122,11 @@ export default function Footer() {
|
|||||||
<MapPin size={13} className="text-accent" />
|
<MapPin size={13} className="text-accent" />
|
||||||
</div>
|
</div>
|
||||||
<span className="text-white/50 text-[13px] leading-relaxed">
|
<span className="text-white/50 text-[13px] leading-relaxed">
|
||||||
Akyaka Mahallesi, Akçapınar Mevkii<br />Muğla, Türkiye
|
{isEn ? (
|
||||||
|
<>Akyaka District, Akcapinar Location<br />Mugla, Turkey</>
|
||||||
|
) : (
|
||||||
|
<>Akyaka Mahallesi, Akçapınar Mevkii<br />Muğla, Türkiye</>
|
||||||
|
)}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-center gap-3">
|
<li className="flex items-center gap-3">
|
||||||
@@ -144,17 +159,17 @@ export default function Footer() {
|
|||||||
{/* Bottom bar */}
|
{/* Bottom bar */}
|
||||||
<div className="border-t border-white/8 pt-8 flex flex-col md:flex-row justify-between items-center gap-4">
|
<div className="border-t border-white/8 pt-8 flex flex-col md:flex-row justify-between items-center gap-4">
|
||||||
<p className="text-white/25 text-xs">
|
<p className="text-white/25 text-xs">
|
||||||
© 2026 Kite Beach Akyaka. Tüm hakları saklıdır.
|
{isEn ? "© 2026 Kite Beach Akyaka. All rights reserved." : "© 2026 Kite Beach Akyaka. Tüm hakları saklıdır."}
|
||||||
</p>
|
</p>
|
||||||
<div className="flex gap-6">
|
<div className="flex gap-6">
|
||||||
{[
|
{[
|
||||||
{ name: "KVKK", href: "/kvkk" },
|
{ name: "KVKK", href: "/kvkk" },
|
||||||
{ name: "Gizlilik Politikası", href: "/gizlilik" },
|
{ name: isEn ? "Privacy Policy" : "Gizlilik Politikası", href: "/gizlilik" },
|
||||||
{ name: "Çerez Politikası", href: "/cerez" }
|
{ name: isEn ? "Cookie Policy" : "Çerez Politikası", href: "/cerez" }
|
||||||
].map((item) => (
|
].map((item) => (
|
||||||
<Link
|
<Link
|
||||||
key={item.name}
|
key={item.name}
|
||||||
href={item.href}
|
href={isEn ? `/en${item.href}` : `/tr${item.href}`}
|
||||||
className="text-white/25 hover:text-white/60 transition-colors text-xs"
|
className="text-white/25 hover:text-white/60 transition-colors text-xs"
|
||||||
>
|
>
|
||||||
{item.name}
|
{item.name}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ export default function HeroVideo() {
|
|||||||
src="https://img.youtube.com/vi/V9AhK54xsxY/maxresdefault.jpg"
|
src="https://img.youtube.com/vi/V9AhK54xsxY/maxresdefault.jpg"
|
||||||
alt="Kite Beach Akyaka Video Thumbnail"
|
alt="Kite Beach Akyaka Video Thumbnail"
|
||||||
fill
|
fill
|
||||||
|
sizes="100vw"
|
||||||
className={`object-cover transition-opacity duration-1000 ease-in-out ${
|
className={`object-cover transition-opacity duration-1000 ease-in-out ${
|
||||||
isVideoLoaded ? "opacity-0" : "opacity-80"
|
isVideoLoaded ? "opacity-0" : "opacity-80"
|
||||||
}`}
|
}`}
|
||||||
|
|||||||
+24
-17
@@ -7,17 +7,23 @@ import { usePathname } from "next/navigation";
|
|||||||
import { motion, AnimatePresence } from "framer-motion";
|
import { motion, AnimatePresence } from "framer-motion";
|
||||||
import { Menu, X, Globe } from "lucide-react";
|
import { Menu, X, Globe } from "lucide-react";
|
||||||
|
|
||||||
const navLinks = [
|
const navLinksEn = [
|
||||||
// { name: "Odalar", href: "/odalar" },
|
{ name: "Activities", href: "/en/aktiviteler" },
|
||||||
{ name: "Aktiviteler", href: "/aktiviteler" },
|
{ name: "Restaurant", href: "/en/restoran" },
|
||||||
{ name: "Restoran", href: "/restoran" },
|
{ name: "Events", href: "/en/etkinlikler" },
|
||||||
{ name: "Etkinlikler", href: "/etkinlikler" },
|
{ name: "About Us", href: "/en/hakkimizda" },
|
||||||
|
{ name: "Contact", href: "/en/iletisim" },
|
||||||
{ name: "Hakkımızda", href: "/hakkimizda" },
|
|
||||||
{ name: "İletişim", href: "/iletisim" },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
export default function Navbar() {
|
const navLinksTr = [
|
||||||
|
{ name: "Aktiviteler", href: "/tr/aktiviteler" },
|
||||||
|
{ name: "Restoran", href: "/tr/restoran" },
|
||||||
|
{ name: "Etkinlikler", href: "/tr/etkinlikler" },
|
||||||
|
{ name: "Hakkımızda", href: "/tr/hakkimizda" },
|
||||||
|
{ name: "İletişim", href: "/tr/iletisim" },
|
||||||
|
];
|
||||||
|
|
||||||
|
export default function Navbar({ lang }: { lang?: string }) {
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const [scrolled, setScrolled] = useState(false);
|
const [scrolled, setScrolled] = useState(false);
|
||||||
const pathname = usePathname();
|
const pathname = usePathname();
|
||||||
@@ -30,10 +36,11 @@ export default function Navbar() {
|
|||||||
|
|
||||||
useEffect(() => { setIsOpen(false); }, [pathname]);
|
useEffect(() => { setIsOpen(false); }, [pathname]);
|
||||||
|
|
||||||
const isHome = pathname === "/" || pathname === "/tr" || pathname === "/en";
|
const currentLang = lang || (pathname.startsWith("/en") ? "en" : "tr");
|
||||||
|
|
||||||
const currentLang = pathname.startsWith("/en") ? "en" : "tr";
|
|
||||||
const toggleLang = currentLang === "en" ? "tr" : "en";
|
const toggleLang = currentLang === "en" ? "tr" : "en";
|
||||||
|
const navLinks = currentLang === "en" ? navLinksEn : navLinksTr;
|
||||||
|
|
||||||
|
const isHome = pathname === "/" || pathname === "/tr" || pathname === "/en";
|
||||||
|
|
||||||
const getToggleHref = () => {
|
const getToggleHref = () => {
|
||||||
if (pathname === "/") return `/${toggleLang}`;
|
if (pathname === "/") return `/${toggleLang}`;
|
||||||
@@ -55,7 +62,7 @@ export default function Navbar() {
|
|||||||
<div className="flex justify-between items-center">
|
<div className="flex justify-between items-center">
|
||||||
|
|
||||||
{/* Logo */}
|
{/* Logo */}
|
||||||
<Link href="/" className="flex-shrink-0 flex items-center group">
|
<Link href={`/${currentLang}`} className="flex-shrink-0 flex items-center group">
|
||||||
<Image
|
<Image
|
||||||
src="/logo.png"
|
src="/logo.png"
|
||||||
alt="Kite Beach Logo"
|
alt="Kite Beach Logo"
|
||||||
@@ -91,10 +98,10 @@ export default function Navbar() {
|
|||||||
})}
|
})}
|
||||||
|
|
||||||
<Link
|
<Link
|
||||||
href="/iletisim"
|
href={`/${currentLang}/iletisim`}
|
||||||
className="btn-shimmer bg-accent text-white px-6 py-2.5 rounded-full text-[11px] font-bold tracking-[0.12em] uppercase hover:bg-accent/90 transition-colors shadow-md"
|
className="btn-shimmer bg-accent text-white px-6 py-2.5 rounded-full text-[11px] font-bold tracking-[0.12em] uppercase hover:bg-accent/90 transition-colors shadow-md"
|
||||||
>
|
>
|
||||||
Bize Ulaşın
|
{currentLang === "en" ? "Contact Us" : "Bize Ulaşın"}
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
{/* Lang Toggle */}
|
{/* Lang Toggle */}
|
||||||
@@ -160,10 +167,10 @@ export default function Navbar() {
|
|||||||
{currentLang === "tr" ? "English" : "Türkçe"}
|
{currentLang === "tr" ? "English" : "Türkçe"}
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
href="/iletisim"
|
href={`/${currentLang}/iletisim`}
|
||||||
className="mt-4 block w-full text-center bg-accent text-white px-6 py-3.5 rounded-full text-sm font-bold uppercase tracking-wider"
|
className="mt-4 block w-full text-center bg-accent text-white px-6 py-3.5 rounded-full text-sm font-bold uppercase tracking-wider"
|
||||||
>
|
>
|
||||||
Bize Ulaşın
|
{currentLang === "en" ? "Contact Us" : "Bize Ulaşın"}
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|||||||
Generated
+1
-115
@@ -683,9 +683,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "LGPL-3.0-or-later",
|
"license": "LGPL-3.0-or-later",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -702,9 +699,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "LGPL-3.0-or-later",
|
"license": "LGPL-3.0-or-later",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -721,9 +715,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "LGPL-3.0-or-later",
|
"license": "LGPL-3.0-or-later",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -740,9 +731,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "LGPL-3.0-or-later",
|
"license": "LGPL-3.0-or-later",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -759,9 +747,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "LGPL-3.0-or-later",
|
"license": "LGPL-3.0-or-later",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -778,9 +763,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "LGPL-3.0-or-later",
|
"license": "LGPL-3.0-or-later",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -797,9 +779,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "LGPL-3.0-or-later",
|
"license": "LGPL-3.0-or-later",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -816,9 +795,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "LGPL-3.0-or-later",
|
"license": "LGPL-3.0-or-later",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -835,9 +811,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -860,9 +833,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -885,9 +855,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -910,9 +877,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -935,9 +899,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -960,9 +921,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -985,9 +943,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1010,9 +965,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1235,9 +1187,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1254,9 +1203,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1273,9 +1219,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1292,9 +1235,6 @@
|
|||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1921,9 +1861,6 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1941,9 +1878,6 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1961,9 +1895,6 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -1981,9 +1912,6 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2151,7 +2079,7 @@
|
|||||||
"version": "19.2.3",
|
"version": "19.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
|
||||||
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
|
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@types/react": "^19.2.0"
|
"@types/react": "^19.2.0"
|
||||||
@@ -2558,9 +2486,6 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2575,9 +2500,6 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2592,9 +2514,6 @@
|
|||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2609,9 +2528,6 @@
|
|||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2626,9 +2542,6 @@
|
|||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2643,9 +2556,6 @@
|
|||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2660,9 +2570,6 @@
|
|||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2677,9 +2584,6 @@
|
|||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2694,9 +2598,6 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -2711,9 +2612,6 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -5691,9 +5589,6 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -5715,9 +5610,6 @@
|
|||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -5739,9 +5631,6 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
@@ -5763,9 +5652,6 @@
|
|||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"os": [
|
"os": [
|
||||||
|
|||||||
Reference in New Issue
Block a user