diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..94946cd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,53 @@ +# 1. Base image +FROM node:20-alpine AS base + +# 2. Dependencies +FROM base AS deps +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Install dependencies +COPY package.json package-lock.json* ./ +RUN npm ci --legacy-peer-deps + + +# 3. Builder +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Environment variables must be present at build time for Next.js +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN npm run build + +# 4. Runner +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public + +# Set the correct permission for prerender cache +RUN mkdir .next +RUN chown nextjs:nodejs .next + +# Automatically leverage output traces to reduce image size +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +# Start the server +CMD ["node", "server.js"] diff --git a/README.md b/README.md index e215bc4..203e50a 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,43 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). +# Moy Beach Menu -## Getting Started +Moy Beach için modern, şık ve animasyonlu dijital menü uygulaması. -First, run the development server: +## 🚀 Teknolojiler +- **Next.js 15** (App Router) +- **React 19** +- **Tailwind CSS v4** +- **Framer Motion** (Yumuşak geçişler ve modal animasyonları) +- **TypeScript** + +## 📦 Özellikler +- **Kategori Navigasyonu:** Kullanıcı kaydırdıkça hangi kategoride olduğunu takip eden `IntersectionObserver` destekli navigasyon. +- **Dinamik Modal Görünümü:** Ürünlere tıklandığında detaylı bilgi gösteren, şık ve tepkisel modal tasarımı. +- **Özelleştirilmiş Tasarım Tokenleri:** `app/globals.css` içerisinde renk paletleri ve yazı tipleri (Cormorant, Plus Jakarta Sans) kolayca yönetilebilir. +- **Docker Desteği:** `Dockerfile` ile optimize edilmiş `standalone` output desteğiyle kolayca konteynerize edilebilir. + +## 🛠️ Kurulum ve Çalıştırma + +Lokal geliştirme ortamında çalıştırmak için: ```bash +# Bağımlılıkları yükleyin +npm install + +# Geliştirme sunucusunu başlatın npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +Tarayıcınızda [http://localhost:3000](http://localhost:3000) adresine giderek uygulamayı görüntüleyebilirsiniz. -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +## 🐳 Docker ile Çalıştırma -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. +```bash +# İmajı oluşturun +docker build -t moy-qr . -## Learn More +# Konteyneri başlatın +docker run -p 3000:3000 moy-qr +``` -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. +## 📝 Menü İçeriğini Güncelleme +Menü kategorileri, ürünler, fiyatlar ve resimler `data/menu.ts` dosyasından okunur. Yeni ürün eklemek veya düzenlemek için bu dosyayı güncelleyebilirsiniz. diff --git a/app/favicon.ico b/app/favicon.ico index 718d6fe..380789b 100644 Binary files a/app/favicon.ico and b/app/favicon.ico differ diff --git a/app/globals.css b/app/globals.css index a2dc41e..c8f4568 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,26 +1,70 @@ @import "tailwindcss"; +/* ── Design Tokens ─────────────────────────────── */ :root { - --background: #ffffff; - --foreground: #171717; + --cream: #FAF8F3; + --sand: #F0E8DC; + --sand-border: rgba(140, 108, 72, 0.13); + --amber: #C2712E; + --amber-light: #E49248; + --amber-pale: #F6EDDE; + --stone-ink: #2E2820; + --stone-mid: #6B5E54; + --stone-muted: #9C9088; + --hero-from: #1E0E06; + --hero-via: #7C3312; + --hero-to: #C96B28; } @theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); -} + --color-cream: var(--cream); + --color-sand: var(--sand); + --color-amber: var(--amber); + --color-amber-light: var(--amber-light); + --color-amber-pale: var(--amber-pale); + --color-stone-ink: var(--stone-ink); + --color-stone-mid: var(--stone-mid); + --color-stone-muted: var(--stone-muted); -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } + --font-display: var(--font-cormorant); + --font-sans: var(--font-jakarta); } body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; + background: var(--cream); + color: var(--stone-ink); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +@layer utilities { + .hide-scrollbar::-webkit-scrollbar { display: none; } + .hide-scrollbar { + -ms-overflow-style: none; + scrollbar-width: none; + } + + .font-display { + font-family: var(--font-cormorant), "Garamond", serif; + } + + .hero-gradient { + background: linear-gradient( + 170deg, + var(--hero-from) 0%, + var(--hero-via) 50%, + var(--hero-to) 100% + ); + } + + .pill-active { + background: linear-gradient(135deg, #C2712E, #9A5320); + color: #FFF6E8; + box-shadow: 0 2px 10px rgba(194, 113, 46, 0.38); + } + + .pill-inactive { + background: rgba(120, 90, 58, 0.09); + color: var(--stone-mid); + } } diff --git a/app/layout.tsx b/app/layout.tsx index 976eb90..23ec8f0 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,20 +1,25 @@ import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; +import { Cormorant_Garamond, Plus_Jakarta_Sans } from "next/font/google"; import "./globals.css"; -const geistSans = Geist({ - variable: "--font-geist-sans", +const cormorant = Cormorant_Garamond({ + variable: "--font-cormorant", subsets: ["latin"], + weight: ["300", "400", "500", "600", "700"], + style: ["normal", "italic"], + display: "swap", }); -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", +const jakarta = Plus_Jakarta_Sans({ + variable: "--font-jakarta", subsets: ["latin"], + weight: ["300", "400", "500", "600", "700"], + display: "swap", }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Moy Beach Akyaka | Menü", + description: "Moy Beach Akyaka dijital menü.", }; export default function RootLayout({ @@ -23,11 +28,8 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - {children} + + {children} ); } diff --git a/app/page.tsx b/app/page.tsx index 3f36f7c..bd95e39 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,65 +1,271 @@ -import Image from "next/image"; +"use client"; + +import { useEffect, useState, useRef } from "react"; +import { motion, AnimatePresence } from "framer-motion"; +import { menuData, MenuItem as MenuItemType } from "@/data/menu"; +import { CategoryNav } from "@/components/CategoryNav"; +import { MenuItem } from "@/components/MenuItem"; + +export const CATEGORY_ICONS: Record = { + "kahvaltiliklar": "🌅", + "kaseler": "🥗", + "burger-ve-sandvic": "🍔", + "pizzalar": "🍕", + "makarnalar": "🍝", + "baslangiclar": "🧆", + "salatalar": "🥬", + "ana-yemekler": "🍽️", + "tatlilar": "🍮", + "i̇mza-kokteyller": "🍹", + "klasik-kokteyller": "🍸", + "biralar": "🍺", + "shotlar": "🥃", + "sise-ve-kadeh-alkollu": "🥂", + "saraplar": "🍷", + "cerezler": "🥜", + "alkolsuz-i̇cecekler": "🧃", + "sicak-kahveler": "☕", + "soguk-kahveler": "🧊", + "ekstralar": "✨", +}; + +export default function MenuPage() { + const [activeCategoryId, setActiveCategoryId] = useState( + menuData[0]?.id || "" + ); + const [selectedItem, setSelectedItem] = useState(null); + const sectionRefs = useRef<(HTMLElement | null)[]>([]); + + useEffect(() => { + const observer = new IntersectionObserver( + (entries) => { + const hit = entries.find((e) => e.isIntersecting); + if (hit) setActiveCategoryId(hit.target.id); + }, + { root: null, rootMargin: "-100px 0px -62% 0px", threshold: 0 } + ); + + sectionRefs.current.forEach((ref) => ref && observer.observe(ref)); + return () => observer.disconnect(); + }, []); + + useEffect(() => { + if (selectedItem) { + document.body.style.overflow = "hidden"; + } else { + document.body.style.overflow = "unset"; + } + return () => { + document.body.style.overflow = "unset"; + }; + }, [selectedItem]); -export default function Home() { return ( -
-
- Next.js logo + + {/* ── Hero ─────────────────────────────────────── */} +
+ {/* Background Image */} +
-
-

- To get started, edit the page.tsx file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - + + {/* hero content */} +

+ +

- Templates - {" "} - or the{" "} - + +

- Learning - {" "} - center. + Moy +

+ +

+ Beach +

+ +
+
+ +
+
+ +

+ Akyaka'nın en keyifli menüsü +

+ +
+ + {/* wave transition */} +
+ + + +
+
+ + {/* ── Category Nav ─────────────────────────────── */} + + + {/* ── Menu Sections ────────────────────────────── */} +
+ {menuData.map((category, index) => ( + { sectionRefs.current[index] = el; }} + className="pt-10 px-4 max-w-lg mx-auto scroll-mt-[62px]" + initial={{ opacity: 0, y: 14 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true, margin: "-50px" }} + transition={{ duration: 0.5, ease: [0.16, 1, 0.3, 1] }} + > + {/* section header */} +
+ + {CATEGORY_ICONS[category.id] ?? "🍽️"} + +

+ {category.title} +

+
+ +
+ {category.items.map((item, idx) => ( + setSelectedItem(item)} /> + ))} +
+
+ ))} +
+ + {/* ── Footer ───────────────────────────────────── */} +
+ e.stopPropagation()} + > + {selectedItem.image && ( +
+ {selectedItem.name} + +
+ )} +
+
+

+ {selectedItem.name} +

+ + {selectedItem.price} + +
+

+ {selectedItem.description} +

+
+
+ + )} +
); } diff --git a/components/CategoryNav.tsx b/components/CategoryNav.tsx new file mode 100644 index 0000000..6353eea --- /dev/null +++ b/components/CategoryNav.tsx @@ -0,0 +1,68 @@ +"use client"; + +import React, { useEffect, useRef } from "react"; +import { MenuCategory } from "@/data/menu"; + +interface CategoryNavProps { + categories: MenuCategory[]; + activeCategoryId: string; + icons: Record; +} + +export function CategoryNav({ categories, activeCategoryId, icons }: CategoryNavProps) { + const containerRef = useRef(null); + + useEffect(() => { + if (!activeCategoryId || !containerRef.current) return; + const el = containerRef.current.querySelector( + `[data-id="${activeCategoryId}"]` + ) as HTMLElement | null; + el?.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "center" }); + }, [activeCategoryId]); + + const scrollTo = (id: string) => { + const el = document.getElementById(id); + if (!el) return; + const y = el.getBoundingClientRect().top + window.scrollY - 72; + window.scrollTo({ top: y, behavior: "smooth" }); + }; + + return ( +
+
+ {categories.map((cat) => { + const active = cat.id === activeCategoryId; + return ( + + ); + })} +
+
+ ); +} diff --git a/components/MenuItem.tsx b/components/MenuItem.tsx new file mode 100644 index 0000000..dc7ff83 --- /dev/null +++ b/components/MenuItem.tsx @@ -0,0 +1,48 @@ +import React from "react"; +import { MenuItem as MenuItemType } from "@/data/menu"; + +export function MenuItem({ item, onClick }: { item: MenuItemType; onClick?: () => void }) { + return ( +
+
+
+

+ {item.name} +

+ {item.description && ( +

+ {item.description} +

+ )} + {item.price && ( +
+ {item.price} +
+ )} +
+ {item.image && ( +
+ {item.name} +
+ )} +
+
+ ); +} diff --git a/data/menu.ts b/data/menu.ts new file mode 100644 index 0000000..522ca63 --- /dev/null +++ b/data/menu.ts @@ -0,0 +1,1054 @@ +export interface MenuItem { + id?: string; + name: string; + description: string; + price: string; + image?: string; +} + +export interface MenuCategory { + id: string; + title: string; + items: MenuItem[]; +} + +export const menuData: MenuCategory[] = [ + { + id: "kahvaltiliklar", + title: "Kahvaltılıklar", + items: [ + { + name: "Kahvaltı Tabağı", + description: "Haşlanmış yumurta, siyah ve yeşil zeytin, bal, kaymak, taze avokado, domates ve salatalık ile hazırl ...", + price: "239 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Kavurmalı Yumurta", + description: "Tereyağında pişirilen yumurtaların, yumuşak dokulu dana kavurma ile buluştuğu doyurucu kahvaltılık.", + price: "156 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Menemen", + description: "Olgun domates, yeşil biber ve yumurta ile hazırlanan geleneksel Türk menemeni.", + price: "363 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Sucuklu Yumurta", + description: "Izgarada hafifçe kızartılmış sucuk dilimleri ve tereyağlı yumurta ile hazırlanan klasik lezzet.", + price: "337 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Göz Yumurta", + description: "Tereyağında pişirilmiş iki adet yumurta, sade ve klasik sunumuyla servis edilir.", + price: "253 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Çırpılmış Yumurta", + description: "Tereyağında yumuşak kıvamda hazırlanan çırpılmış yumurta.", + price: "400 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Sebzeli ve Peynirli Omlet", + description: "Üç yumurta ile hazırlanan omlet; mevsim sebzeleri veya peynir seçeneğiyle servis edilir.", + price: "216 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Eggs Benedict", + description: "Tereyağında kızartılmış ekmek üzerinde sotelenmiş ıspanak, ince dilim kuru et ve poşe yumurta; holla ...", + price: "425 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + } + ] + }, + { + id: "kaseler", + title: "Kaseler", + items: [ + { + name: "Kavrulmuş Kinoa Kasesi", + description: "Kavrulmuş kinoa; köz aromalı tatlı patates, edamame, baby mısır ve Meksika fasulyesi ile buluşturulu ...", + price: "357 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Avokado Kasesi", + description: "Taze avokado küpleri; salatalık, cherry domates ve nane ile buluşur. Edamame, nohut ve peynir küpler ...", + price: "306 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Granola Kasesi", + description: "Meyveli yoğurt üzerine yerleştirilen çıtır granola ve mevsim meyveleriyle hazırlanan hafif ve ferah ...", + price: "311 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Naneli Karpuz Kasesi", + description: "Sulu karpuz dilimleri; taze nane, fesleğen ve kaya koruğu ile harmanlanır. Ezine peyniri ve balzamik ...", + price: "367 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Sushi Kasesi", + description: "Füme somon, surimi, avokado, baby turp, salatalık ve marine yosun ile buluşur. Spicy mayo, frenk soğ ...", + price: "258 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + } + ] + }, + { + id: "burger-ve-sandvic", + title: "Burger & Sandviç", + items: [ + { + name: "Cheeseburger", + description: "Izgara hamburger köftesi, eriyen cheddar peyniri ve karamelize soğan; özel sos eşliğinde yumuşak bur ...", + price: "334 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Sloppy Joe", + description: "Yavaş pişirilmiş sebzeli kıyma ile hazırlanan Sloppy Joe, artisan burger ekmeğinde trüflü mayonez eş ...", + price: "260 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Caprese Sandviç", + description: "Pesto sos, buratta, olgun domates ve fesleğen yapraklarının zeytinli biberiyeli köy ekmeği ile buluş ...", + price: "205 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Hot Dog", + description: "Izgara sosis; cheddar, kıtır soğan, hardal ve sweet chili sos ile sandviç ekmeği içerisinde servis e ...", + price: "390 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Chili Hot Dog", + description: "Bolonez kıyma ve hafif acılı chili sos ile hazırlanan yoğun aromalı hot dog yorumu.", + price: "388 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Tex-Mex Biftek Sandviç", + description: "Izgara biftek dilimleri, özel soslar ve Tex-Mex aromalarıyla hazırlanan sade köy ekmeği.", + price: "208 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + } + ] + }, + { + id: "pizzalar", + title: "Pizzalar", + items: [ + { + name: "Margherita Pizza", + description: "İnce pizza tabanı üzerinde domates sosu, mozzarella ve taze fesleğen ile hazırlanan klasik İtalyan p ...", + price: "312 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Sucuklu Pizza", + description: "Domates sosu ve mozzarella peyniri üzerine yerleştirilen sucuk dilimleriyle hazırlanan yoğun aromalı ...", + price: "243 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Burrata & Enginar Pestolu Pizza", + description: "Enginar pesto sosu, feta peyniri ve kremamsı burrata ile hazırlanan ince taban pizza yorumu.", + price: "414 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Kuru Et & Enginarlı Pizza", + description: "Kuru et, enginar ve kurutulmuş domates ile hazırlanan pizza.", + price: "376 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Dört Peynirli Pizza", + description: "Mozzarella, rokfor, brie ve edam peynirlerinin buluştuğu yoğun peynir aromalı pizza.", + price: "326 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Karışık Pizza", + description: "Sucuk, biber, mantar, mısır ve siyah zeytin ile hazırlanan doyurucu karışık pizza.", + price: "449 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Vejetaryen Pizza", + description: "Izgara kabak, renkli biberler, mantar, kırmızı soğan ve siyah zeytin ile hazırlanan sebzeli pizza.", + price: "162 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + } + ] + }, + { + id: "makarnalar", + title: "Makarnalar", + items: [ + { + name: "Limon & Adaçaylı Capellini", + description: "İnce capellini makarnası; taze limon suyu ve aromatik adaçayı ile hazırlanır.", + price: "304 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Kremalı Enginar & Gnocchi", + description: "Kremalı pesto sos, taze enginar ve parmesan ile hazırlanan yumuşak dokulu makarna.", + price: "362 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Deniz Mahsullü Linguine", + description: "Karides, yengeç ve aromatik deniz mahsullü sos ile hazırlanan linguine makarna, parmesan ile tamamla ...", + price: "229 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Spagetti Bolonez", + description: "Yavaş pişirilmiş bolonez sosun spaghetti ile buluştuğu klasik İtalyan lezzeti.", + price: "438 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Fettuccine Alfredo", + description: "Kremalı Alfredo sos; tavuk parçaları, mantar ve parmesan ile zenginleştirilir.", + price: "285 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Glütensiz Makarna Seçenekleri", + description: "Glütensiz makarna seçenekleri mevcut; diyet gereksinimlerinize uygun olarak hazırlanır.", + price: "312 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + } + ] + }, + { + id: "baslangiclar", + title: "Başlangıçlar", + items: [ + { + name: "Patates Kızartması", + description: "Çıtır ve altın renginde kızartılmış patates dilimleri.", + price: "363 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Trüflü Parmesanlı Patates", + description: "Çıtır patates kızartmaları, aromatik trüf sosu ve parmesan ile servis edilir.", + price: "278 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Çıtır Tavuk Parçaları", + description: "Altın renginde çıtır tavuk parçaları, patates kızartması eşliğinde servis edilir.", + price: "282 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Dinamit Karides", + description: "Çıtır karidesler; sriracha, lime ve özel dynamite sos ile buluşturulur.", + price: "276 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Tempura Kabak", + description: "Tempura kaplamalı kabak dilimleri, dereotlu yoğurt sos eşliğinde servis edilir.", + price: "357 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Karışık Başlangıç Tabağı", + description: "Patates kızartması, sosis parçaları, çıtır tavuk ve acılı soğan halkası içeren paylaşım tabağı.", + price: "243 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + } + ] + }, + { + id: "salatalar", + title: "Salatalar", + items: [ + { + name: "Tavuklu Sezar Salata", + description: "Iceberg ve Yedikule marulu; ızgara tavuk, parmesan ve kruton ile hazırlanır.", + price: "351 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Yunan Salatası", + description: "Domates, salatalık, kırmızı soğan, siyah zeytin ve feta peyniriyle hazırlanan ferah Ege salatası.", + price: "303 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Caprese Salatası", + description: "Taze mozzarella, domates ve fesleğen yaprakları pesto sos ile tamamlanır.", + price: "433 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Avokado & Enginarlı Salata", + description: "Avokado, enginar kalbi ve mascolin yeşillikleri hafif Vinegret sos ile servis edilir.", + price: "395 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Roka Salatası", + description: "Pembe domates, roka, parmesan ve balzamik sirke sırrı.", + price: "185 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + } + ] + }, + { + id: "ana-yemekler", + title: "Ana Yemekler", + items: [ + { + name: "Bal & Soya Soslu Somon", + description: "Bal–soya glaze ile ızgaralanmış somon fileto, yüzeyinde hafif karamelizasyon oluşturularak servis ed ...", + price: "198 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Ojo de Bife", + description: "Dana antrikot, yoğun aromalı chimichurri sos ve pekmez dokunuşlu demi-glace eşliğinde servis edilir. ...", + price: "211 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Yakitori Tavuk Şiş", + description: "Marine tavuk şişler, esmer şekerle dengelenmiş glaze sos ile karamelize edilerek servis edilir. Fren ...", + price: "415 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Limon & Sarımsaklı Semizotlu Chateaubriand", + description: "Dana bonfile, yüksek ısıda mühürlenerek merkezinde yumuşak dokusunu koruyan klasik chateaubriand tek ...", + price: "430 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Levrek en Papillote", + description: "Levrek, kendi aroması korunarak beurre blanc sosun ipeksi dokusuyla servis edilir. Enginar pestosunu ...", + price: "325 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Geleneksel Türk Köftesi", + description: "Geleneksel Türk köftesi, tırnak pide ve çıtır patates kızartması eşliğinde servis edilir. Sarımsaklı ...", + price: "396 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + } + ] + }, + { + id: "tatlilar", + title: "Tatlılar", + items: [ + { + name: "Kaymaklı Churros", + description: "Dışı altın renginde çıtır, içi yumuşak dokulu churroslar geleneksel yöntemle hazırlanarak sıcak serv ...", + price: "303 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Lotuslu Meyveli Krema", + description: "Kadifemsi meyve kreması, taze meyvelerin ferah aroması ve Lotus bisküvisinin karamelize notalarıyla ...", + price: "331 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Sufle", + description: "Yoğun kakao aromasıyla hazırlanan sıcak sufle, ince kabuğunun altında akışkan ve kadifemsi bir iç do ...", + price: "364 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + } + ] + }, + { + id: "i̇mza-kokteyller", + title: "İmza Kokteyller", + items: [ + { + name: "Grass", + description: "Ferah otsu ve yeşil notalarıyla öne çıkan, yaz plajına özel imza kokteyl.", + price: "443 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Placebo", + description: "Karmaşık ve beklenmedik tat profiliyle tekrar tekrar içmek isteteceğiniz imza Moy Beach kokteyli.", + price: "240 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Chili Mango", + description: "Olgun mango aromasının acı biberle dengelendiği tatlı, tropikal ve cesur bir kokteyl.", + price: "353 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Purble Basil", + description: "Aromatik mor fesleğenin yıldız olduğu, çiçeksi ve otsu karakterde bir kokteyl.", + price: "249 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Tuxedo", + description: "Sofistike notaları olan, şık ve güçlü bir kokteyl.", + price: "287 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Passion Martini", + description: "Tropikal çpassion fruit aromasıyla dolu, hafif ve canlandırıcı bir martini.", + price: "371 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Whiskey Sour Satsuma", + description: "Klasik whiskey sour'a satsuma mandalinasının parlak narenciye aromasıyla verilen yeni bir yorum.", + price: "424 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Peach Spritz", + description: "Taze şeftali aromasının hafif köpüklü yapıyla buluştuğu, güneşli günlere özel bir kokteyl.", + price: "191 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Moy Kokteyl", + description: "Moy Beach'in yalnızca misafirlerimiz için özel olarak hazırladığı eşsiz imza kokteyli.", + price: "437 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + } + ] + }, + { + id: "klasik-kokteyller", + title: "Klasik Kokteyller", + items: [ + { + name: "Espresso Martini", + description: "Votka, kahve likörü ve taze espresso shotuyla hazırlanan pürüzsüz ve lüks bir kokteyl.", + price: "443 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Margarita", + description: "Tekila, triple sec ve taze misket limonuyla hazırlanan, tuzlu kenarlıkla servis edilen ikonik koktey ...", + price: "314 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Long Island Ice Tea", + description: "Votka, rom, tekila, cin ve triple sec'in kola ve limonla buluştuğu efsanevi beş-sert içki kokteyli.", + price: "445 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Aperol Spritz", + description: "İtalya'nın sevilen aperitifi: Aperol acı likörünün Prosecco ve soda suyuyla buluştuğu, buz üzerinde ...", + price: "314 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + } + ] + }, + { + id: "biralar", + title: "Biralar", + items: [ + { + name: "Efes Özel Seri 50cl", + description: "Efes Özel Seri premium lager, 50cl kutuda servis edilir.", + price: "378 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Efes Malt 50cl", + description: "Zengin malt aromasıyla pürüzsüz bir koyu bira olan Efes Malt, 50cl kutuda servis edilir.", + price: "374 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Belfast 50cl", + description: "Pürüzsüz ve iyi dengeli tadıyla Belfast craft lager, 50cl kutuda servis edilir.", + price: "299 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Bomonti Filtresiz 50cl", + description: "Bomonti Filtresiz — doğal bulanık buğday birası, dolgun gövdesiyle 50cl kutuda servis edilir.", + price: "445 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Bud 33cl", + description: "Budweiser — klasik Amerikan lager, hafif ve ferah, 33cl şişede servis edilir.", + price: "377 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Becks 33cl", + description: "Beck's — sert atlama aromasıyla temiz ve çıtır Alman pilsneri, 33cl şişede.", + price: "415 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Miller 33cl", + description: "Miller Genuine Draft — hafif ve pürüzsüz Amerikan lager, 33cl şişede.", + price: "205 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Erdinger 33cl", + description: "Erdinger Weissbier — Bavyera'nın en iyisi, meyveli ve baharatlı notalarıyla buğday birası, 33cl.", + price: "387 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Heineken 33cl", + description: "Heineken — dünyaca ünlü Hollanda premium lager, çıtır ve ferah, 33cl şişede.", + price: "378 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Corona 35.5cl", + description: "Corona Extra — ikonik Meksika lager, misket limonuyla en güzel şekilde içilir, 35.5cl şişede.", + price: "375 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Stella Artois 33cl", + description: "Belçika'nın dünyaca ünlü premium lager birası, hafif meyvemsi ve ferahlatıcı tadıyla 33cl şişede.", + price: "419 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + } + ] + }, + { + id: "shotlar", + title: "Shotlar", + items: [ + { + name: "Jägermeister Shot", + description: "56 botanik ile hazırlanan efsanevi Alman bitkisel likörü Jägermeister, soğuk olarak servis edilir.", + price: "282 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Baileys Shot", + description: "Kremamsı ve zengin Baileys Original Irish Cream ile hazırlanan pürüzsüz ve lüks bir shot.", + price: "321 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Tekila Shot", + description: "Geleneksel yöntemle, bir tutam tuz ve misket limonu dilimiyle servis edilen klasik tekila shot.", + price: "371 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + } + ] + }, + { + id: "sise-ve-kadeh-alkollu", + title: "Şişe & Kadeh Alkollü", + items: [ + { + name: "Johnnie Walker Black Label 70cl", + description: "Johnnie Walker Black Label — en az 12 yıl yaşlandırılmış blended Scotch viski, zengin ve pürüzsüz. 7 ...", + price: "308 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Double Black Label 70cl", + description: "Johnnie Walker Double Black — Black Label'ın daha güçlü ve tütsülü yorumu, turba ve baharat notaları ...", + price: "389 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Johnnie Walker Gold Reserve 70cl", + description: "Johnnie Walker Gold Reserve — bal, vanilyalı ve toffee notalarıyla kremamsı blended Scotch viski. 70 ...", + price: "366 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Johnnie Walker 18yo 70cl", + description: "Johnnie Walker 18 Yıllık — olağanüstü derinlik ve pürüzsüzlüğe sahip, sofistike bir blended Scotch v ...", + price: "349 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Mortlach 12 70cl", + description: "Mortlach 12 Yıllık — kendine özgü damıtma süreciyle bilinen Speyside'den etli ve karmaşık bir single ...", + price: "288 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "The Singleton 70cl", + description: "The Singleton — tatlı ve meyveli notalarıyla erişilebilir ve pürüzsüz bir single malt Scotch viski. ...", + price: "187 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Talisker 70cl", + description: "Talisker — Skye Adası'nın ikonik Island single malt'ı, güçlü turba ve deniz karakteriyle. 70cl şişe. ...", + price: "230 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Dimple Golden Selection 70cl", + description: "Dimple Golden Selection — pürüzsüz ve dengeli bir blended Scotch viski, içimi kolay ve zarif. 70cl ş ...", + price: "204 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Smirnoff North 70cl", + description: "Smirnoff North — olağanüstü pürüzsüzlük için üç kez damıtılmış, temiz ve çıtır bir premium votka. 70 ...", + price: "171 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Ketel One 70cl", + description: "Ketel One — bakır pot distilasyonuyla üretilen premium Hollanda buğday votkası, ipeksi pürüzsüz ve ç ...", + price: "255 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Gordon's Pink Cin 70cl", + description: "Gordon's Premium Pink Gin — ahududu, çilek ve kırmızı frenk üzümü aromalarıyla klasiğe meyveli bir y ...", + price: "271 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Tanqueray No. Ten 70cl", + description: "Tanqueray No. TEN — greyfurt, portakal ve misket limonuyla damıtılmış ultra-premium cin. 70cl şişe. ...", + price: "313 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Captain Morgan 70cl", + description: "Captain Morgan Original Spiced Gold — ısıtıcı baharatlar ve doğal aromalarla harmanlanmış Karayip ru ...", + price: "292 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Don Julio 70cl", + description: "Don Julio — Jalisco yaylalarından premium %100 mavi agave tekilası, pürüzsüz ve rafine. 70cl şişe. F ...", + price: "294 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Gordons GIN 70cl", + description: "Gordon's London Dry Gin, 70cl şişe. Klasik, ardıç aromalı cin.", + price: "230 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Jägermeister", + description: "Jägermeister — 56 botanik ile hazırlanan efsanevi Alman bitkisel likörü, buz üzerinde kadeh olarak s ...", + price: "377 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Gordon's", + description: "Gordon's London Dry Gin — ardıç ve narenciye notalarıyla klasik ve çıtır cin, kadeh olarak servis ed ...", + price: "314 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Gordon's Pink", + description: "Gordon's Premium Pink Gin — meyveli, tatlı ve ferah karakterde meyve aromalı cin, kadeh olarak.", + price: "170 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Tanqueray No. Ten", + description: "Tanqueray No. TEN — taze narenciye meyvesiyle damıtılmış ultra-premium cin, kadeh olarak.", + price: "307 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Tanqueray Gin", + description: "Tanqueray London Dry Gin — güçlü ve belirgin ardıç karakteriyle cesur, tam aromalı cin, kadeh olarak ...", + price: "333 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Ketel One", + description: "Ketel One — bakır pot distilasyonuyla üretilen premium Hollanda buğday votkası, kadeh olarak.", + price: "267 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Dimple", + description: "Dimple — klasik ve pürüzsüz blended Scotch viski, kadeh olarak servis edilir.", + price: "402 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Johnnie Walker Black Label", + description: "Johnnie Walker Black Label — 12 yıl yaşlandırılmış, zengin ve tütsülü katmanlı kompleks viski, kadeh ...", + price: "165 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Lagavulin", + description: "Lagavulin — yoğun turba dumanı, deniz yosunu ve koyu meyve notalarıyla efsanevi Islay single malt, k ...", + price: "312 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + } + ] + }, + { + id: "saraplar", + title: "Şaraplar", + items: [ + { + name: "Kırmızı Şarap Kadeh", + description: "Özenle seçilmiş ev kırmızı şarabı, kadeh olarak servis edilir — zengin, dolgun gövdeli ve pürüzsüz.", + price: "314 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Beyaz Şarap Kadeh", + description: "Özenle seçilmiş ev beyaz şarabı, kadeh olarak servis edilir — çıtır, hafif ve ferahlatıcı.", + price: "258 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Rose Şarap Kadeh", + description: "Özenle seçilmiş ev rosé şarabı, kadeh olarak servis edilir — taze, meyveli ve mükemmel dengeli.", + price: "380 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + } + ] + }, + { + id: "cerezler", + title: "Çerezler", + items: [ + { + name: "Antep Fıstığı", + description: "Gaziantep'in kaliteli, zengin ve lezzetli kavrulmuş Antep fıstığı.", + price: "318 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Badem", + description: "Hafifçe kavrulmuş badem — çıtır, besleyici ve doyurucu.", + price: "385 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Fındık", + description: "Kavrulmuş Türk fındığı — Karadeniz bölgesinin en iyisi, zengin aromalı ve doğal tatlılıkta.", + price: "244 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Karnaval", + description: "Karnaval — içeceklerin yanında paylaşmak için ideal, karışık atıştırmalık çerez seçkisi.", + price: "273 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Sarı Leblebi", + description: "Sarı leblebi — kavrulmuş ve çıtır, sevilen geleneksel Türk atıştırmalığı.", + price: "172 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Tuzlu Fıstık", + description: "Klasik kavrulmuş tuzlu fıstık — çıtır, mükemmel baharatlı ve soğuk içecekle mükemmel uyum.", + price: "213 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + } + ] + }, + { + id: "alkolsuz-i̇cecekler", + title: "Alkolsüz İçecekler", + items: [ + { + name: "Kola", + description: "Soğuk servis edilen klasik kola.", + price: "239 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Fanta", + description: "Narenciye aromasıyla dolu, meyveli ve köpüklü Fanta portakal, soğuk servis edilir.", + price: "150 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Sprite", + description: "Limon-misket limonu aromasıyla çıtır ve ferah, köpüklü Sprite.", + price: "430 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Ice Tea (Limon / Şeftali / Mango)", + description: "Limon, şeftali veya mango seçeneğiyle sunulan ferah ice tea.", + price: "344 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Churcill", + description: "Churchill premium köpüklü maden suyu — ince kabarcıklar, temiz tat ve mükemmel serinleticilik.", + price: "308 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Uudağ Premium Soda", + description: "Uludağ Premium Soda — çıtır ve temiz bir tada sahip, Türkiye'nin sevilen köpüklü içeceği.", + price: "231 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Su 0.33cl (Uludağ Cam Şişe)", + description: "Şık Uludağ cam şişesinde servis edilen 0.33cl maden suyu.", + price: "273 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Jobi Sıkma Portakal", + description: "Jobi taze sıkma portakal suyu — %100 doğal, canlı ve vitamin dolu.", + price: "174 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Jobi Sıkma Nar Suyu", + description: "Jobi taze sıkma nar suyu — antioksidan açısından zengin, derin ve doğal tatlılıkta.", + price: "191 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Jobi Sıkma Mandalina Suyu", + description: "Jobi taze sıkma mandalina suyu — parlak ve taze aromasıyla doğal tatlılıkta narenciye suyu.", + price: "257 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Cool Lime", + description: "Çıtır, narenciyeli ve ferahlatan misket limonlu köpüklü içecek.", + price: "203 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Strawberry & Hibiscus", + description: "Tatlı çilekle hibiskusun çiçeksi ekşiliğini birleştiren, meyveli ve çiçeksi köpüklü içecek.", + price: "381 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Limonata", + description: "Tatlı ve ekşinin mükemmel dengesinde, taze yapılmış limonata.", + price: "358 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Red Bull Energy Drink", + description: "Red Bull Enerji İçeceği — taurin, kafein ve B vitaminleriyle orijinal enerji içeceği.", + price: "379 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Red Bull Sugarfree", + description: "Red Bull Şekersiz — aynı enerji, şekersiz ve daha hafif seçenek.", + price: "268 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Red Bull Blue Edition", + description: "Red Bull Blue Edition — yaban mersini aromasıyla Red Bull enerjisi.", + price: "288 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Red Bull Pink Edition", + description: "Red Bull Pink Edition — çilek ve yaban mersini aromasıyla Red Bull enerjisi.", + price: "166 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Red Bull White Edition", + description: "Red Bull White Edition — hindistan cevizi ve zencefil aromasıyla Red Bull enerjisi.", + price: "403 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + } + ] + }, + { + id: "sicak-kahveler", + title: "Sıcak Kahveler", + items: [ + { + name: "Espresso Single", + description: "Yoğun ve konsantre, tek shot espresso — güçlü, pürüzsüz ve bol aromali.", + price: "339 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Espresso Double", + description: "Daha güçlü yoğunluğuyla derin ve pürüzsüz bir bitiş sunan çift shot espresso.", + price: "399 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Americano", + description: "Sıcak su ile seyreltilmiş espresso — pürüzsüz, dolgun gövdeli ve mükemmel dengeli.", + price: "262 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Cortado", + description: "Eşit miktarda ılık buharda pişirilmiş sütle yumuşatılmış espresso — pürüzsüz, zengin ve dengeli.", + price: "391 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Flat White", + description: "Çift ristretto üzerine ipeksi buharda pişirilmiş süt — yoğun kahve aroması ve kremsi bitiş.", + price: "286 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Cappucino", + description: "Klasik cappucino — eşit oranda buharda pişirilmiş süt ve yoğun köpükle servis edilen espresso.", + price: "369 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Cafe Latte", + description: "Bol buharda pişirilmiş süt ve ince köpük tabakasıyla espresso — pürüzsüz, kremsi ve rahatlatıcı.", + price: "228 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Matcha Latte", + description: "Premium seremoni kalitesinde matcha, pürüzsüz bir macun haline getirilip kadifemsi buharda sütle kar ...", + price: "217 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Mocha", + description: "Zengin çikolata sosu ve buharda pişirilmiş sütle espresso — bol, tatlı ve derin bir lezzet.", + price: "156 ₺", + image: "https://images.unsplash.com/photo-1482049016688-2d3e1b311543?w=800&q=80" + }, + { + name: "Sıcak Çikolata", + description: "Zengin kakao ile hazırlanan premium sıcak çikolata — yoğun, kadifemsi ve rahatlatıcı.", + price: "158 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Türk Kahvesi", + description: "Ince öğütülmüş ve bakır cezvede pişirilen geleneksel Türk kahvesi — zengin, aromatik ve tarihe dolu.", + price: "175 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Filter Kahve", + description: "Yavaş demlenmiş filtre kahve — temiz, parlak ve nüanslı aroma notalarıyla dolu.", + price: "372 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + } + ] + }, + { + id: "soguk-kahveler", + title: "Soğuk Kahveler", + items: [ + { + name: "Cold Brew", + description: "12 saatten fazla soğuk suda demlenen cold brew — son derece pürüzsüz, düşük asitli ve doğal tatlılık ...", + price: "245 ₺", + image: "https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800&q=80" + }, + { + name: "Iced Americano", + description: "Buz üzerine dökülmüş çift espresso, soğuk su ile tamamlanır — ferahlatıcı, güçlü ve pürüzsüz.", + price: "407 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Iced Latte", + description: "Buz üzerine dökülmüş espresso ve soğuk süt — pürüzsüz, kremsi ve ferahlatıcı serinlikte.", + price: "366 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Freddo Espresso", + description: "Yunan usulü freddo espresso — çift espresso çalkalanarak kremsi köpük elde edilir ve buz üzerinde se ...", + price: "402 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Freddo Cappucino", + description: "Yunan usulü freddo cappucino — buz espresso üzerine soğuk, yoğun köpüklü süt ile servis edilir.", + price: "227 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Freddo Flat White", + description: "Yunan usulü freddo flat white — çift ristretto üzerine ipeksi soğuk süt köpüğü ile yoğun kahve deney ...", + price: "240 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + }, + { + name: "Iced Chocolate Mocha", + description: "Espresso, çikolata sosu, buz ve soğuk süt ile birleştirilir — zengin ve lezzetli soğuk kahve keyfi.", + price: "154 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Iced Chocolate", + description: "Zengin çikolata, soğuk sütle harmanlanıp buz üzerine dökülür — ferahlatıcı ve lezzetli çikolata keyf ...", + price: "281 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + }, + { + name: "Iced Matcha Latte", + description: "Premium seremoni kalitesinde matcha, soğuk sütle karıştırılıp buz üzerine dökülür — toprak aroması, ...", + price: "234 ₺", + image: "https://images.unsplash.com/photo-1567620905732-2d1ec7ab7445?w=800&q=80" + } + ] + }, + { + id: "ekstralar", + title: "Ekstralar", + items: [ + { + name: "Ekstra", + description: "(Karamel / Vanilya / Çilek / Çikolata)", + price: "163 ₺", + image: "https://images.unsplash.com/photo-1565299624946-b28f40a0ae38?w=800&q=80" + }, + { + name: "Vegan Yulaf Sütü Ekstrası", + description: "Bitkisel yulaf sütü ile içeceğinizi yükseltin — kremsi, vegan dostu ve lezzetli.", + price: "205 ₺", + image: "https://images.unsplash.com/photo-1546069901-ba9599a7e63c?w=800&q=80" + } + ] + } +]; diff --git a/docs/prd.md b/docs/prd.md new file mode 100644 index 0000000..9642755 --- /dev/null +++ b/docs/prd.md @@ -0,0 +1,45 @@ +# Moy Beach Akyaka — QR Dijital Menü Yenileme Prompt'u + +## Proje Tanımı + +**URL:** menu.moybeachakyaka.com +**Tip:** QR kod ile masadan erişilen tek sayfalık dijital menü +**Dil:** Türkçe + İngilizce +**Kullanıcı:** Masada oturan misafir, telefonuyla QR okutarak erişiyor + +Mevcut QR menü sitesini kullanım kolaylığı, görsel kalite ve marka tutarlılığı +açısından yenile. Site bir e-ticaret ya da rezervasyon platformu değil; +**sadece menüyü hızlı ve rahat gösteren bir dijital liste.** + +--- + +## Mevcut Sorunlar + +**Navigasyon** +- Kategori yok, kullanıcı sayfayı sonuna kadar kaydırmak zorunda +- Telefonda çok uzun bir scroll deneyimi oluşuyor + +**Görsel** +- Hiçbir üründe fotoğraf yok, hepsi aynı generik çatal-kaşık ikonu gösteriyor +- Ürünler birbirinden görsel olarak ayrışmıyor + +**İçerik Tutarsızlıkları** +- Bazı ürün açıklamaları İngilizce kalmış + (örn. Roka Salatası: *"Pink Tomatoes, Arugula, Parmesan and Balsamic Glaze"*) +- Şişe içeceklerin tamamında fiyat **₺0,00** görünüyor +- Stella Artois birasının açıklaması hiç yok + +**Mobil Deneyim** +- 3'lü grid layout dar telefonlarda okunaksız hale geliyor +- Ürün adları ve açıklamalar kırpılıyor (`...` ile bitiyor), tam metin görülemiyor + +--- + +## İstenen İyileştirmeler + +### 1. Kategori Navigasyonu + +Sayfanın üstüne sabit (sticky) yatay kaydırılabilir bir kategori çubuğu ekle. +Tıklandığında ilgili bölüme smooth scroll ile git. + +Kategoriler (mevcut sırayla): \ No newline at end of file diff --git a/next.config.ts b/next.config.ts index e9ffa30..df8e604 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,8 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { - /* config options here */ + output: "standalone", + /* other config options here */ }; export default nextConfig; diff --git a/package-lock.json b/package-lock.json index cc38e0e..c959555 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,8 @@ "name": "moy-qr", "version": "0.1.0", "dependencies": { + "framer-motion": "^12.40.0", + "lucide-react": "^1.17.0", "next": "16.2.7", "react": "19.2.4", "react-dom": "19.2.4" @@ -3762,6 +3764,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/framer-motion": { + "version": "12.40.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.40.0.tgz", + "integrity": "sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.40.0", + "motion-utils": "^12.39.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -5032,6 +5061,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.17.0.tgz", + "integrity": "sha512-9FA9evdox/JQL5PT57fdA1x/yg8T7knJ98+zjTL3UfKza6pflQUUh3XtaQIHKvnsJw1lmsEyHVlt5jchYxOQ5w==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -5099,6 +5137,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/motion-dom": { + "version": "12.40.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.40.0.tgz", + "integrity": "sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.39.0" + } + }, + "node_modules/motion-utils": { + "version": "12.39.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz", + "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/package.json b/package.json index 8fcfa88..afc50bc 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,8 @@ "lint": "eslint" }, "dependencies": { + "framer-motion": "^12.40.0", + "lucide-react": "^1.17.0", "next": "16.2.7", "react": "19.2.4", "react-dom": "19.2.4" diff --git a/public/header-bg.jpg b/public/header-bg.jpg new file mode 100644 index 0000000..ddd3b1f Binary files /dev/null and b/public/header-bg.jpg differ