Telefonda, yarı karanlıkta, üç dilde okunan bir QR kodlu menü — ve hiçbir cookie koymaz.
Bir işletmenin menüsü bir broşür değildir: kesin olması gereken fiyatları ve hacimleri vardır, sık değişir ve üç dil konuşan kişiler tarafından okunur. Menüyü veri olarak oluştururuz, sayfayı bunlardan üretiriz ve her yayından önce, fiyatların her kategoride aşağı doğru gittiği ve her fotoğrafın var olduğu dahil, kontrol ederiz.
Zaten kurduklarımızDouă meniuri digitale în producție, verificabile din exterior azi. Primul: 119 produse în 21 de categorii, cu preț, volum, compoziție și fotografie, plus câte un text scurt de prezentare și un set de recomandări de asociere pentru fiecare produs; generatorul are 402 linii, iar verificarea dinaintea publicării are 233 de linii și 16 blocuri. Al doilea, site-ul-soră cu același motor: 146 de produse în 31 de categorii, generator de 377 de linii, verificare de 210 linii cu 14 blocuri, iar integrarea continuă regenerează pagina din surse și respinge modificarea dacă rezultatul diferă de fișierul din depozit. Ambele răspund 200 și niciunul nu pune vreun cookie — verificat de mine pe 06.09.2026. Spunem și că sunt două lucrări cu același motor și același proprietar, nu două lucrări independente.
QR kod üzerindeki taranmış bir PDF, bir işletmenin çözmesi gereken hiçbir şeyi çözmez. İçinde arama yapılamaz, çevrilemez, telefonda düzgün büyütülemez ve kodu yeniden basmadan değiştirilemez. Üstelik menü sık sık değişir: mutfak bir yemeği çıkarır, bar başka bir marka alır, bir kalemin fiyatı yükselir. Menü, bir kez basılmış bir belge değil, haftalık olarak değişen bir veri kümesidir.
Bu yüzden onu veri olarak ele alıyoruz. Gerçek kaynaklar birkaç yapılandırılmış dosyadır — ürünler, tanıtım metinleri, eşleştirme önerileri, çeviriler — ve Python ile yazılmış bir üretici bunlardan tek bir sayfa oluşturur. İşletmelerden birinde: 21 kategoride 119 ürün, her biri fiyat, hacim, bileşim ve fotoğrafla birlikte, ayrıca 119 kısa metin ve 119 „neyle uyumlu” seti. Diğerinde: 31 kategoride 146 ürün. Sayfa doğrudan düzenlenmez — yeniden üretilir.
Çeviri düğmelerle sınırlı değildir. Romence temeldir ve Rusça ile İngilizce kategorileri, adları, hacimleri, bileşimleri, 82 tat etiketini ve tüm tanıtım metinlerini kapsar. Komşu masanın başka bir dilde sipariş verdiği bir şehirde, yarım çevrilmiş bir menü, hiç çevrilmemiş olandan daha sinir bozucudur: size her şeyi okuyabileceğinizi düşündürür.
En önemli gördüğümüz ve brief’te kimsenin istemediği kısım: sepet, favoriler listesi ve hesabı bölme işlemi tarayıcıda, hesapsız ve sunucusuz çalışır; site hiçbir cookie koymaz ve üçüncü taraf bir alan adından hiçbir şey istemez. Bu, gizlilik politikasındaki bir vaat değil — her yayınlamadan önce çalışan ve bir takipçi, bir dış kaynak ya da başkasından alınmış bir font ortaya çıktıysa değişikliği reddeden otomatik kontrollerin dayattığı bir kuraldır.
Neleri kapsıyor
Restoranlar ve horeca’da somut olarak ne değişiyor
Menü bir veri kümesidir ve sayfa ondan üretilir
Ürünler, tanıtım metinleri, tavsiyeler ve çeviriler yapılandırılmış dosyalarda durur; Python ile yazılmış bir oluşturucu — biri yerelde 402 satır, diğeri 377 — bunlardan tek bir sayfa derler. Yayınlanan sayfa elle düzenlenmez; biri bunu yaptığında sürekli entegrasyon bunu yakalar, çünkü sayfayı yeniden oluşturur ve sonucu karşılaştırır.
Her pozisyonun fiyatı, hacmi, bileşimi ve fotoğrafı vardır
Bir barda hacim fiyatın bir parçasıdır: 40 ve 100 mililitrede aynı ad iki farklı üründür, hacmi görmeyen müşteri kendisine başka bir şey söylendiğini düşünür. Veri yapısı, eksik bir pozisyonun masaya çıkmaması için dört alanı da zorunlu, isteğe bağlı değil, olarak tutar.
Üç dil, son tat etiketine kadar
Çeviri, arayüzü, kategorileri, adları, hacimleri, bileşimleri, 82 tat etiketini ve tüm kısa tanıtım metinlerini kapsar; her Rumence anahtarın Rusça ve İngilizce karşılığı vardır. Yayın öncesi kontrollerden biri, menü üç dilin hepsinde tam değilse başarısız olur.
Sepet, favoriler ve hesabı bölme işlemi tarayıcıda çalışır
Hesapsız, sunucusuz, hiçbir yere veri göndermeden. Müşteri siparişini telefonda oluşturur ve garsona gösterir ya da hesabı bölmek için kullanır. Teknik sonuç: müşterilerinizin ne sipariş ettiğine dair bir veritabanı yoktur, çünkü oluşturulmaz.
Çerez yok ve üçüncü taraf alanlardan hiçbir şey yok
Dışarıdan doğrulandı: iki siteden hiçbirinde çerez başlığı yok, ayrıca bunlardan birinin içerik politikası dışarıdan hiçbir şeye izin vermiyor. Yazı tipleri harici bir hizmette değil, aynı alan adında barındırılıyor. Sayfadaki tek harici adresler, mekanın sosyal ağ bağlantılarıdır — bunlara ziyaretçi tıklar, sayfa çağırmaz.
Her yayınlamadan önce, sıkıcı olanlar da dahil, kontroller
Bir mekanda on altı kontrol bloğu, diğerinde on dört: izleyici yok, üçüncü taraflardan otomatik yüklenen kaynak yok, kendi alanında barındırılan yazı tipleri, geçerli yapılandırılmış dosyalar, her fotoğraf mevcut, menü üç dilde tam, sayfadaki yapılandırılmış veriler geçerli ve — herkesi şaşırtanı — fiyatlar her kategoride aşağı doğru gider. Yanlış girilmiş bir fiyat, müşterinin şikayetinde değil, listenin düzenindeki bir süreksizlik olarak görünür.
Yayınlanan sayfa her zaman kaynaklarla uyumludur
Her değişiklikte, sürekli entegrasyon sayfayı kaynaklardan yeniden oluşturur ve sonuç depodaki dosyadan farklıysa değişikliği reddeder. Bu, ekranda müşterinin gördüğünün, mekanın yerelde düzenlediği verilerden geldiğinin ve üç ay önce orada unutulmuş bir manuel müdahaleden gelmediğinin tek gerçek güvencesidir.
Sunucu günlükleri tam IP adreslerini saklamaz
Mekanlardan birinin sunucu yapılandırmasında: IP adreslerinde maskeleme, tanımlama başlıkları günlüktan silinmiş ve sınırlı saklama, saklamanın sınırlandırılması ilkesine açık atıfla. Sürekli entegrasyon, bu satırlar yapılandırmadan kaybolursa değişikliği reddeder — dolayısıyla koruma, bir sunucu değişikliğinde sessizce kaybolamaz.
Bir dijital menü ne yapmaz
Siparişi mutfağa iletmez ve bir rezervasyonu onaylamaz: bunun için mekanın işletim sistemine bağlantı gerekir, ki bu ayrı bir çalışmadır. Ve kasada yerine getirilmesi gereken bir şeyi vaat eden işlevleri yayınlamıyoruz — „happy hour” türü bir indirim ya da mutfak programı, mekanın yazılı onayı olmadan başlatılmaz, çünkü ekrandaki vaat için para ödeyen kişi tezgahtaki insandır.
Traseul
Bir talep sistemden nasıl geçer.
01
Bir şey çizmeye başlamadan önce menüyü yapılandırıyoruz
İlk teslimat, veriler olarak menüdür: kategoriler, ürünler, fiyat, hacim, bileşim, fotoğraf. Burada eksikler de ortaya çıkar — hacmi olmayan ürünler, aslında iki tane olan kategoriler, fotoğrafı olmayan ürünler. Eksik verilerin üzerine kurulan dijital bir menü, tasarım ne kadar iyi olursa olsun eksik görünür.
02
Sadece arayüzü değil, her şeyi çeviriyoruz
Kategoriler, adlar, hacimler, bileşimler, tat etiketleri ve tanıtım metinleri Rusça ve İngilizce karşılıklarını alır. Menüyü üç dilde eksiksiz teslim ediyor ve bir anahtar çevrilmeden kalırsa düşen otomatik doğrulamayı sağlıyoruz.
03
İlk yayımdan önce kontrolleri yerleştiriyoruz
Takipçi yok, üçüncü taraf kaynak yok, kendi sunucumuzda barındırılan fontlar, geçerli dosyalar, her fotoğraf mevcut, kategori başına fiyatlar azalan sırada, geçerli yapılandırılmış veriler. Kontrol betiğini depoda teslim ediyoruz, böylece işletme onu bizim olmadan da çalıştırabilsin.
04
Önceki sürümün kopyasıyla depodan otomatik yayınlama
Yayınlama, değişiklik birleştirildiğinde, sürekli entegrasyon sayfayı yeniden oluşturup kaynaklarla karşılaştırdıktan sonra ve önceki sürümün bir kopyası saklandıktan sonra yapılır. Sadece açılmış siteyi değil, erişimleri ve geri dönüş prosedürünü de teslim ediyoruz.
Traseul, în 5 pași
Veriler
Neye dokunuyoruz, nerede duruyorlar ve ne kadar kalıyorlar
Kurallar sektörden sektöre değişir. Bunlar restoranlar ve horeca için geçerli olanlardır.
Müşteri hakkında hiçbir şey toplanmaz
Hesap yok, çerez yok, takipçi yok, üçüncü taraf alan adlarından istenen kaynak yok. Sepet ve favoriler ziyaretçinin tarayıcısında yaşar. Bizde ve işletmede, birinin menüde neye baktığının listesi yoktur — sildiğimiz için değil, hiç oluşmadığı için.
Sunucu günlüklerinde ne kalır
Bir web sunucusunun olağan istekleri; IP adresi maskelenmiş, tanımlayıcı başlıklar olmadan, sınırlı bir süre saklanır. Sunucu yapılandırmasına yazılır, otomatik olarak kontrol edilir ve depolamanın sınırlandırılması ilkesiyle gerekçelendirilir — programın varsayılan değerlerine bırakılmaz.
Menü, fiyatlar, tarifler ve fotoğraflar işletmeye aittir
Biz yapıyı, üreticiyi ve kontrolleri kuruyoruz. İçerik onundur ve kendi kararıyla değişir. Materyallerimizde örnek olarak bile, açıklayıcı amaçla bile hiçbir fiyat rakamı yayımlamıyoruz.
İşletme sayfada bir asistan da istediğinde ne olur
Olabilir, ama bu, sayfanın içerik politikasının tam olarak o alan adına ve başka hiçbir şeye izin vermesi gerektiği anlamına gelir. İki siteden birinde bu dışarıdan görünür: politika tek bir dış alan adına, asistanın alan adına izin verir. „Bir alan adına izin veriyoruz” ile „her şeye izin veriyoruz” arasındaki fark, takip konusundaki tüm tartışmadır.
Rezervasyon verileri, varsa, kuralları değiştirir
Menü bir rezervasyon formu aldığında, ad, telefon ve saat ortaya çıkar — yani kişisel veriler, saklama süresi, ulaştığı bir yer ve onları gören biri. O zaman işletmenin yayımlanan politikası da yazılır. O zamana kadar menü hiçbir şey toplamayan bir sayfadır ve rezervasyonlar telefonla yapılıyorsa böyle kalması daha basittir.
Bir vaka
Her kategoride fiyatların azalmasını zorunlu kılan bir kontrol
Durum
Yüzden fazla kalem içeren bir menüde en sık yapılan hata tasarım değil, yazımdır: bir fiyatta fazladan bir rakam ya da fotoğrafı olmayan bir kalem. İkisi de genellikle müşteri bunları garsona gösterdiğinde ortaya çıkar.
Ne kurduk
Yayınlamadan önce 233 satırlık bir kontrol betiği yerleştirdik — bir mekânda 233 satır, diğerinde 210 — ve bu betik sırasıyla on altı ve on dört blok çalıştırıyor: hiçbir izleyicinin sızmadığı, sayfanın üçüncü taraf bir alandan hiçbir şey istemediği, yazı tiplerinin yerelde barındırıldığı, veri dosyalarının geçerli olduğu ve her fotoğrafın mevcut olduğu, menünün üç dilde de eksiksiz olduğu, sayfadaki yapılandırılmış verilerin geçerli olduğu ve fiyatların her kategoride azaldığı kontrol ediliyor. Ayrı olarak, sürekli entegrasyon her değişiklikte sayfayı kaynaklardan yeniden oluşturur ve sonuç yayımlanan dosyadan farklıysa onu reddeder.
Ne çıktı
Fiyattaki bir yazım hatası azalan sıralamayı bozar ve yayını durdurur, eksik bir fotoğraf ise masa ekranına asla ulaşmaz. Yayımlanan sayfa her zaman mekânın yerelde düzenlediği verilerle eşleşir, çünkü aksi halde yayınlanmaz.
Vakanın söylemedikleri
Kontroller mekanik olarak doğrulanabileni yakalar. Yanlış girilmiş ama makul — ve sıralı — bir fiyat geçer; onun için birinin bakmasından başka bir mekanizma yoktur. Projelerden birinin belgelerinde betikte 16 blok varken „14 verificări” yazıyor; doğru sayı betikte olandır.
Sorular
Restoranlar ve horeca alanından birinin sordukları
Fiyatları kendimiz değiştirebilir ve menüden bir yemeği çıkarabilir miyiz?
Evet. Sayfa değil, veriler düzenlenir; sayfa onlardan yeniden oluşturulur. Sürekli entegrasyon her değişiklikte yeniden oluşturmayı denetler ve yayımlanan sayfa artık kaynaklarla eşleşmiyorsa değişikliği reddeder. Böylece birinin fiyatı doğrudan sayfada düzeltip değişikliğin bir sonraki yayında kaybolduğu senaryo olmaz.
Neden çerez koymamanız önemli?
Çünkü hiçbir şey toplamayan bir menünün onay bandına ihtiyacı yoktur, sızdıracak bir şeyi yoktur ve bir denetçiye açıklayacak bir şeyi yoktur. Kontrol herkesin erişebileceği kadar kolaydır: siteye tek bir istek, hiçbir çerez başlığının dönmediğini gösterir. Ayrıca mekânlardan birinin içerik politikası dışarıdan hiçbir kaynağa izin vermez.
Menü sipariş alabilir mi?
Sepet tarayıcıda çalışır; müşterinin garsona gösterdiği ya da hesabı bölüşmek için kullandığı bir liste olarak. Siparişi mutfağa iletmek mekânın sistemine bir bağlantı gerektirir ve bu, uyumluluk kontrolü önceden yapılan ayrı bir iştir. Hiçbir yere ulaşmayan bir sepeti „online sipariş” olarak adlandırmıyoruz.
„happy hour” ya da akşam teklifi koyabilir miyiz?
Yapılabilir, ancak mekânın yazılı onayı olmadan başlatmıyoruz, çünkü bu kasada yerine getirilen bir sözdür. Kuralımız şu: mekânı müşteriye karşı bağlayan işlevler — indirimler, mutfak saatleri, uygunluklar — sözlü bir görüşmeye dayanarak yayımlanmaz.
Kaç dilde ve ne kadar eksiksiz?
Üç: temel olarak Romence, ayrıca Rusça ve İngilizce. Eksiksiz demek kategoriler, adlar, hacimler, bileşimler, tat etiketleri ve tanıtım metinleri demektir; yalnızca düğmeler değil. Otomatik bir kontrol, menü üç dilin hepsinde eksiksiz değilse başarısız olur — bu yüzden siteye yarım çevrilmiş olarak ulaşmaz.
Yanlış bir fiyatın görünmediğinden nasıl emin oluyorsunuz?
Yayından önceki kontroller arasında fiyatların her kategoride azalmasını zorunlu kılan biri vardır. Bu bir ticari kural değil, bir yazım hatası dedektörüdür: fazladan ya da eksik bir rakamla girilmiş bir kalem sıralamayı bozar ve yayını durdurur. Diğer kontroller eksik fotoğrafları ve geçersiz dosyaları ele alır.
Site, telefonda, yerelde, mobil veride hızlı mı?
Sonuç, oluşturulan tek bir sayfadır; yazı tipleri aynı alan adında barındırılır ve üçüncü taraf alan adlarından kaynak istenmez. Bu, açılacak daha az bağlantı ve dış bir hizmeti bekleyen hiçbir şey olmadığı anlamına gelir. Hız rakamlarını sizin koşullarınızdan başka koşullarda ölçülmüş şekilde yayımlamıyoruz.
Menü hakkında soruları yanıtlayan bir asistan ekleyebilir miyiz?
Evet, ve o zaman sayfanın içerik politikası tam olarak o alanı, başka hiçbir şeyi izinli kılar. İki lokasyondan birinde bu dışarıdan görülür. Tersi de söylenmeli: o anda sayfa artık „dışarıdan hiçbir şey olmayan” bir sayfa değildir, dolayısıyla karar bir bonus olarak değil, bilinçli olarak verilir.
Portföyünüzde neredeyse aynı iki menü var. Bunlar iki çalışma mı?
Aynı sahibin iki sitesidir ve bunu açıkça söylüyoruz. Aralarındaki beyan edilen işlevsel fark, ürün başına eşleştirme önerileridir; ikincisinde bunlar yoktur. Bunları bağımsız çalışmalar olarak sunabilirdik; bu bir portföy abartısı olurdu.