Next.js 16 App Router, TR/EN i18n via [lang] routing and proxy.ts, Tailwind v4, minimal list menu style, sticky bottom tab bar with Intersection Observer, PWA manifest, WhatsApp fixed button. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
254 lines
7.4 KiB
TypeScript
254 lines
7.4 KiB
TypeScript
export type LocalizedString = { tr: string; en: string }
|
||
|
||
export type MenuItem = {
|
||
id: string
|
||
emoji: string
|
||
name: LocalizedString
|
||
description: LocalizedString
|
||
price: number
|
||
highlight?: boolean
|
||
}
|
||
|
||
export type Category = {
|
||
id: string
|
||
emoji: string
|
||
label: LocalizedString
|
||
items: MenuItem[]
|
||
}
|
||
|
||
export const WHATSAPP_NUMBER = '905XXXXXXXXXX'
|
||
|
||
export const categories: Category[] = [
|
||
{
|
||
id: 'starters',
|
||
emoji: '🥗',
|
||
label: { tr: 'Başlangıçlar', en: 'Starters' },
|
||
items: [
|
||
{
|
||
id: 's1',
|
||
emoji: '🥗',
|
||
name: { tr: 'Akdeniz Salatası', en: 'Mediterranean Salad' },
|
||
description: { tr: 'Domates, salatalık, zeytin, hellim peyniri', en: 'Tomato, cucumber, olives, halloumi' },
|
||
price: 120,
|
||
},
|
||
{
|
||
id: 's2',
|
||
emoji: '🧀',
|
||
name: { tr: 'Hellim Izgara', en: 'Grilled Halloumi' },
|
||
description: { tr: 'Zeytinyağı, taze nane, limon', en: 'Olive oil, fresh mint, lemon' },
|
||
price: 95,
|
||
},
|
||
{
|
||
id: 's3',
|
||
emoji: '🫙',
|
||
name: { tr: 'Zeytinyağlı Meze Tabağı', en: 'Meze Platter' },
|
||
description: { tr: 'Günlük hazır mezelerin seçimi', en: 'Daily selection of mezze' },
|
||
price: 145,
|
||
},
|
||
{
|
||
id: 's4',
|
||
emoji: '🍆',
|
||
name: { tr: 'Patlıcan Ezmesi', en: 'Smoked Eggplant Dip' },
|
||
description: { tr: 'Közlenmiş patlıcan, sarımsak, zeytinyağı', en: 'Roasted eggplant, garlic, olive oil' },
|
||
price: 85,
|
||
},
|
||
],
|
||
},
|
||
{
|
||
id: 'mains',
|
||
emoji: '🍽️',
|
||
label: { tr: 'Ana Yemekler', en: 'Main Courses' },
|
||
items: [
|
||
{
|
||
id: 'm1',
|
||
emoji: '🐟',
|
||
name: { tr: 'Balık Izgara', en: 'Grilled Fish' },
|
||
description: { tr: 'Günlük taze balık, sebze garnitürü', en: 'Daily fresh catch, vegetable garnish' },
|
||
price: 285,
|
||
},
|
||
{
|
||
id: 'm2',
|
||
emoji: '🐠',
|
||
name: { tr: 'Levrek Buğulama', en: 'Steamed Sea Bass' },
|
||
description: { tr: 'Sebzeli buğulama, zeytinyağlı sos', en: 'Steamed with vegetables, olive oil sauce' },
|
||
price: 295,
|
||
},
|
||
{
|
||
id: 'm3',
|
||
emoji: '🐙',
|
||
name: { tr: 'Ahtapot Izgara', en: 'Grilled Octopus' },
|
||
description: { tr: 'Kekikli marinad, kapari sosu', en: 'Thyme marinade, caper sauce' },
|
||
price: 320,
|
||
},
|
||
{
|
||
id: 'm4',
|
||
emoji: '🍢',
|
||
name: { tr: 'Tavuk Şiş', en: 'Chicken Skewers' },
|
||
description: { tr: 'Baharatlı tavuk, közlenmiş biber', en: 'Spiced chicken, roasted peppers' },
|
||
price: 175,
|
||
},
|
||
{
|
||
id: 'm5',
|
||
emoji: '🥘',
|
||
name: { tr: 'Vegetaryen Güveç', en: 'Vegetarian Stew' },
|
||
description: { tr: 'Mevsim sebzeler, nohut, domates sos', en: 'Seasonal vegetables, chickpeas, tomato sauce' },
|
||
price: 155,
|
||
},
|
||
],
|
||
},
|
||
{
|
||
id: 'pizzas',
|
||
emoji: '🍕',
|
||
label: { tr: 'Pizzalar', en: 'Pizzas' },
|
||
items: [
|
||
{
|
||
id: 'p1',
|
||
emoji: '🍕',
|
||
name: { tr: 'Margherita', en: 'Margherita' },
|
||
description: { tr: 'San marzano domates, bufala mozarella, fesleğen', en: 'San marzano tomatoes, buffalo mozzarella, basil' },
|
||
price: 165,
|
||
},
|
||
{
|
||
id: 'p2',
|
||
emoji: '🍕',
|
||
name: { tr: 'Karışık Pizza', en: 'Mixed Pizza' },
|
||
description: { tr: 'Salam, mantar, biber, mozarella', en: 'Salami, mushroom, pepper, mozzarella' },
|
||
price: 185,
|
||
},
|
||
{
|
||
id: 'p3',
|
||
emoji: '🦐',
|
||
name: { tr: 'Deniz Ürünleri', en: 'Seafood Pizza' },
|
||
description: { tr: 'Karides, kalamar, fesleğen sosu', en: 'Shrimp, calamari, basil sauce' },
|
||
price: 215,
|
||
},
|
||
{
|
||
id: 'p4',
|
||
emoji: '🌿',
|
||
name: { tr: 'Fıstık Pesto', en: 'Pesto Pizza' },
|
||
description: { tr: 'Fıstıklı pesto, roka, parmesan', en: 'Pistachio pesto, rocket, parmesan' },
|
||
price: 175,
|
||
},
|
||
],
|
||
},
|
||
{
|
||
id: 'mezze',
|
||
emoji: '🫒',
|
||
label: { tr: 'Mezeler', en: 'Mezze' },
|
||
items: [
|
||
{
|
||
id: 'mz1',
|
||
emoji: '🐟',
|
||
name: { tr: 'Tarama', en: 'Tarama' },
|
||
description: { tr: 'Balık yumurtası ezmesi, taze limon', en: 'Fish roe spread, fresh lemon' },
|
||
price: 75,
|
||
},
|
||
{
|
||
id: 'mz2',
|
||
emoji: '🧄',
|
||
name: { tr: 'Haydari', en: 'Haydari' },
|
||
description: { tr: 'Yoğurt, sarımsak, dereotu', en: 'Yogurt, garlic, dill' },
|
||
price: 65,
|
||
},
|
||
{
|
||
id: 'mz3',
|
||
emoji: '🥐',
|
||
name: { tr: 'Sigara Böreği', en: 'Cheese Pastry Rolls' },
|
||
description: { tr: 'Peynirli, 5 adet', en: 'Cheese-filled, 5 pieces' },
|
||
price: 85,
|
||
},
|
||
{
|
||
id: 'mz4',
|
||
emoji: '🐚',
|
||
name: { tr: 'Midye Tava', en: 'Fried Mussels' },
|
||
description: { tr: 'Tarator sos ile servis', en: 'Served with tarator sauce' },
|
||
price: 95,
|
||
},
|
||
{
|
||
id: 'mz5',
|
||
emoji: '🍤',
|
||
name: { tr: 'Karides Güveç', en: 'Shrimp Casserole' },
|
||
description: { tr: 'Domates sos, baharatlar, fırında', en: 'Tomato sauce, spices, oven-baked' },
|
||
price: 135,
|
||
},
|
||
],
|
||
},
|
||
{
|
||
id: 'drinks',
|
||
emoji: '🍹',
|
||
label: { tr: 'İçecekler', en: 'Drinks' },
|
||
items: [
|
||
{
|
||
id: 'd1',
|
||
emoji: '🍸',
|
||
name: { tr: 'Mojito', en: 'Mojito' },
|
||
description: { tr: 'Nane, lime, soda, rum', en: 'Mint, lime, soda, rum' },
|
||
price: 95,
|
||
},
|
||
{
|
||
id: 'd2',
|
||
emoji: '🍊',
|
||
name: { tr: 'Aperol Spritz', en: 'Aperol Spritz' },
|
||
description: { tr: 'Aperol, prosecco, portakal dilimi', en: 'Aperol, prosecco, orange slice' },
|
||
price: 115,
|
||
},
|
||
{
|
||
id: 'd3',
|
||
emoji: '🍋',
|
||
name: { tr: 'Limonata', en: 'Lemonade' },
|
||
description: { tr: 'Taze sıkılmış, nane seçeneği ile', en: 'Freshly squeezed, optional mint' },
|
||
price: 55,
|
||
},
|
||
{
|
||
id: 'd4',
|
||
emoji: '🥛',
|
||
name: { tr: 'Ayran', en: 'Ayran' },
|
||
description: { tr: 'Ev yapımı, taze çırpılmış', en: 'Homemade, freshly churned' },
|
||
price: 35,
|
||
},
|
||
{
|
||
id: 'd5',
|
||
emoji: '🍵',
|
||
name: { tr: 'Soğuk Çay', en: 'Iced Tea' },
|
||
description: { tr: 'Şeftali veya limon aromalı', en: 'Peach or lemon flavored' },
|
||
price: 45,
|
||
},
|
||
],
|
||
},
|
||
{
|
||
id: 'desserts',
|
||
emoji: '🍮',
|
||
label: { tr: 'Tatlılar', en: 'Desserts' },
|
||
items: [
|
||
{
|
||
id: 'dt1',
|
||
emoji: '🍨',
|
||
name: { tr: 'Dondurma', en: 'Ice Cream' },
|
||
description: { tr: '3 top, günlük seçim', en: '3 scoops, daily selection' },
|
||
price: 85,
|
||
},
|
||
{
|
||
id: 'dt2',
|
||
emoji: '🥮',
|
||
name: { tr: 'Baklava', en: 'Baklava' },
|
||
description: { tr: 'Antep fıstıklı, kaymak ile', en: 'Pistachio, with clotted cream' },
|
||
price: 75,
|
||
},
|
||
{
|
||
id: 'dt3',
|
||
emoji: '🍮',
|
||
name: { tr: 'Panna Cotta', en: 'Panna Cotta' },
|
||
description: { tr: 'Çilek sosu, taze nane', en: 'Strawberry sauce, fresh mint' },
|
||
price: 95,
|
||
},
|
||
{
|
||
id: 'dt4',
|
||
emoji: '🥞',
|
||
name: { tr: 'Akıtma', en: 'Akıtma' },
|
||
description: { tr: 'Geleneksel, nar ekşisi ile', en: 'Traditional, with pomegranate molasses' },
|
||
price: 65,
|
||
},
|
||
],
|
||
},
|
||
]
|