Her Mutfak, siparişlerini pazaryeri komisyonlarına bırakmak yerine kendi alan adı üzerinden almak istedi. Ortaya WooCommerce çekirdeği üzerine oturan; yemek kartı ödemesini, mutfak ekranını, kurye teslimini ve personel yetkilerini tek yerde çözen bir sipariş sistemi çıktı.
Her Mutfak için WooCommerce tabanlı bir online yemek sipariş platformu kuruldu. Sisteme Multinet yemek kartı ödemesi için özel bir WooCommerce ödeme geçidi, mutfak personelinin siparişleri canlı takip ettiği bir mutfak paneli, kuryeye sipariş aktaran ZirveGo webhook entegrasyonu ve ciro verilerini gizleyen rol bazlı personel erişimi eklendi. Ana site ile sipariş sistemi ayrı tutuldu; ana site statik HTML, sipariş sistemi WordPress/WooCommerce üzerinde çalışıyor.
Restoranların online sipariş tarafındaki en büyük sorunu genelde teknik değil, ekonomik: pazaryeri platformları sipariş başına komisyon alıyor ve müşteri verisi restoranın elinde kalmıyor. Her Mutfak bu döngüden çıkmak, siparişi kendi alan adı üzerinden almak istedi.
Karar, sıfırdan bir sipariş yazılımı yazmak yerine WooCommerce'i çekirdek olarak kullanmak oldu. Sepet, stok, sipariş durumu, vergi ve iade gibi konular WooCommerce'te zaten olgun. Yazılması gereken şey, bu çekirdeğin bilmediği restoran işiydi: yemek kartları, mutfak ekranı, kurye ve vardiya personeli.
Site ikiye ayrıldı. Tanıtım ve menü tarafı olan hermutfak.com statik HTML olarak, sipariş tarafı olan siparis.hermutfak.com ise WordPress üzerinde tutuldu. Böylece pazarlama sayfaları WordPress'in yükünü taşımıyor, sipariş sistemi de tanıtım sayfası her değiştiğinde risk almıyor.
Türkiye'de kurumsal çalışanların büyük bölümü öğle yemeğini Multinet, Sodexo, Setcard gibi yemek kartlarıyla ödüyor. Bu kartları kabul etmeyen bir restoran sipariş sitesi, hedef kitlesinin önemli bir kısmını daha ilk adımda kaybediyor. WooCommerce'in hazır ödeme geçitleri arasında bu kartlar yok.
Bu yüzden Multinet için özel bir WooCommerce ödeme geçidi (payment gateway) eklentisi yazıldı. Eklenti WC_Payment_Gateway sınıfını genişletiyor ve şu akışı yönetiyor:
Kritik nokta son iki madde. Ödeme entegrasyonlarında en sık yapılan hata, sağlayıcının kullanıcıyı geri yönlendirdiği adresteki parametrelere bakıp siparişi ödendi saymak. Bu adres kullanıcının tarayıcısından geçtiği için üzerinde oynanabilir. Doğru davranış, dönüş adımında sağlayıcıya ayrı bir sunucu-sunucu sorgusu atıp işlemin durumunu oradan öğrenmek. Bu vakada akış bu şekilde kuruldu.
Sipariş alındıktan sonraki gerçek problem mutfakta başlıyor. WooCommerce'in yönetici sipariş listesi bir e-ticaret deposu için tasarlanmış; ekranın başında duran ve elleri dolu olan bir mutfak personeli için değil.
Bu yüzden ayrı bir mutfak paneli geliştirildi. Panelin tasarım kararları doğrudan mutfakta gözlemlenen ihtiyaçlardan çıktı:
Bu tür bir panelde asıl mühendislik işi veri tarafında değil; ekranın yoğun bir serviste okunabilir kalmasında.
Sipariş hazır olduğunda dağıtım tarafına geçmesi gerekiyor. Bunun için kurye/dağıtım sistemine sipariş aktaran bir webhook entegrasyonu yazıldı. WooCommerce sipariş durumu ilgili aşamaya geldiğinde, sipariş bilgisi dağıtım tarafına aktarılıyor ve teslimat süreci restoran panelinden ayrı bir sisteme devrediliyor.
Entegrasyonun ayrı bir eklenti olarak yazılmasının nedeni sürdürülebilirlik: dağıtım tarafı değiştiğinde ya da sözleşme sona erdiğinde, tek bir eklenti devre dışı bırakılıyor. Sipariş sisteminin geri kalanına dokunulmuyor.
Restoranda paneli açan herkesin aynı şeyi görmesi doğru değil. Vardiyadaki bir personelin siparişleri yönetmesi gerekiyor; günlük ciroyu, toplam satış raporlarını veya müşteri veri tabanının tamamını görmesi gerekmiyor.
Bunun için rol bazlı sınırlı personel erişimi kuruldu. Hazır tanımlı yetki setleri (preset) üzerinden çalışan bir yapı; personel rolüne atanan kişi sipariş akışını yönetebiliyor, ancak ciro ve rapor ekranları bu roller için gizleniyor. WordPress'in kendi yetenek (capability) sistemi üzerine oturduğu için, yeni bir personel eklemek yalnızca rol atamaktan ibaret.
Yemek siparişinin ezici çoğunluğu telefondan, çoğu zaman mobil veriyle veriliyor. Bu yüzden performans, bu projede kozmetik bir konu değil doğrudan sipariş kaybı meselesi.
Yapılan başlıca iyileştirmeler:
preload ile bildirildi; tarayıcı bu görseli CSS'i çözmeyi beklemeden istemeye başlıyor.Her Mutfak bugün siparişlerini kendi alan adı üzerinden, kendi ödeme geçitleriyle ve kendi müşteri verisiyle alıyor. Sistem canlı ve aktif kullanımda.
Bu projenin devredilebilir dersi şu: bir restoran sipariş sistemi kurarken sıfırdan yazılım yazmak nadiren doğru karar. Doğru karar, olgun bir çekirdeği (WooCommerce) almak ve yalnızca o çekirdeğin bilmediği işi — yemek kartı, mutfak ekranı, kurye, vardiya personeli — özel olarak yazmak. Böylece bakım yükü küçük kalıyor ve sistem restoranla birlikte büyüyebiliyor.
Sipariş hacminiz belli bir düzeye ulaştıysa evet. Pazaryeri komisyonu her siparişten tekrar tekrar kesilirken, kendi sisteminiz tek seferlik kurulum ve düşük süreklilik maliyeti taşır. Ayrıca müşteri verisi ve iletişim izni sizde kalır. Pazaryerini tamamen bırakmak şart değil; çoğu restoran ikisini birlikte kullanır.
Çekirdek olarak evet. Sepet, sipariş durumları, ödeme altyapısı, vergi ve iade akışı hazır gelir. Eksik olan kısım restoran işine özgü olanlar: yemek kartı ödemesi, mutfak ekranı, kurye aktarımı, servis saatleri ve vardiya personeli yetkileri. Bunlar eklenti olarak yazıldığında sistem hem güçlü hem bakımı kolay olur.
Evet, ancak hazır bir eklentiyle değil — sağlayıcının kendi entegrasyon dokümanına göre özel bir WooCommerce ödeme geçidi yazılması gerekir. Sağlayıcıyla anlaşma ve entegrasyon bilgileri işletme adına alınır; geliştirme tarafında yapılan iş, ödeme akışını WooCommerce sipariş yaşam döngüsüne doğru şekilde bağlamaktır.
Kullanılabilirdi ama işe yaramazdı. WooCommerce'in sipariş listesi bir e-ticaret operasyonu için tasarlanmış: filtre, arama, toplu işlem. Mutfakta ihtiyaç duyulan şey ise tek bakışta okunan, geciken siparişi renkle belli eden, sadece bugünü gösteren bir ekran. Bu iki ihtiyaç aynı arayüzle karşılanamıyor.