Sari la conținut
megapromoting
Hai să discutăm

Soluții · Restaurante & HoReCa

Un meniu pe cod QR care se citește pe telefon, în semiîntuneric, în trei limbi — și care nu pune niciun cookie.

Meniul unui local nu e o broșură: are prețuri și volume care trebuie să fie exacte, se schimbă des și e citit de oameni care vorbesc trei limbi. Construim meniul ca date, generăm pagina din ele și verificăm înainte de fiecare publicare, inclusiv că prețurile coboară în fiecare categorie și că fiecare poză există.

Construit dejaDouă 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.

Un PDF scanat pe un cod QR nu rezolvă nimic din ce are un local de rezolvat. Nu se caută în el, nu se traduce, nu se mărește ca lumea pe telefon și nu se poate schimba fără să retipărești codul. Iar meniul se schimbă des: bucătăria scoate un fel, barul primește altă marcă, prețul unei poziții urcă. Meniul e un set de date care se modifică săptămânal, nu un document tipărit o dată.

De aceea îl tratăm ca date. Sursele reale sunt câteva fișiere structurate — produse, texte de prezentare, recomandări de asociere, traduceri — iar un generator scris în Python compune din ele o singură pagină. Într-unul dintre localuri: 119 produse în 21 de categorii, fiecare cu preț, volum, compoziție și fotografie, plus 119 texte scurte și 119 seturi de „cu ce merge”. În celălalt: 146 de produse în 31 de categorii. Pagina nu se editează direct — se regenerează.

Traducerea nu se oprește la butoane. Româna e baza, iar rusa și engleza acoperă categoriile, denumirile, volumele, compozițiile, cele 82 de etichete de gust și toate textele de prezentare. Într-un oraș în care masa vecină comandă în altă limbă, un meniu tradus pe jumătate e mai enervant decât unul netradus: te lasă să crezi că poți citi tot.

Partea pe care o considerăm cea mai importantă și pe care nimeni nu o cere în brief: coșul, lista de favorite și împărțirea notei rulează în browser, fără cont și fără server, iar site-ul nu pune niciun cookie și nu cere nimic de la un domeniu terț. Nu e o promisiune din politica de confidențialitate — e o regulă impusă de verificări automate care rulează înainte de fiecare publicare și care resping modificarea dacă a apărut vreun urmăritor, vreo resursă externă sau vreun font luat de la altcineva.

Ce cuprinde

Ce se schimbă concret în restaurante & horeca

Meniul e un set de date, iar pagina se generează din el

Produsele, textele de prezentare, recomandările și traducerile stau în fișiere structurate; un generator scris în Python — 402 linii într-un local, 377 în celălalt — compune din ele o singură pagină. Pagina publicată nu se editează cu mâna; când cineva o face, integrarea continuă o prinde, pentru că regenerează pagina și compară rezultatul.

Fiecare poziție are preț, volum, compoziție și fotografie

Într-un bar, volumul e parte din preț: aceeași denumire la 40 și la 100 de mililitri sunt două produse diferite, iar clientul care nu vede volumul crede că i s-a spus altceva. Structura de date ține toate patru câmpurile ca obligatorii, nu ca opționale, tocmai ca o poziție incompletă să nu ajungă pe masă.

Trei limbi, până la ultima etichetă de gust

Traducerea acoperă interfața, categoriile, denumirile, volumele, compozițiile, cele 82 de etichete de gust și toate textele scurte de prezentare, fiecare cheie românească având perechea ei în rusă și engleză. Una dintre verificările dinaintea publicării cade dacă meniul nu e complet în toate trei limbile.

Coșul, favoritele și împărțirea notei rulează în browser

Fără cont, fără server, fără date trimise nicăieri. Clientul își compune comanda pe telefon și o arată ospătarului sau o folosește la împărțirea notei. Consecința tehnică: nu există o bază cu ce au comandat clienții tăi, pentru că nu se creează una.

Zero cookie și nimic de la domenii terțe

Verificat din exterior: niciun antet de cookie pe niciunul dintre cele două site-uri, iar politica de conținut a unuia dintre ele nu permite absolut nimic din afară. Fonturile sunt găzduite pe același domeniu, nu la un serviciu extern. Singurele adrese externe din pagină sunt legăturile către rețelele sociale ale localului — pe care le apasă vizitatorul, nu le cheamă pagina.

Verificări înainte de fiecare publicare, inclusiv cele plictisitoare

Șaisprezece blocuri de verificare într-un local, paisprezece în celălalt: fără urmăritori, fără resurse încărcate automat de la terți, fonturi auto-găzduite, fișiere structurate valide, fiecare fotografie există, meniul complet în trei limbi, datele structurate din pagină valide și — cea care surprinde pe toată lumea — prețurile coboară în fiecare categorie. Un preț introdus greșit se vede ca o discontinuitate în ordinea listei, nu la reclamația clientului.

Pagina publicată corespunde întotdeauna surselor

La fiecare modificare, integrarea continuă regenerează pagina din surse și respinge modificarea dacă rezultatul diferă de fișierul din depozit. E singura garanție reală că ce e pe ecranul clientului vine din datele pe care le editează localul, și nu dintr-o intervenție manuală uitată acolo acum trei luni.

Jurnalele serverului nu păstrează adrese IP întregi

În configurația de server a unuia dintre localuri: mască pe adresele IP, antetele de identificare șterse din jurnal și păstrare limitată, cu trimitere explicită la principiul limitării stocării. Integrarea continuă refuză modificarea dacă din configurație dispar aceste linii — deci protecția nu se poate pierde tăcut la o schimbare de server.

Ce nu face un meniu digital

Nu preia comanda în bucătărie și nu confirmă o rezervare: pentru asta e nevoie de o conexiune la sistemul de operare al localului, care e lucrare separată. Și nu publicăm funcții care promit ceva ce trebuie onorat la casă — o reducere de tip „happy hour” sau un orar al bucătăriei nu se pornesc fără acordul scris al localului, pentru că cine plătește pentru promisiunea de pe ecran e omul de la tejghea.

Traseul

Cum trece o cerere prin sistem.

01

Structurăm meniul înainte de a desena ceva

Prima livrare e meniul ca date: categorii, poziții, preț, volum, compoziție, fotografie. Aici se descoperă și lipsurile — poziții fără volum, categorii care de fapt sunt două, produse fără fotografie. Un meniu digital construit peste date incomplete arată incomplet, oricât de bun e designul.

02

Traducem tot, nu doar interfața

Categoriile, denumirile, volumele, compozițiile, etichetele de gust și textele de prezentare primesc perechile lor în rusă și engleză. Livrăm meniul complet în trei limbi și verificarea automată care cade dacă o cheie rămâne netradusă.

03

Punem verificările înainte de prima publicare

Fără urmăritori, fără resurse de la terți, fonturi auto-găzduite, fișiere valide, fiecare fotografie prezentă, prețuri în ordine descrescătoare pe categorie, date structurate valide. Livrăm scriptul de verificare în depozit, ca localul să îl poată rula și fără noi.

04

Publicare automată din depozit, cu copie a versiunii anterioare

Publicarea se face la fuziunea modificării, după ce integrarea continuă a regenerat pagina și a comparat-o cu sursele, și după ce s-a păstrat o copie a versiunii de dinainte. Livrăm accesele și procedura de revenire — nu doar site-ul pornit.

1Fișiere de date(produse, texte,asocieri, traduceri)2generator Python3o singură pagină416 verificări(urmăritori, terți,fonturi, fotografii,trei limbi, prețuridescrescătoare)5publicare automată,cu copie a versiuniianterioare
Traseul, în 5 pași

Datele

Ce atingem, unde stau și cât rămân

Regulile diferă de la o industrie la alta. Acestea sunt cele care se aplică în restaurante & horeca.

Nu se colectează nimic despre client
Fără cont, fără cookie, fără urmăritori, fără resurse cerute de la domenii terțe. Coșul și favoritele trăiesc în browserul vizitatorului. Nu există la noi și nici la local o listă cu ce a răsfoit cineva în meniu — nu pentru că am șters-o, ci pentru că nu se creează.
Ce rămâne în jurnalele serverului
Cererile obișnuite ale unui server web, cu adresa IP mascată, fără antetele de identificare, păstrate un interval limitat. Sunt scrise în configurația de server, verificate automat și motivate cu principiul limitării stocării — nu lăsate la valorile implicite ale programului.
Meniul, prețurile, rețetele și fotografiile aparțin localului
Noi construim structura, generatorul și verificările. Conținutul e al lui și se schimbă la decizia lui. Nu publicăm nicio cifră de preț ca exemplu în materialele noastre, nici ilustrativ.
Ce se întâmplă când localul vrea și un asistent în pagină
Se poate, dar înseamnă că politica de conținut a paginii trebuie să permită exact acel domeniu și nimic altceva. Pe unul dintre cele două site-uri asta e vizibil din exterior: politica permite un singur domeniu extern, cel al asistentului. Diferența dintre „permitem un domeniu” și „permitem tot” e toată discuția despre urmărire.
Datele de rezervare, dacă apar, schimbă regulile
În momentul în care meniul primește un formular de rezervare, apar nume, telefon și oră — adică date personale, cu termen de păstrare, cu un loc unde ajung și cu cineva care le vede. Atunci se scrie și politica publicată a localului. Până atunci, meniul e o pagină care nu colectează nimic, și e mai simplu să rămână așa dacă rezervările se fac la telefon.

Un caz

O verificare care cere ca prețurile să coboare în fiecare categorie

Situația

Într-un meniu cu peste o sută de poziții, greșeala cea mai frecventă nu e de design, ci de tastare: o cifră în plus la un preț sau o poziție rămasă fără fotografie. Amândouă se descoperă, de obicei, când clientul le arată ospătarului.

Ce am construit

Am pus înainte de publicare un script de verificare — 233 de linii într-un local, 210 în celălalt — care rulează șaisprezece, respectiv paisprezece blocuri: că nu s-a strecurat niciun urmăritor, că pagina nu cere nimic de la un domeniu terț, că fonturile sunt găzduite local, că fișierele de date sunt valide și fiecare fotografie există, că meniul e complet în toate trei limbile, că datele structurate din pagină sunt valide și că prețurile coboară în fiecare categorie. Separat, integrarea continuă regenerează pagina din surse la fiecare modificare și o respinge dacă rezultatul diferă de fișierul publicat.

Ce a ieșit

O greșeală de tastare la preț rupe ordinea descrescătoare și oprește publicarea, iar o fotografie lipsă nu ajunge niciodată pe ecranul de la masă. Pagina publicată corespunde întotdeauna datelor pe care le editează localul, pentru că altfel nu se publică.

Ce nu spune cazul

Verificările prind ce se poate verifica mecanic. Un preț introdus greșit, dar plauzibil — și în ordine — trece; pentru el nu există alt mecanism decât cineva care se uită. Documentația unuia dintre proiecte spune „14 verificări” acolo unde scriptul are 16 blocuri; cifra corectă e cea din script.

Întrebări

Ce întreabă cineva din restaurante & horeca

Putem schimba singuri prețurile și scoate un fel din meniu?

Da. Se editează datele, nu pagina; pagina se regenerează din ele. Integrarea continuă verifică regenerarea la fiecare modificare și respinge modificarea dacă pagina publicată nu mai corespunde surselor. Așa nu există scenariul în care cineva a corectat un preț direct în pagină și modificarea a dispărut la următoarea publicare.

De ce contează că nu puneți cookie-uri?

Pentru că un meniu care nu colectează nimic nu are nevoie de bandă de consimțământ, nu are ce scurge și nu are nimic de explicat unui controlor. Verificarea e la îndemâna oricui: o singură cerere către site arată că nu se întoarce niciun antet de cookie. Iar politica de conținut a unuia dintre localuri nu permite absolut nicio resursă din exterior.

Meniul poate prelua comanda?

Coșul funcționează în browser, ca listă pe care clientul o arată ospătarului sau o folosește la împărțirea notei. Trimiterea comenzii în bucătărie cere o conexiune la sistemul localului și e o lucrare separată, cu verificare de compatibilitate înainte. Nu numim „comandă online” un coș care nu ajunge nicăieri.

Putem pune „happy hour” sau ofertă de seară?

Se poate construi, dar nu o pornim fără acordul scris al localului, pentru că e o promisiune care se onorează la casă. Regula noastră: funcțiile care angajează localul față de client — reduceri, orare de bucătărie, disponibilități — nu se publică pe baza unei discuții verbale.

În câte limbi și cât de complet?

Trei: română ca bază, rusă și engleză. Complet înseamnă categorii, denumiri, volume, compoziții, etichete de gust și textele de prezentare, nu doar butoanele. O verificare automată cade dacă meniul nu e complet în toate trei — de aceea nu ajunge pe site pe jumătate tradus.

Cum vă asigurați că nu apare un preț greșit?

Printre verificările dinaintea publicării există una care cere ca prețurile să coboare în fiecare categorie. Nu e o regulă comercială, e un detector de greșeli de tastare: o poziție introdusă cu o cifră în plus sau în minus rupe ordinea și oprește publicarea. Restul verificărilor se ocupă de fotografii lipsă și de fișiere invalide.

Site-ul e rapid pe telefon, în local, pe date mobile?

Rezultatul e o singură pagină generată, cu fonturile găzduite pe același domeniu și fără resurse cerute de la domenii terțe. Asta înseamnă mai puține conexiuni de deschis și nimic care să aștepte după un serviciu extern. Nu publicăm cifre de viteză măsurate în alte condiții decât ale tale.

Putem adăuga un asistent care răspunde la întrebări despre meniu?

Da, și atunci politica de conținut a paginii permite exact acel domeniu, nimic altceva. Pe unul dintre cele două localuri asta se vede din exterior. Merită spus și reversul: în momentul acela pagina nu mai e „fără nimic din afară”, deci decizia se ia conștient, nu ca bonus.

Aveți două meniuri aproape identice în portofoliu. Sunt două lucrări?

Sunt două site-uri cu același motor, ale aceluiași proprietar, și spunem asta explicit. Diferența funcțională declarată între ele sunt recomandările de asociere per produs, pe care al doilea nu le are. Am putea să le prezentăm ca lucrări independente; ar fi o exagerare de portofoliu.

Ce ai vrea să funcționeze mai bine?

Povestește-ne despre procesul tău. Împreună stabilim ce merită construit, ce putem conecta și cum verificăm rezultatul.

Hai să discutăm