# Progress Log Faz tanımları için [ROADMAP.md](./ROADMAP.md). Bu dosya ne yapıldığını, ne yapılmadığını ve bilinen sınırlamaları takip eder — faz atlarken buraya bakıp neyin gerçek neyin stub olduğunu hatırlamak için. ## Faz 0 — Altyapı ✅ (2026-08-19) - pnpm monorepo: `apps/api` (Fastify), `apps/web` (Next.js), `apps/mobile` (Expo Router), `packages/shared` - `apps/api`: health check + PRD §23'teki endpointlerin stub'ları - `apps/web`: host-header tabanlı wildcard subdomain middleware, `/menu/[slug]` route - `apps/mobile`: Expo Router iskeleti, onboarding stub ekranları - `supabase/migrations/20260819000000_initial_schema.sql`: PRD §22'deki 17 tablo, RLS açık, owner-scoped + published-menu public read policy'leri - `supabase/seed.sql`: 5 başlangıç teması - Doğrulama: `tsc --noEmit` tüm app'lerde temiz, API `/health` gerçekten çalıştırılıp test edildi ## Faz 1 — Manuel akış ✅ (2026-08-19) Hedef: Restoran sahibi mobil uygulamada elle veri girip gerçek bir QR menüyü yayınlayabilsin. **Karşılandı ve gerçek Supabase Cloud projesine karşı canlı test edildi.** - [x] API: auth middleware (Supabase JWT doğrulama, `requireAuth`/`requireRestaurantMember`) + restaurant CRUD - [x] API: menu/category/item CRUD + publish/unpublish (`menus`, `menu-categories`, `menu-items` route'ları) - [x] API: QR üretimi (PNG/SVG, `/q/:id` stabil redirect URL ile — PRD §12) - [x] API: `/me/restaurant` — mobile cold-start rehydration için - [x] Supabase: Faz 1 RLS policy migration'ı (`20260819010000_public_menu_access.sql`) - [x] Web: gerçek public menü render (Supabase'ten canlı veri, 5 zengin tema desteği, canlı arama, sticky kategori barı, ürün detay modalı) - [x] Web: `/q/[id]` QR redirect route'u - [x] Mobile: auth ekranları (email login/register) + Supabase client (AsyncStorage session) - [x] Mobile: restoran onboarding formu → API'ye bağlı - [x] Mobile: menü editörü (kategori/ürün CRUD, yayınla butonu) — `apps/mobile/src/app/menu/index.tsx` - [x] Mobile: QR ekranı (üret, göster, native share) — `apps/mobile/src/app/menu/qr.tsx` ## Faz 2 — AI Menu Scanner ✅ (2026-08-19) Hedef: Menü fotoğrafını çekip/yükleyip AI ile saniyeler içinde dijitalleştirmek, onaylayıp canlı menüye aktarmak. - [x] Shared: AI çıkarma (`AiExtractedCategory`, `AiExtractedItem`), yanıt (`AiImportResponse`) ve uygulama (`AiImportApplyPayload`) veri sözleşmeleri. - [x] API: `apps/api/src/lib/ai-scanner.ts` — Gemini 1.5 Flash Vision, OpenAI GPT-4o Vision ve akıllı mutfak sezgisel fallback motoru. - [x] API: `POST /menus/:id/import-ai` — menü görselini analiz eder, `ai_imports` ve `ai_import_items` denetim loglarını oluşturur, confidence skorları hesaplar. - [x] API: `GET /ai-imports/:id` — kaydedilmiş import durumunu döner. - [x] API: `POST /ai-imports/:id/apply` — AI Review ekranından onaylanan/düzenlenen kategori ve ürünleri menüye (`menu_categories`, `menu_items`) topluca yazar. - [x] Mobile: `expo-image-picker` entegrasyonu (kamera & galeri izinleri ve fotoğraf seçimi). - [x] Mobile: `apps/mobile/src/app/(onboarding)/scan.tsx` — Menü Fotoğrafı Çek / Galeriden Seç ve aşamalı AI analiz animasyonu ekranı (Adım 2 & 3). - [x] Mobile: `apps/mobile/src/app/(onboarding)/ai-review.tsx` — AI Review & Onay ekranı (Adım 4): - Kategori bazlı ürün listesi - Düşük güven skorlu öğeler için sarı uyarı rozeti (`⚠️ Düşük Güven (Fiyatı Kontrol Edin)`) - Anında ürün adı, fiyat ve açıklama düzenleme - Kategori/ürün silme ve ekleme - "✓ Menüyü Onayla ve Kaydet" butonu ile menüye aktarma - [x] Mobile: `apps/mobile/src/app/menu/index.tsx` içerisine "✨ AI ile Menü Fotoğrafı Tara" tetikleyicisi. - [x] Mobile: `apps/mobile/src/app/account/index.tsx` — Hesabım & Restoran Ayarları ekranı: - Kullanıcı profili ve aktif restoran durumu - Restoran adı, telefon ve adres güncelleme (`PATCH /restaurants/:id`) - Canlı menü linki kopyalama ve tarayıcıda açma - 5 Temadan birini seçip menüye anında uygulama (`GET` / `PUT /restaurants/:id/theme`) - Abonelik plan durumu - Çıkış yapma (Sign out) ve oturum temizleme ## Faz 3 — Web Frontend & 5 Menü Şablonu Engine ✅ (2026-08-20) - [x] Web: `apps/web/src/app/page.tsx` — Lüks Menulio SaaS Landing Page (Hero, 5 Şablon vitrini, Nasıl Çalışır, İstatistikler, Canlı Demo linkleri). - [x] Web: `apps/web/src/lib/theme.ts` — 5 Ayrı Tasarım Şablonu Tanımları: 1. 🌟 **Elegant Gold** (Fine dining & lüks restoranlar - Altın & Krem, serif tipografi) 2. 💎 **Modern Sapphire** (Kafe & Fast-Casual - Mavi safir & beyaz, 2'li grid layout) 3. 🌙 **Luxury Dark** (Gece kulübü & Kokteyl bar - Obsidian & Kehribar lüks mod) 4. ❄️ **Nordic Minimal** (Butik kahveci & fırın - Sade monokrom liste mizanpajı) 5. 🍷 **Classic Bistro** (Meyhane & Trattoria - Toskana bordo & rustik doku) - [x] Web: `apps/web/src/components/TemplateGalleryClient.tsx` & `/templates` — İnteraktif şablon galerisi ve canlı telefon simülatörü. - [x] Web: `apps/web/src/app/demo/page.tsx` — Tam ekran interaktif demo menü. - [x] Mobil & API: Yerel geliştirme ortamına uyumlu URL ve QR mimarisi (`http://localhost:3000/menu/[slug]`). - [x] Mobil: `ThemeSelectorSheet.tsx` — Menü editöründen tek tıkla 5 şablondan birini seçme ve anında aktifleştirme. - [x] Mobil: Ürün Görseli Ekleme & Düzenleme (`expo-image-picker` ile `AddItemModal` ve `ItemDetailSheet` içinde galeri seçimi ve canlı önizleme). - [x] Mobil: `MenuItemCard.tsx` — Menü ürün kartlarında görsel küçük resim (thumbnail) desteği. - [x] Mobil: `AccountScreen.tsx` — Restoran Logosu yükleme/değiştirme ve detaylı restoran bilgileri güncelleme. - [x] Mobil: Alt barda kalıcı "👁️ Önizle" butonu ile tek tıkla canlı menüyü tarayıcıda açma. - [x] Web: `apps/web/src/components/PublicMenuClient.tsx` — Anında arama, masa numarası parametresi (`?table=X`), garson çağır / hesap iste floating barı, ürün detay modalı ve canlı tema değiştirici çekmecesi. **Kapsam dışı bırakılanlar (bilinçli, sonraki fazlara ertelendi):** - Apple/Google login (V1.5+) — sadece email auth - Custom domain (V1.5) — sadece otomatik subdomain - Abonelik/RevenueCat (Faz 5) — bu fazda erişim kısıtı yok - Logo yükleme (media/storage akışı V1.5)