first commit

This commit is contained in:
AyrisAI
2026-08-20 01:51:59 +03:00
commit 97b83c7fd4
109 changed files with 21215 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
# 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)