21 KiB
21 KiB
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.
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.