# AI QR Menü SaaS — PRD ## 1. Ürün Özeti ### Ürün Tanımı Restoranların fiziksel menülerini yalnızca telefon kamerasıyla çekerek birkaç dakika içinde profesyonel bir dijital QR menüye dönüştüren, tamamen mobil yönetilen, abonelik tabanlı SaaS. ### Ana Değer Önerisi > Menünün fotoğrafını çek. AI ile dijitalleştir. Tasarımını seç. QR kodunu yayınla. ### Temel Akış Restoran sahibi ↓ Mobil uygulama ↓ Menü fotoğrafı çek / yükle ↓ AI menüyü analiz eder ↓ Ürünler + kategoriler + fiyatlar ↓ Restoran sonucu kontrol eder ↓ Template seçer ↓ Menü yayınlanır ↓ Otomatik subdomain ↓ QR kod ↓ Müşteri mobil web menüsünü açar --- # 2. Ürün Felsefesi ## Mobile-only yönetim Restoran sahibi için web admin paneli bulunmayacak. ### Mobil uygulama Tüm yönetim işlemleri: - Restoran bilgileri - Menü - Ürünler - Kategoriler - AI import - Tasarım - QR - Domain - Analytics - Abonelik - Hesap - Bildirimler mobil uygulamadan yapılacak. ### Web Web yalnızca müşterinin menüyü görüntülediği public katman olacak. ```text MOBILE APP ↓ RESTORAN YÖNETİMİ PUBLIC WEB ↓ MÜŞTERİ MENÜSÜ Admin web paneli V1 kapsamında yoktur. 3. Kullanıcı Tipleri 3.1 Restaurant Owner Sistemin ana kullanıcısıdır. Yapabilecekleri: Hesap oluşturma Restoran oluşturma Menü oluşturma Menü fotoğrafı yükleme AI ile menü çıkarma Ürün düzenleme Kategori yönetimi Tasarım seçme Menü yayınlama QR oluşturma Domain bağlama Analytics görüntüleme Abonelik yönetme 3.2 Customer Müşteri hesap oluşturmaz. Yapabilecekleri: QR okutma Menü görüntüleme Kategoriler arasında gezinme Ürün detaylarını görüntüleme Dil değiştirme 4. Onboarding Onboarding mümkün olduğunca kısa tutulmalıdır. Hedef: Kullanıcının kayıt olduktan sonra ilk menüsünü yaklaşık 2–3 dakika içerisinde yayınlaması. Step 1 — Restoran Alanlar: Restoran adı Logo Opsiyonel telefon Opsiyonel adres Step 2 — Menü Ekleme Seçenekler: Fotoğraf çek Galeriden seç Manuel oluştur Ana CTA: Menü Fotoğrafı Çek Step 3 — AI Analizi Durum ekranı: Menünüz analiz ediliyor... ✓ Fotoğraf okunuyor ✓ Kategoriler bulunuyor ✓ Ürünler bulunuyor ✓ Fiyatlar algılanıyor ✓ Menü düzenleniyor Step 4 — AI Review Örnek: 34 ürün bulundu Çorbalar ✓ Mercimek Çorbası — 120 TL ✓ Ezogelin Çorbası — 130 TL Kebaplar ✓ Adana Kebap — 320 TL ✓ Urfa Kebap — 320 TL [ Menüyü İncele ] AI sonucu hiçbir zaman doğrudan yayınlanmamalıdır. Kullanıcı sonucu kontrol edip değiştirebilmelidir. Step 5 — Template Örnek temalar: Elegant Modern Minimal Dark Classic Step 6 — Yayın Menünüz hazır 🎉 kebapci-ahmet.example.com [ Menüyü Gör ] [ QR Kodunu Al ] 5. AI Menu Scanner Ürünün temel farklılaştırıcı özelliğidir. Girdi V1: JPEG PNG HEIC Birden fazla fotoğraf V2: PDF Daha gelişmiş doküman import Çok sayfalı menü Çıktı Category ├── name ├── description └── items ├── name ├── description ├── price └── confidence Confidence Her AI çıktısı güven skoru taşıyabilir. Örnek: Mercimek Çorbası 120 TL Confidence: 98% Düşük güven durumunda: ⚠ Fiyatı kontrol edin gösterilebilir. AI Import Kaydı Her import işlemi kayıt altına alınmalıdır. ai_import ├── source_image ├── status ├── model ├── raw_response ├── processed_at └── error Bu yapı hata analizi ve ileride model değişimi için önemlidir. 6. Menü Yönetimi Menü Restoranın yayınlanan dijital menüsüdür. Kategori Örnek: Çorbalar Başlangıçlar Kebaplar Pizzalar Tatlılar İçecekler Ürün Alanlar: Ad Açıklama Fiyat Görsel Sıra Aktif/pasif Kategori Ürün Opsiyonları Basit seçenek sistemi V1'de desteklenebilir. Örnek: Adana Kebap Porsiyon ○ Yarım ○ Tam Ekstra ☐ Kaşar +50 TL ☐ Acı biber +20 TL Bu özellik V1'de yalnızca müşteriye bilgi göstermek içindir. Online sipariş sistemi değildir. 7. Menü Editörü Mobil kullanım için optimize edilmelidir. Örnek yapı: Menüm Çorbalar Mercimek Ezogelin Kebaplar Adana Urfa Tatlılar Künefe Desteklenen işlemler: Ürün ekle Ürün düzenle Ürün sil Ürün sıralama Kategori ekle Kategori düzenle Kategori sıralama Ürün gizleme Kategori gizleme Drag & drop mümkünse kullanılmalıdır. 8. Theme / Template Engine Template sistemi veri ile sunum katmanını birbirinden ayırmalıdır. Menu Data ↓ Theme Engine ↓ Public Menu Örnek tema konfigürasyonu: { "theme": "premium-dark", "primaryColor": "#C8A96B", "background": "#111111", "productLayout": "card", "categoryLayout": "accordion" } Tema değiştirildiğinde Menü verisi değişmez. Sadece presentation layer değişir. Bu mimari ileride yeni template eklemeyi kolaylaştırır. 9. Public Menu Müşteri QR kodu okuttuğunda hızlı açılan mobil web menüsü görüntülenir. Örnek: https://kebapci-ahmet.example.com Özellikler: Mobile-first Çok hızlı açılış Responsive Kategori navigasyonu Ürün detayları Görseller Dil desteği Restoran logosu Tema Basic SEO metadata Performans Public menü kritik olduğu için: Next.js Cloudflare CDN Cache Optimized images kullanılmalıdır. Menü verisi değişmediği sürece agresif cache uygulanabilir. 10. Otomatik Domain Restoran oluşturulduğunda otomatik subdomain atanır. Örnek: kebapci-ahmet.example.com Slug kuralları: lowercase Türkçe karakterlerin normalize edilmesi boşlukların - olması benzersiz olması güvenli karakter seti 11. Custom Domain Restoran kendi domainini bağlayabilir. Örnek: menu.kebapciahmet.com Mobil uygulama: Ayarlar → Domain → Kendi domainimi kullan DNS yönlendirme talimatı gösterilir. Örneğin: Type: CNAME Name: menu Target: domains.example.com Domain doğrulandıktan sonra public menü custom domain üzerinden açılır. Cloudflare bu katmanda kullanılmalıdır. 12. QR Kod QR kod dinamik URL mantığıyla çalışmalıdır. QR içindeki adresin doğrudan restoran verisine bağımlı olmaması önerilir. QR özellikleri: PNG SVG Paylaş Kaydet Yazdırma için yüksek çözünürlük QR kod menü güncellendiğinde değişmemelidir. Domain değişikliklerinde QR'ın bozulmaması gerekir. 13. Çoklu Dil V1'de temel dil desteği bulunmalıdır. Restoran menü için: Türkçe İngilizce Almanca Arapça gibi diller ekleyebilir. AI çeviri ilerleyen aşamada desteklenebilir. Örnek: Adana Kebap ↓ Adana Kebab Çeviri her zaman restoran tarafından düzenlenebilir/onaylanabilir. 14. Abonelik Sistemi Ödeme ve abonelik yönetimi: RevenueCat üzerinden yapılacaktır. Abonelikler İlk sürümde tek ücretli paket önerilir: Pro Aylık Yıllık Örnek product ID yapısı: menu_pro_monthly menu_pro_yearly RevenueCat entitlement: pro Free Trial Örneğin: 7 gün ücretsiz deneme Deneme süresi sonrasında aktif abonelik gerekir. Fiyatlandırma pazara göre ayrıca belirlenmelidir. 15. Subscription Lifecycle Abonelik durumu: ACTIVE ↓ GRACE PERIOD ↓ SUSPENDED ↓ DELETED Abonelik sona erdiğinde restoran verisi hemen silinmemelidir. Önerilen davranış: Menü verisi korunur Restoran hesabı korunur Public menü geçici olarak kapatılabilir Yeniden ödeme yapıldığında menü tekrar aktifleşir Veri silme politikası ayrıca belirlenmelidir. 16. RevenueCat Güvenlik Yaklaşımı Mobil uygulamanın local state'i abonelik için güvenilir kaynak kabul edilmemelidir. Backend: RevenueCat entitlement webhook subscription status üzerinden aboneliği doğrulamalıdır. Örnek: Mobile App ↓ RevenueCat ↓ Webhook ↓ Backend ↓ Subscription Status 17. Analytics V1'de temel restoran analytics'i bulunmalıdır. Örnek: Bugün 84 görüntüleme Bu hafta 532 görüntüleme Bu ay 2.341 görüntüleme İleride: En çok görüntülenen ürünler En çok görüntülenen kategoriler Saatlik yoğunluk Dil kullanımı QR taramaları eklenebilir. Analytics ayrımı Ürün kullanım analitiği: PostHog Restoran menü analitiği: Uygulamanın kendi analytics sistemi olarak ayrılabilir. 18. Push Notifications Mobil uygulama olduğu için push notification sistemi kullanılabilir. Örnek: Menünüz 30 gündür güncellenmedi. Aboneliğiniz 3 gün sonra yenilenecek. Menünüz bugün 250 kez görüntülendi. Bildirimler kullanıcı tarafından kapatılabilir. 19. Hesap / Authentication Önerilen: Email Apple Google Giriş. Mobil uygulamada şifre yönetimi mümkün olduğunca azaltılmalıdır. 20. Ayarlar Mobil ayarlar: Hesabım Restoran Bilgileri Şubeler Menü Tasarım Domain QR Kod Diller Bildirimler Abonelik Faturalandırma Destek Çıkış 21. Şube Mimarisi V1'de kullanıcı deneyimi: 1 User ↓ 1 Restaurant ↓ 1 Location olabilir. Ancak DB baştan: User ↓ Restaurant ↓ Location şeklinde tasarlanmalıdır. İleride: Restaurant ├── Location 1 ├── Location 2 ├── Location 3 └── Location 4 desteklenebilir. 22. Veritabanı Production için: Supabase Cloud önerilir. Supabase'in sağladıkları: PostgreSQL Auth Storage RLS Realtime gerektiğinde Yönetim paneli Local development: Local Supabase Production: Supabase Cloud Temel tablolar users restaurants restaurant_members locations menus menu_categories menu_items menu_item_options themes restaurant_themes domains qr_codes ai_imports ai_import_items subscriptions analytics_events media 23. Backend Mimarisi Business logic doğrudan mobil uygulamaya veya Supabase client'a bırakılmamalıdır. Kendi API katmanı: Node.js Örnek endpointler: POST /restaurants GET /restaurants/:id PATCH /restaurants/:id POST /menus GET /menus/:id PATCH /menus/:id POST /menus/:id/publish POST /menus/import GET /ai-imports/:id POST /domains POST /domains/verify GET /analytics POST /subscription/webhook Bu sayede ileride Supabase değişse bile ana business logic korunabilir. 24. Production Altyapısı Coolify Coolify üzerinde: API Public Menu Worker Redis Cron / Background Jobs Monitoring çalışabilir. Supabase Cloud PostgreSQL Storage Auth Cloudflare DNS SSL CDN Caching Custom Domains WAF RevenueCat Apple subscriptions Google Play subscriptions Entitlements Subscription lifecycle 25. Önerilen Production Mimarisi INTERNET │ CLOUDFLARE │ ┌────────────┴────────────┐ │ │ PUBLIC MENU API Next.js Node.js │ │ │ ┌──────┴──────┐ │ │ │ │ SUPABASE REVENUECAT │ CLOUD │ │ │ ┌───────┴───────┐ │ │ │ │ PostgreSQL Storage │ └────────────────────────────── Coolify: Coolify ├── Next.js Public Menu ├── Node.js API ├── Worker ├── Redis └── Cron 26. V1 Scope Restaurant Mobile App Auth Register Login Apple Google Restaurant Create Edit Logo Basic information AI Camera Gallery Upload AI extraction Confidence Review Edit result Menu Categories Products Prices Descriptions Images Ordering Active/inactive Design 5 initial templates Logo Colors Preview Publishing Publish/unpublish Automatic subdomain QR Generate PNG SVG Share Domain Automatic subdomain Custom domain Subscription Free trial Monthly Yearly RevenueCat Entitlement Webhook Analytics Menu views QR scans Public Web Mobile-first Categories Products Images Themes Languages Basic SEO Fast loading 27. V1 Dışında Tutulacak Özellikler Aşağıdakiler V1 scope'una dahil değildir: Online ordering Online payment Garson çağırma Masa yönetimi POS entegrasyonu Rezervasyon Loyalty Kampanya yönetimi Stok Kasa Garson uygulaması Kitchen Display WhatsApp sipariş Bunlar gelecekte ürün ailesinin parçaları olabilir. 28. Gelecek Ürün Yol Haritası QR MENU │ ├── Online Ordering ├── Table Ordering ├── Waiter Call ├── Kitchen Display ├── Reservation ├── Loyalty ├── Campaigns ├── Reviews └── POS Integration Ancak ilk ürünün odağı: En hızlı ve en kolay dijital menü oluşturma deneyimi. olmalıdır. 29. Ana KPI En önemli KPI: Kayıt olan restoranın ilk menüsünü yayınlama oranı. Örnek funnel: 100 kayıt ↓ 80 restoran oluşturdu ↓ 70 fotoğraf yükledi ↓ 65 AI import tamamladı ↓ 60 menüyü onayladı ↓ 55 template seçti ↓ 50 QR oluşturdu ↓ 40 ödeme yaptı Özellikle şu aşamalar takip edilmelidir: Signup → Restaurant created Restaurant → Photo uploaded Photo → AI completed AI → Menu approved Menu → Published Published → QR generated Trial → Paid Monthly → Yearly Churn 30. Başarı Kriterleri V1 başarılı kabul edilir eğer: Restoran sahibi yalnızca mobil uygulama kullanarak hesap açabiliyorsa. Fiziksel menüsünün fotoğrafını çekebiliyorsa. AI menüyü otomatik olarak dijital veriye dönüştürebiliyorsa. AI sonucunu kolayca düzeltebiliyorsa. Hazır template seçebiliyorsa. Menüyü yayınlayabiliyorsa. Otomatik bir subdomain alabiliyorsa. QR kodunu oluşturup paylaşabiliyorsa. Kendi domainini bağlayabiliyorsa. Aylık veya yıllık abonelik satın alabiliyorsa. Abonelik durumu backend tarafından güvenli şekilde doğrulanıyorsa. Müşteri QR kodundan hızlı ve mobil uyumlu menüye ulaşabiliyorsa. Restoran sahibi temel görüntülenme istatistiklerini görebiliyorsa. 31. Ürün Prensipleri 1. Mobile First değil, Mobile Only Restoran yönetimi mobil uygulamadan yapılır. 2. AI yardımcıdır, karar verici değildir Her AI çıktısı düzenlenebilir ve doğrulanabilir. 3. QR kalıcıdır Menü güncellenirken QR değişmez. 4. Public menu hızlıdır Müşteri uygulama indirmez, hesap açmaz. 5. Basitlik Restoran sahibi teknik bilgiye ihtiyaç duymamalıdır. 6. Subscription-first Ürün abonelik modeli üzerine tasarlanır. 7. API-first business logic Business logic kendi backend katmanında tutulur. 8. Database bağımlılığı azaltılır Supabase kullanılır ancak uygulamanın tamamı Supabase'e bağımlı tasarlanmaz. 32. Sonraki PRD Aşamaları Bu temel PRD'den sonra aşağıdaki dokümanlar hazırlanmalıdır: Mobile UX / Screen Flow Bütün mobil ekranlar Navigation Onboarding Empty states Error states Database Schema Tüm tablolar Kolonlar Foreign keys Indexler RLS API Specification Endpointler Request/response Authentication Authorization Error handling AI Pipeline Image preprocessing OCR / Vision Structured extraction Validation Confidence Retry Human review Theme Engine Specification Component yapısı Theme schema Template rendering Preview Customization Domain Architecture Wildcard domain Custom domain DNS verification SSL Cloudflare RevenueCat Specification Products Entitlements Trial Monthly Yearly Webhooks Grace period Cancellation Refund Coolify Deployment Containers Environment variables Secrets CI/CD Backup Monitoring MVP Development Roadmap Sprint planı Öncelikler Bağımlılıklar Release planı 33. Önerilen İlk Teknik Kararlar Alan Karar Mobile Expo / React Native Public Web Next.js Backend Node.js Database Supabase PostgreSQL Storage Supabase Storage Auth Supabase Auth Local Development Local Supabase Production DB Supabase Cloud Hosting Coolify CDN / DNS Cloudflare Payments RevenueCat Analytics PostHog + custom analytics Cache / Queue Redis AI Vision/LLM tabanlı menu extraction QR Dynamic QR Domain Cloudflare Admin Web Yok Restaurant Management Mobile only 34. MVP'nin Tek Cümlelik Tanımı Restoran sahibi telefonuyla menüsünün fotoğrafını çeker, AI menüyü dijitalleştirir, restoran sahibi tasarımını seçer ve birkaç dakika içinde kendi QR menüsünü yayınlar. Bu PRD'yi **V0.1 temel ürün dokümanı** olarak kabul edebiliriz. Bir sonraki aşamada özellikle **mobil ekranları tek tek çıkarmak** çok daha değerli olacak; çünkü bu ürünün bütün başarısı restoran sahibinin “fotoğraf çek → AI → düzelt → tema → yayınla” akışının ne kadar sürtünmesiz olduğuna bağlı. şeyi hiç tartışmadık. menü webde gözükecek değil mi mobile responsive şeklinde Evet, kesinlikle webde gözükecek. Hatta bence mimarinin en önemli parçalarından biri bu. Burada ayrım şu: 📱 Restoran yönetimi → Mobile App Restoran sahibi: Menü oluşturur Fotoğraf çeker AI import yapar Ürünleri düzenler Template seçer QR oluşturur Domain bağlar Abonelik yönetir Bunların tamamı mobil uygulamada. 🌐 Müşterinin menüsü → Web Müşteri QR'ı telefon kamerasıyla okutur ve tarayıcıda web menüsü açılır. Örneğin: menu.restoranadi.com veya: restoranadi.seninmarkan.com Uygulama indirmesi kesinlikle gerekmiyor. Public menu nasıl olacak? Tamamen mobile responsive web. Örneğin telefonda: ┌─────────────────────────┐ │ LOGO │ │ KEBAPÇI AHMET │ │ │ │ [ TR ] [ EN ] [ AR ] │ │ │ │ ─────────────────────── │ │ │ │ ÇORBALAR │ │ │ │ Mercimek Çorbası │ │ Geleneksel ev yapımı │ │ 120₺ │ │ │ │ Ezogelin Çorbası │ │ 130₺ │ │ │ │ KEBAPLAR │ │ │ │ Adana Kebap │ │ Zırhta çekilmiş │ │ 320₺ │ │ │ └─────────────────────────┘ Ama sadece mobil değil. Tablet: ┌────────────────────────────────────┐ │ KEBAPÇI AHMET │ │ │ │ Çorbalar Kebaplar Tatlı │ │ │ │ Mercimek Adana Künefe│ │ 120₺ 320₺ 180₺ │ └────────────────────────────────────┘ Desktop'ta da düzgün görünür. Hatta template sistemi burada devreye giriyor Restoran uygulamadan: Elegant seçerse: PUBLIC WEB ↓ Elegant Theme Dark seçerse: PUBLIC WEB ↓ Dark Theme olacak. Yani: MENU DATA │ ▼ THEME ENGINE │ ┌─────────┼─────────┐ ▼ ▼ ▼ Elegant Modern Dark │ │ │ └─────────┼─────────┘ ▼ PUBLIC WEBSITE Bu yüzden restoran uygulamasında template preview da yapabiliriz. Ve bence çok önemli bir karar daha Public menu Next.js olacak. Ama restoranın müşterisi bunu klasik "web sitesi" gibi hissetmemeli. Örneğin: menu.ahmetkebap.com açıldığında: Çok hızlı App-like Mobil optimize Büyük dokunma alanları Sticky kategori navigation Smooth scrolling Ürün modal/detail Lazy loaded images PWA opsiyonel olabilir. QR deneyimi: Müşteri ↓ Telefon kamerası ↓ QR ↓ Safari / Chrome ↓ menu.ahmetkebap.com ↓ Menü App Store'a gitmez. Login istemez. Bu bence ürünün en önemli UX avantajlarından biri. Bir de SEO tarafı var Public menü web olduğu için ileride: "İzmir'de X restoran" gibi aramalardan da trafik alma ihtimali var. Örneğin: menu.restoran.com sayfasında: Restaurant name Address Phone Opening hours Menu Structured data / Restaurant schema gibi bilgiler olabilir. Ama bunu V1'de SEO ürünü haline getirmeyiz. Altyapıyı SEO'ya uygun kurarız. Dolayısıyla mimariyi şöyle netleştirelim: ┌─────────────────┐ │ RESTAURANT │ │ MOBILE APP │ │ Expo │ └────────┬────────┘ │ ▼ Node.js API │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ Supabase AI Service RevenueCat PostgreSQL Storage │ ▼ ┌───────────────┐ │ PUBLIC MENU │ │ Next.js │ └───────┬───────┘ │ Cloudflare CDN │ ▼ menu.restoran.com │ ▼ MÜŞTERİ Yani evet: web menü ürünün kendisinin ana yüzlerinden biri. Sadece yönetim tarafını mobile-only yapıyoruz. Bu ayrımı PRD'de özellikle korumak lazım.