

Karaman Restaurant
WebMenü, sipariş ve kurye operasyonunu birleştiren restoran paneli.
SEKTÖR
Karaman.com için müşteri uygulaması, restoran paneli ve yönetim paneli: iyzico ve Garanti POS, PostGIS teslimat bölgeleri, realtime sipariş ve adisyon.
KISA CEVAP
Karaman.com için müşteri mobil uygulamasını, restoran panelini ve merkezi yönetim panelini aynı Supabase projesinde geliştirdik. Sipariş iyzico, Garanti POS ya da kapıda ödemeyle veriliyor; başarılı online ödeme restoran onayı sayılmıyor ve sipariş pending başlıyor. Teslimat bölgeleri PostGIS poligonu olarak sunucuda doğrulanıyor, yeni sipariş realtime abonelik ve 15 saniyelik sorguyla panele düşüyor.
Sipariş uygulamalarında sık yapılan hata, ödeme başarılı olduğu anda siparişi onaylanmış saymak. Oysa restoran o ürünü o saatte hazırlayamayabilir, teslimat adresi bölge dışında kalabilir ya da mutfak kapanmış olabilir. Ödeme alınmış ama restoranın haberi olmayan bir sipariş, müşteri için en kötü senaryo.
Karaman mobil uygulamasında create-order siparişi her zaman pending durumunda açıyor. iyzico-webhook ve garanti-webhook ödemeyi işliyor ama restoran onayının yerine geçmiyor; onay ya da ret restoranın panelinden geliyor. Kapıda ödeme seçilen siparişler de aynı akıştan geçiyor, bu yüzden restoranın gördüğü ekran ödeme yöntemine göre değişmiyor.
Durum geçişleri yetkili role bağlı ve her geçiş tek bir geçmiş kaydı yazıyor. Kuralı arayüze değil veritabanına koyduk: onay ve ret geçişleri satır güvenliği altında çalışıyor ve restoran rolüyle koşan yerel bir veritabanı testinden geçti. Geçişi yalnız yetkili rol yapabiliyor ve kim neyi ne zaman değiştirdi sorusunun cevabı her zaman kayıtlı.
Restoran mutfağında yeni sipariş fark edilmezse müşteri bekler. Karaman restoran paneli için sahadan gelen istekler de tam bu noktadaydı: sipariş sesi, adisyon yazdırma ve teslimat bölgesini restoranın kendisinin çizebilmesi.
Yeni ve bekleyen siparişler realtime aboneliğiyle takip ediliyor; bağlantı koptuğunda sipariş kaçmasın diye yanında 15 saniyelik bir sorgu da çalışıyor. Tarayıcılar kullanıcı etkileşimi olmadan ses çalmaya izin vermediği için panelde ses iznini açan ayrı bir buton var; izin bir kez verildiğinde yeni sipariş sesle duyuruluyor.
Sipariş detayında 58 ve 80 mm adisyon seçimi ve yazdırma var. Adisyonda kalemler, varyantlar, müşteri notu, adres, ödeme yöntemi ve toplam yer alıyor. Ayrı bir yazıcı yazılımı gerekmiyor; yazdırma panelin içinden yapılıyor.
Panel ekranları göreve göre ayrıldı: sipariş, menü, kurye, rapor ve ayarlar. Eylül 2026 sürümüyle müşterinin geri bildirim listesindeki dokuz madde kapatıldı; mobil hamburger menü ve yatay taşma düzeltmeleri de bu sürümde geldi.
Teslimat bölgesini metin olarak tutmak (semt listesi, posta kodu) gerçek hayatta tutmuyor; restoranın kuryesinin gittiği alan çoğu zaman bir semt sınırına denk gelmiyor. Karaman’da bölge bir poligon ve restoran onu panelde kendisi çiziyor: nokta ekleme, son noktayı geri alma ve mevcut poligonu düzenleme destekleniyor.
Çizilen şekle güvenilmiyor. Bölgeler geography_helpers ve delivery_zone_rpc migration’larıyla PostGIS’te tutuluyor ve sunucu kaydetmeden önce geçerli bir Polygon olup olmadığını denetliyor; geçersiz bir şekil kayda girmiyor. Müşterinin adresi bölge içinde mi sorusu da istemcide değil sunucuda cevaplanıyor ve kural tek yerde duruyor.
Komisyon aynı veride hesaplanıyor: oran, sipariş toplamı üzerinden uygulanıyor (200 TL × %10 = 20 TL). Bekleyen komisyonlar için ayrı bir düzeltme migration’ı yazıldı; düzeltme veritabanında izlenebilir kaldı.
Bu yapı tek restoran için de, bir şehirdeki birçok restoran için de aynı: her restoran kendi bölgesini çiziyor, platform yalnız kuralları koruyor.
Karaman.com’un mobil uygulamadan önce de kullanıcı hesapları, restoranları ve bir API’si vardı. Mobil uygulama bunları yeniden kurmadan, şehir portalını ve yemek siparişini aynı deneyimde sunmalıydı.
Bir köprü Edge Function’ı, bridge-session, karaman.com JWT’sini doğrulayıp Supabase profiline eşliyor. Sitenin gerçek e-postası kullanılıyor; daha önce oluşmuş sentetik profil e-postaları temizlendi. Uygulamanın içinde Karaman API anahtarı yok, çağrılar karaman-proxy üzerinden gidiyor.
Kod bir monorepo: Expo SDK 55 uygulaması ve ortak paketler (API istemcisi, tipler, yardımcılar). Mağaza derlemesini müşteri kendi Expo ve Firebase hesaplarından alıyor, bu yüzden kaynakta hiçbir gizli anahtar bulunmuyor. Production profili mock veriyle derlemeyi reddediyor; test verisiyle mağazaya çıkan bir sürüm mümkün değil.
Teslim Eylül 2026’da kaynak, kurulum talimatı ve sunucu yayın notlarıyla yapıldı. Uygulamanın şehir tarafında haber akışı, turistik yerler, nöbetçi eczane, hava durumu ve toplu taşıma saatleri; sipariş tarafında restoranlar, sipariş takibi ve kampanyalar var.
Restoranın kendi paneli ile platformu yöneten panel ayrı arayüzler, ama aynı Supabase projesini paylaşıyor. Karaman yönetim panelinde ekranlar göreve göre ayrıldı: restoranlar (oluşturma ve mevcut bilgileri yükleyen düzenleme), kullanıcılar, siparişler, komisyonlar, kampanyalar, reklam bantları, yorum moderasyonu, ödeme ayarları, uygulama sürümleri ve raporlar.
Push bildirimleri, kayıtlı ve misafir kullanıcı segmentlerine, kategori tercihine göre gidiyor. Misafire ulaşabilmek için cihaz kaydı hesaptan bağımsız tutuluyor; yinelenen ve eski token’lar ayıklanıyor.
Reklam bantlarının bitiş tarihi ve aktiflik durumu var; süresi geçmiş ya da pasif bant mobilde hiç gösterilmiyor ve kimsenin elle kaldırmasını beklemiyor. Uygulama sürümleri panelden yönetiliyor.
Şehir hizmetleri de aynı panelde, kendi bölümlerinde: toplu taşıma saatleri, ATM’ler, şarj istasyonları ve su çeşmeleri. Tek bir restoran için bu kadar geniş bir panel gerekmez; kapsamı işletmenin büyüklüğüne göre keşifte birlikte çiziyoruz.
Yemek ve taze ürün teslimatında sipariş tek kişinin işi değil. HalApp’ta müşteri, toplayıcı, sürücü, yönetici ve admin aynı siparişin farklı aşamalarına bakıyordu. Beş ayrı uygulama hem maliyeti hem tutarsızlığı artırırdı; tek uygulama ise her rolü kendi işine odaklı tutmak zorundaydı.
Çözüm tek bir Expo uygulamasında beş rol, her biri kendi rota grubunda. Müşteri katalog, sepet, sipariş takibi ve bildirimleri görüyor; toplayıcı sipariş hazırlıyor; sürücü harita üzerinde rota ve teslimatları görüyor; yönetici onayları ve müşterileri, admin pano, personel ve ürünleri yönetiyor. Rol girişte belirleniyor ve gezinme ona göre kuruluyor, bu yüzden sürücü hiçbir zaman ürün yönetimi ekranına düşmüyor.
Durum yönetiminde zustand, stilde NativeWind, haritada react-native-maps kullanıldı. Katalog, sepet, sipariş hazırlama, teslimat ve onay akışları iOS ve Android için tek kod tabanında müşteriye teslim edildi; proje arşivde.
Restoranınızın kendi kuryesi, paket servis ekibi ya da merkez mutfaktan şubelere dağıtımı varsa bu rol ayrımı doğrudan uygulanabiliyor.
Her yemek projesi bir sipariş akışı değil. Düzce Biz, şehirdeki mekânları, kampanyaları ve etkinlikleri tek uygulamada toplayan kendi ürünümüz. Expo mobil uygulama, Next.js 16 üzerinde işletme ve admin panelleri ve Firebase Cloud Functions tek bir monorepo’da. Mekânlar harita ve listede kategori, mesafe ve şu an açık olma durumuna göre süzülüyor.
İşletme uygulamadan başvuruyor; admin onaylayınca onApplicationApproved tetikleyicisi hesabı ve profili açıyor. Sunucuda zamanlanmış işler var: cleanupExpiredCampaigns süresi dolan kampanyaları kaldırıyor, notifyClosingSoonFavorites favori mekân kapanmak üzereyken kullanıcıya haber veriyor, calculateBusinessRating her yeni yorumda puanı yeniden hesaplıyor.
Dine Divine ise şefler için bir iOS tarif platformu. Şef tarifleri adım adım yönergelere bölündü: her adım tek ekran ve tek iş. Topluluk kendi tariflerini paylaşabiliyor, ama seçkin kütüphane ayrı bir alan ve topluluk içeriğiyle karışmıyor.
Restoranınız için menü, kampanya ya da sadakat tarafı sipariş kadar önemliyse bu iki ürünün kararları başlangıç noktası oluyor.
Karaman’da iyzico, Garanti POS ve kapıda ödeme birlikte çalışıyor. Hangi sağlayıcının kullanılacağı sizin bankanıza ve mevcut anlaşmalarınıza bağlı; keşifte netleştiriyoruz. Yöntem ne olursa olsun sipariş pending başlıyor ve ödeme webhook’ları restoran onayının yerine geçmiyor, böylece parası alınmış ama mutfağın görmediği sipariş oluşmuyor.
Evet. Karaman restoran panelinde sipariş detayından 58 ya da 80 mm adisyon seçilip yazdırılabiliyor; kalemler, varyantlar, müşteri notu, adres, ödeme yöntemi ve toplam adisyonda yer alıyor. Yazdırma panelin içinden yapılıyor, ayrı bir yazıcı yazılımı gerekmiyor. Farklı bir yazıcı modeli ya da otomatik yazdırma isteniyorsa keşifte cihazla birlikte test ediyoruz.
Evet. Karaman’da restoran bölgesini panelde harita üzerinde çiziyor: nokta ekleme, geri alma ve mevcut poligonu düzenleme var. Kaydedilen şekil PostGIS’te tutuluyor ve sunucu geçerli bir Polygon olup olmadığını denetliyor. Müşteri adresinin bölge içinde olup olmadığı da sunucuda kontrol ediliyor, bu yüzden değişiklik uygulamanın tüm sürümlerinde hemen geçerli oluyor.
Karaman’da komisyon sipariş toplamı üzerinden bir oranla hesaplanıyor; örneğin 200 TL’lik siparişte %10 oran 20 TL komisyon demek. Komisyonlar yönetim panelinde ayrı bir ekranda izleniyor. Bekleyen komisyonlar için ayrıca bir düzeltme migration’ı yazıldı. Oranın restorana ya da kategoriye göre değişmesi gibi kurallar keşifte tanımlanır.
Evet. Karaman’da cihaz kaydı hesaptan bağımsız tutulduğu için push misafir kullanıcılara da gidiyor. Gönderim kayıtlı ve misafir segmentlerine, kategori tercihine göre yapılıyor; yinelenen ve eski token’lar gönderimden önce ayıklanıyor. Bildirimin hangi olaylarda ve hangi segmente gideceği keşifte sizinle birlikte tanımlanır.
Karaman.com’da bunu bir köprü fonksiyonuyla çözdük: bridge-session sitenin JWT’sini doğrulayıp Supabase profiline eşliyor ve sitenin gerçek e-postasını kullanıyor. Kullanıcı yeniden kayıt olmuyor, sitenin API anahtarı da uygulamaya girmiyor; çağrılar bir proxy üzerinden gidiyor. Sizin sitenizin kimlik yapısını keşifte inceleyip aynı yaklaşımın uygulanıp uygulanamayacağını söylüyoruz.
Size. App Store ve Google Play geliştirici hesapları, sunucu ve servis hesapları sizin adınıza açılır. Teslimde kaynak kodun tamamını, tasarım dosyalarını ve tüm erişimleri size devrederiz.
Hayır. Kullanıcı ekranlarını ve yönetim paneli ekranlarını projenize özel olarak tasarlayıp sıfırdan geliştiririz. Böylece panel, sizin iş akışınıza göre çalışır.
İLGİLİ STÜDYO NOTLARI


Menü, sipariş ve kurye operasyonunu birleştiren restoran paneli.


Taze ürün tedarikini katalogdan siparişe taşıyan mobil alışveriş deneyimi.


Şehrin mekanları, kampanyaları ve etkinlikleri tek uygulamada.


Profesyonel şeflere özel tarif platformu.
Bir tanışma görüşmesiyle başlarız. Kapsamı ve takvimi birlikte netleştirir, size yazılı bir teklif göndeririz.
hello@amgsoftwarestudio.com