From 4f2188363a23e4531c578c131024f90708ad3621 Mon Sep 17 00:00:00 2001 From: ayrisdev Date: Sun, 19 Apr 2026 17:23:31 +0300 Subject: [PATCH] fb --- app/[lang]/about/AboutClient.tsx | 142 ++++++ app/[lang]/about/page.tsx | 18 + app/[lang]/contact/ContactClient.tsx | 184 ++++++++ app/[lang]/contact/page.tsx | 18 + app/[lang]/layout.tsx | 49 +++ app/[lang]/news/NewsClient.tsx | 120 +++++ app/[lang]/news/[slug]/NewsDetailClient.tsx | 157 +++++++ app/[lang]/news/[slug]/page.tsx | 20 + app/[lang]/news/page.tsx | 18 + app/[lang]/page.tsx | 40 ++ app/[lang]/suites/SuitesClient.tsx | 117 +++++ app/[lang]/suites/[id]/SuiteDetailClient.tsx | 221 ++++++++++ app/[lang]/suites/[id]/page.tsx | 19 + app/[lang]/suites/page.tsx | 18 + app/api/upload/route.ts | 33 ++ app/globals.css | 33 +- app/layout.tsx | 33 -- app/page.tsx | 65 --- cloudinary-assets.json | 412 ++++++++++++++++++ components/Amenities.tsx | 46 ++ components/CallToAction.tsx | 124 ++++++ components/Experiences.tsx | 104 +++++ components/Footer.tsx | 126 ++++++ components/Hero.tsx | 167 +++++++ components/Navbar.tsx | 167 +++++++ components/QuoteSection.tsx | 19 + components/ScrollReveal.tsx | 76 ++++ components/ShowcaseImage.tsx | 40 ++ components/SuitesHighlights.tsx | 112 +++++ components/Welcome.tsx | 70 +++ dictionaries/en.json | 132 ++++++ dictionaries/get-dictionary.ts | 9 + dictionaries/tr.json | 132 ++++++ lib/cloudinary.ts | 11 + middleware.ts | 26 ++ next.config.ts | 13 +- package-lock.json | 158 +++++++ package.json | 5 + .../Daire 1/photo_1_2024-04-05_12-32-09.jpg | Bin 0 -> 111962 bytes .../Daire 1/photo_2_2024-04-05_12-32-09.jpg | Bin 0 -> 108853 bytes .../Daire 1/photo_3_2024-04-05_12-32-09.jpg | Bin 0 -> 117449 bytes .../Daire 1/photo_4_2024-04-05_12-32-09.jpg | Bin 0 -> 144913 bytes .../Daire 1/photo_5_2024-04-05_12-32-09.jpg | Bin 0 -> 149115 bytes .../Daire 1/photo_6_2024-04-05_12-32-09.jpg | Bin 0 -> 89331 bytes .../Daire 1/photo_7_2024-04-05_12-32-09.jpg | Bin 0 -> 96504 bytes .../Daire 1/photo_8_2024-04-05_12-32-09.jpg | Bin 0 -> 80174 bytes .../Daire 1/photo_9_2024-04-05_12-32-09.jpg | Bin 0 -> 100408 bytes .../Daire 2/photo_1_2024-04-05_16-04-34.jpg | Bin 0 -> 87331 bytes .../Daire 2/photo_2_2024-04-05_16-04-34.jpg | Bin 0 -> 140418 bytes .../Daire 2/photo_3_2024-04-05_16-04-34.jpg | Bin 0 -> 107585 bytes .../Daire 2/photo_4_2024-04-05_16-04-34.jpg | Bin 0 -> 110586 bytes .../Daire 2/photo_5_2024-04-05_16-04-34.jpg | Bin 0 -> 88124 bytes .../Daire 2/photo_6_2024-04-05_16-04-34.jpg | Bin 0 -> 81627 bytes .../Daire 2/photo_7_2024-04-05_16-04-34.jpg | Bin 0 -> 109452 bytes .../Daire 2/photo_8_2024-04-05_16-04-34.jpg | Bin 0 -> 134115 bytes .../Daire 3/photo_1_2024-04-05_16-06-09.jpg | Bin 0 -> 135812 bytes .../Daire 3/photo_2_2024-04-05_16-06-09.jpg | Bin 0 -> 106815 bytes .../Daire 3/photo_3_2024-04-05_16-06-09.jpg | Bin 0 -> 121132 bytes .../Daire 3/photo_4_2024-04-05_16-06-09.jpg | Bin 0 -> 88353 bytes .../Daire 3/photo_5_2024-04-05_16-06-09.jpg | Bin 0 -> 120507 bytes .../Daire 3/photo_6_2024-04-05_16-06-09.jpg | Bin 0 -> 85407 bytes .../Daire 3/photo_7_2024-04-05_16-06-09.jpg | Bin 0 -> 53556 bytes .../Daire 3/photo_8_2024-04-05_16-06-09.jpg | Bin 0 -> 123258 bytes .../Daire 3/photo_9_2024-04-05_16-06-09.jpg | Bin 0 -> 89223 bytes .../Daire 4/photo_10_2024-04-05_16-07-01.jpg | Bin 0 -> 114610 bytes .../Daire 4/photo_1_2024-04-05_16-07-01.jpg | Bin 0 -> 122198 bytes .../Daire 4/photo_2_2024-04-05_16-07-01.jpg | Bin 0 -> 87702 bytes .../Daire 4/photo_3_2024-04-05_16-07-01.jpg | Bin 0 -> 94578 bytes .../Daire 4/photo_4_2024-04-05_16-07-01.jpg | Bin 0 -> 111600 bytes .../Daire 4/photo_5_2024-04-05_16-07-01.jpg | Bin 0 -> 134431 bytes .../Daire 4/photo_6_2024-04-05_16-07-01.jpg | Bin 0 -> 88658 bytes .../Daire 4/photo_7_2024-04-05_16-07-01.jpg | Bin 0 -> 83928 bytes .../Daire 4/photo_8_2024-04-05_16-07-01.jpg | Bin 0 -> 121746 bytes .../Daire 4/photo_9_2024-04-05_16-07-01.jpg | Bin 0 -> 112938 bytes .../Daire 5/photo_10_2024-05-04_15-33-08.jpg | Bin 0 -> 88691 bytes .../Daire 5/photo_11_2024-05-04_15-33-08.jpg | Bin 0 -> 222481 bytes .../Daire 5/photo_12_2024-05-04_15-33-08.jpg | Bin 0 -> 161358 bytes .../Daire 5/photo_1_2024-05-04_15-32-44.jpg | Bin 0 -> 88691 bytes .../Daire 5/photo_1_2024-05-04_15-33-08.jpg | Bin 0 -> 98234 bytes .../Daire 5/photo_2_2024-05-04_15-33-08.jpg | Bin 0 -> 93962 bytes .../Daire 5/photo_3_2024-05-04_15-33-08.jpg | Bin 0 -> 111874 bytes .../Daire 5/photo_4_2024-05-04_15-33-08.jpg | Bin 0 -> 101413 bytes .../Daire 5/photo_5_2024-05-04_15-33-08.jpg | Bin 0 -> 104993 bytes .../Daire 5/photo_6_2024-05-04_15-33-08.jpg | Bin 0 -> 81591 bytes .../Daire 5/photo_7_2024-05-04_15-33-08.jpg | Bin 0 -> 214028 bytes .../Daire 5/photo_8_2024-05-04_15-33-08.jpg | Bin 0 -> 212579 bytes .../Daire 5/photo_9_2024-05-04_15-33-08.jpg | Bin 0 -> 76776 bytes .../Daire 6/photo_10_2024-05-04_15-33-08.jpg | Bin 0 -> 88691 bytes .../Daire 6/photo_11_2024-05-04_15-33-08.jpg | Bin 0 -> 222481 bytes .../Daire 6/photo_12_2024-05-04_15-33-08.jpg | Bin 0 -> 161358 bytes .../Daire 6/photo_1_2024-05-04_15-32-44.jpg | Bin 0 -> 88691 bytes .../Daire 6/photo_1_2024-05-04_15-33-08.jpg | Bin 0 -> 98234 bytes .../Daire 6/photo_2_2024-05-04_15-33-08.jpg | Bin 0 -> 93962 bytes .../Daire 6/photo_3_2024-05-04_15-33-08.jpg | Bin 0 -> 111874 bytes .../Daire 6/photo_4_2024-05-04_15-33-08.jpg | Bin 0 -> 101413 bytes .../Daire 6/photo_5_2024-05-04_15-33-08.jpg | Bin 0 -> 104993 bytes .../Daire 6/photo_6_2024-05-04_15-33-08.jpg | Bin 0 -> 81591 bytes .../Daire 6/photo_7_2024-05-04_15-33-08.jpg | Bin 0 -> 214028 bytes .../Daire 6/photo_8_2024-05-04_15-33-08.jpg | Bin 0 -> 212579 bytes .../Daire 6/photo_9_2024-05-04_15-33-08.jpg | Bin 0 -> 76776 bytes .../Daire 7/photo_10_2024-05-04_15-33-34.jpg | Bin 0 -> 101067 bytes .../Daire 7/photo_1_2024-05-04_15-33-34.jpg | Bin 0 -> 113855 bytes .../Daire 7/photo_2_2024-05-04_15-33-34.jpg | Bin 0 -> 91546 bytes .../Daire 7/photo_3_2024-05-04_15-33-34.jpg | Bin 0 -> 127623 bytes .../Daire 7/photo_4_2024-05-04_15-33-34.jpg | Bin 0 -> 114442 bytes .../Daire 7/photo_5_2024-05-04_15-33-34.jpg | Bin 0 -> 151670 bytes .../Daire 7/photo_6_2024-05-04_15-33-34.jpg | Bin 0 -> 86995 bytes .../Daire 7/photo_7_2024-05-04_15-33-34.jpg | Bin 0 -> 96468 bytes .../Daire 7/photo_8_2024-05-04_15-33-34.jpg | Bin 0 -> 114976 bytes .../Daire 7/photo_9_2024-05-04_15-33-34.jpg | Bin 0 -> 113852 bytes .../Daire 8/photo_10_2024-05-04_15-33-34.jpg | Bin 0 -> 101067 bytes .../Daire 8/photo_1_2024-05-04_15-33-34.jpg | Bin 0 -> 113855 bytes .../Daire 8/photo_2_2024-05-04_15-33-34.jpg | Bin 0 -> 91546 bytes .../Daire 8/photo_3_2024-05-04_15-33-34.jpg | Bin 0 -> 127623 bytes .../Daire 8/photo_4_2024-05-04_15-33-34.jpg | Bin 0 -> 114442 bytes .../Daire 8/photo_5_2024-05-04_15-33-34.jpg | Bin 0 -> 151670 bytes .../Daire 8/photo_6_2024-05-04_15-33-34.jpg | Bin 0 -> 86995 bytes .../Daire 8/photo_7_2024-05-04_15-33-34.jpg | Bin 0 -> 96468 bytes .../Daire 8/photo_8_2024-05-04_15-33-34.jpg | Bin 0 -> 114976 bytes .../Daire 8/photo_9_2024-05-04_15-33-34.jpg | Bin 0 -> 113852 bytes public/logo.png | Bin 0 -> 748276 bytes scripts/upload.mjs | 77 ++++ 122 files changed, 3215 insertions(+), 116 deletions(-) create mode 100644 app/[lang]/about/AboutClient.tsx create mode 100644 app/[lang]/about/page.tsx create mode 100644 app/[lang]/contact/ContactClient.tsx create mode 100644 app/[lang]/contact/page.tsx create mode 100644 app/[lang]/layout.tsx create mode 100644 app/[lang]/news/NewsClient.tsx create mode 100644 app/[lang]/news/[slug]/NewsDetailClient.tsx create mode 100644 app/[lang]/news/[slug]/page.tsx create mode 100644 app/[lang]/news/page.tsx create mode 100644 app/[lang]/page.tsx create mode 100644 app/[lang]/suites/SuitesClient.tsx create mode 100644 app/[lang]/suites/[id]/SuiteDetailClient.tsx create mode 100644 app/[lang]/suites/[id]/page.tsx create mode 100644 app/[lang]/suites/page.tsx create mode 100644 app/api/upload/route.ts delete mode 100644 app/layout.tsx delete mode 100644 app/page.tsx create mode 100644 cloudinary-assets.json create mode 100644 components/Amenities.tsx create mode 100644 components/CallToAction.tsx create mode 100644 components/Experiences.tsx create mode 100644 components/Footer.tsx create mode 100644 components/Hero.tsx create mode 100644 components/Navbar.tsx create mode 100644 components/QuoteSection.tsx create mode 100644 components/ScrollReveal.tsx create mode 100644 components/ShowcaseImage.tsx create mode 100644 components/SuitesHighlights.tsx create mode 100644 components/Welcome.tsx create mode 100644 dictionaries/en.json create mode 100644 dictionaries/get-dictionary.ts create mode 100644 dictionaries/tr.json create mode 100644 lib/cloudinary.ts create mode 100644 middleware.ts create mode 100644 public/ayrisapart/Daire 1/photo_1_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 1/photo_2_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 1/photo_3_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 1/photo_4_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 1/photo_5_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 1/photo_6_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 1/photo_7_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 1/photo_8_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 1/photo_9_2024-04-05_12-32-09.jpg create mode 100644 public/ayrisapart/Daire 2/photo_1_2024-04-05_16-04-34.jpg create mode 100644 public/ayrisapart/Daire 2/photo_2_2024-04-05_16-04-34.jpg create mode 100644 public/ayrisapart/Daire 2/photo_3_2024-04-05_16-04-34.jpg create mode 100644 public/ayrisapart/Daire 2/photo_4_2024-04-05_16-04-34.jpg create mode 100644 public/ayrisapart/Daire 2/photo_5_2024-04-05_16-04-34.jpg create mode 100644 public/ayrisapart/Daire 2/photo_6_2024-04-05_16-04-34.jpg create mode 100644 public/ayrisapart/Daire 2/photo_7_2024-04-05_16-04-34.jpg create mode 100644 public/ayrisapart/Daire 2/photo_8_2024-04-05_16-04-34.jpg create mode 100644 public/ayrisapart/Daire 3/photo_1_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 3/photo_2_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 3/photo_3_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 3/photo_4_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 3/photo_5_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 3/photo_6_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 3/photo_7_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 3/photo_8_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 3/photo_9_2024-04-05_16-06-09.jpg create mode 100644 public/ayrisapart/Daire 4/photo_10_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_1_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_2_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_3_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_4_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_5_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_6_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_7_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_8_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 4/photo_9_2024-04-05_16-07-01.jpg create mode 100644 public/ayrisapart/Daire 5/photo_10_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_11_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_12_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_1_2024-05-04_15-32-44.jpg create mode 100644 public/ayrisapart/Daire 5/photo_1_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_2_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_3_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_4_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_5_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_6_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_7_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_8_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 5/photo_9_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_10_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_11_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_12_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_1_2024-05-04_15-32-44.jpg create mode 100644 public/ayrisapart/Daire 6/photo_1_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_2_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_3_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_4_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_5_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_6_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_7_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_8_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 6/photo_9_2024-05-04_15-33-08.jpg create mode 100644 public/ayrisapart/Daire 7/photo_10_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_1_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_2_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_3_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_4_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_5_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_6_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_7_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_8_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 7/photo_9_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_10_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_1_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_2_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_3_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_4_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_5_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_6_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_7_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_8_2024-05-04_15-33-34.jpg create mode 100644 public/ayrisapart/Daire 8/photo_9_2024-05-04_15-33-34.jpg create mode 100644 public/logo.png create mode 100644 scripts/upload.mjs diff --git a/app/[lang]/about/AboutClient.tsx b/app/[lang]/about/AboutClient.tsx new file mode 100644 index 0000000..ae4a81a --- /dev/null +++ b/app/[lang]/about/AboutClient.tsx @@ -0,0 +1,142 @@ +'use client' + +import { motion } from "framer-motion" +import Image from "next/image" +import { Check, Hotel, Star, Globe } from 'lucide-react' + + + +export default function AboutClient({ lang, dict }: { lang: string, dict: any }) { + const whyUs = [ + { title: dict.about.why['1'].t, desc: dict.about.why['1'].d }, + { title: dict.about.why['2'].t, desc: dict.about.why['2'].d }, + { title: dict.about.why['3'].t, desc: dict.about.why['3'].d }, + { title: dict.about.why['4'].t, desc: dict.about.why['4'].d } + ] + + const stats = [ + { icon: , value: '8+', label: 'Premium Room' }, + { icon: , value: '4.8', label: 'Guest Rating' }, + { icon: , value: '10+', label: 'Countries' } + ] + + return ( +
+ + + {/* HERO SECTION */} +
+
+ + {dict.about.title} + + + {dict.about.subtitle} + +
+
+ + {/* STORY & WHY US SECTION */} +
+
+ + {/* Left: Story */} + +

{dict.about.story.title}

+
+

{dict.about.story.p1}

+

{dict.about.story.p2}

+
+
+ + {/* Right: Why Us Card */} + +

{dict.about.why.title}

+
+ {whyUs.map((item, idx) => ( +
+
+ +
+
+

{item.title}

+

{item.desc}

+
+
+ ))} +
+
+
+
+ + {/* STATS SECTION */} +
+
+ {stats.map((stat, idx) => ( + +
+ {stat.icon} +
+
+

{stat.value}

+

{stat.label}

+
+
+ ))} +
+
+ + {/* VISION SECTION */} +
+
+ + {dict.about.vision.title} + + + {dict.about.vision.text} + +
+
+ + +
+ ) +} diff --git a/app/[lang]/about/page.tsx b/app/[lang]/about/page.tsx new file mode 100644 index 0000000..1903813 --- /dev/null +++ b/app/[lang]/about/page.tsx @@ -0,0 +1,18 @@ +import { getDictionary } from "@/dictionaries/get-dictionary" +import AboutClient from "./AboutClient" + +export async function generateMetadata({ params }: { params: Promise<{ lang: string }> }) { + const { lang } = await params + const dict = await getDictionary(lang as 'en' | 'tr') + return { + title: `${dict.about.title} - Ayris Apart`, + description: dict.about.subtitle, + } +} + +export default async function AboutPage({ params }: { params: Promise<{ lang: string }> }) { + const { lang } = await params + const dict = await getDictionary(lang as 'en' | 'tr') + + return +} diff --git a/app/[lang]/contact/ContactClient.tsx b/app/[lang]/contact/ContactClient.tsx new file mode 100644 index 0000000..999dc10 --- /dev/null +++ b/app/[lang]/contact/ContactClient.tsx @@ -0,0 +1,184 @@ +'use client' + +import { motion } from "framer-motion" +import { Mail, Phone, MapPin, Clock, ArrowUpRight, MessageCircle } from 'lucide-react' +import Link from "next/link" + + + +const InstagramIcon = ({ size = 20 }: { size?: number }) => ( + + + + + +) + +export default function ContactClient({ lang, dict }: { lang: string, dict: any }) { + return ( +
+ + + {/* HERO SECTION */} +
+
+ + {dict.contact.title.split(' ')[0]}
{dict.contact.title.split(' ').slice(1).join(' ')} +
+
+
+ + {/* MINIMALIST INFO GRID */} +
+
+ + {/* Address */} + + +
+

{dict.contact.visit.t}

+

+ {dict.contact.visit.d} +

+ + {dict.contact.btn.map} + + +
+
+ + {/* Direct Connect */} + + +
+

{dict.contact.call.t}

+
+

+90 543 231 87 13

+

{dict.contact.call.d}

+
+ + {dict.contact.btn.call} + + +
+
+ + {/* Email */} + + +
+

{dict.contact.write.t}

+
+

hello@ayrisapart.com

+

{dict.contact.write.d}

+
+ + {dict.contact.btn.mail} + + +
+
+ + {/* WhatsApp */} + + +
+

{dict.contact.wa.t}

+

+ {dict.contact.wa.d} +

+ + {dict.contact.btn.wa} + + +
+
+ + {/* Instagram */} + + +
+

{dict.contact.ig.t}

+

+ {dict.contact.ig.d} +

+ + {dict.contact.btn.ig} + + +
+
+ + {/* Working Hours */} + + +
+

{dict.contact.hours.t}

+
+

{dict.contact.hours.d}

+

{dict.contact.hours.sub}

+
+
Open 24/7 for you
+
+
+
+
+ + {/* FULL WIDTH MAP SECTION */} +
+
+ +
+
+ + +
+ ) +} diff --git a/app/[lang]/contact/page.tsx b/app/[lang]/contact/page.tsx new file mode 100644 index 0000000..a44786d --- /dev/null +++ b/app/[lang]/contact/page.tsx @@ -0,0 +1,18 @@ +import { getDictionary } from "@/dictionaries/get-dictionary" +import ContactClient from "./ContactClient" + +export async function generateMetadata({ params }: { params: Promise<{ lang: string }> }) { + const { lang } = await params + const dict = await getDictionary(lang as 'en' | 'tr') + return { + title: `${dict.contact.title} - Ayris Apart`, + description: dict.contact.subtitle, + } +} + +export default async function ContactPage({ params }: { params: Promise<{ lang: string }> }) { + const { lang } = await params + const dict = await getDictionary(lang as 'en' | 'tr') + + return +} diff --git a/app/[lang]/layout.tsx b/app/[lang]/layout.tsx new file mode 100644 index 0000000..cf42a68 --- /dev/null +++ b/app/[lang]/layout.tsx @@ -0,0 +1,49 @@ +import type { Metadata } from "next"; +import { Oranienbaum, Inter } from "next/font/google"; +import "../globals.css"; +import Navbar from "@/components/Navbar"; +import { getDictionary } from "@/dictionaries/get-dictionary"; +import Footer from "@/components/Footer"; + +const oranienbaum = Oranienbaum({ + subsets: ["latin", "latin-ext"], + weight: ["400"], + variable: "--font-oranienbaum", + display: "swap", +}); + +const inter = Inter({ + subsets: ["latin", "latin-ext"], + variable: "--font-inter", + display: "swap", +}); + +export const metadata: Metadata = { + title: "Ayris - Luxury Accommodation", + description: "Experience the ultimate comfort and luxury at Ayris.", +}; + +export async function generateStaticParams() { + return [{ lang: 'en' }, { lang: 'tr' }] +} + +export default async function RootLayout({ + children, + params, +}: { + children: React.ReactNode; + params: Promise<{ lang: string }>; +}) { + const { lang } = await params; + const dict = await getDictionary(lang as 'en' | 'tr'); + + return ( + + + + {children} +