# 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.