Um menu em código QR que se lê no telemóvel, em meia-luz, em três línguas — e que não coloca nenhum cookie.
O menu de um espaço não é uma brochura: tem preços e volumes que têm de ser exatos, muda com frequência e é lido por pessoas que falam três línguas. Construímos o menu como dados, geramos a página a partir deles e verificamos antes de cada publicação, incluindo que os preços descem em cada categoria e que cada imagem existe.
Já construídoDouă 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.
Um PDF digitalizado num código QR não resolve nada do que um local tem de resolver. Não é pesquisável, não é traduzido, não aumenta como deve ser no telemóvel e não pode ser alterado sem voltar a imprimir o código. E o menu muda com frequência: a cozinha retira um prato, o bar recebe outra marca, o preço de uma posição sobe. O menu é um conjunto de dados que muda semanalmente, não um documento impresso uma vez.
Por isso tratamo-lo como dados. As fontes reais são alguns ficheiros estruturados — produtos, textos de apresentação, recomendações de combinação, traduções — e um gerador escrito em Python compõe deles uma única página. Num dos espaços: 119 produtos em 21 categorias, cada um com preço, volume, composição e fotografia, mais 119 textos curtos e 119 conjuntos de «com o que combina». No outro: 146 produtos em 31 categorias. A página não é editada diretamente — é regenerada.
A tradução não se fica pelos botões. O romeno é a base, e o russo e o inglês cobrem as categorias, as designações, os volumes, as composições, as 82 etiquetas de sabor e todos os textos de apresentação. Numa cidade em que a mesa vizinha encomenda noutra língua, um menu traduzido pela metade é mais irritante do que um não traduzido: deixa-vos pensar que conseguem ler tudo.
A parte que consideramos mais importante e que ninguém pede no briefing: o carrinho, a lista de favoritos e a divisão da conta correm no navegador, sem conta e sem servidor, e o site não coloca nenhum cookie nem pede nada a um domínio terceiro. Não é uma promessa da política de privacidade — é uma regra imposta por verificações automáticas que correm antes de cada publicação e que rejeitam a alteração se apareceu algum rastreador, algum recurso externo ou alguma fonte vinda de outra parte.
Qué incluye
O que muda concretamente em restaurantes & horeca
O menu é um conjunto de dados, e a página é gerada a partir dele
Os produtos, os textos de apresentação, as recomendações e as traduções ficam em ficheiros estruturados; um gerador escrito em Python — 402 linhas num local, 377 no outro — compõe a partir deles uma única página. A página publicada não é editada à mão; quando alguém o faz, a integração contínua apanha-o, porque regenera a página e compara o resultado.
Cada posição tem preço, volume, composição e fotografia
Num bar, o volume faz parte do preço: a mesma designação a 40 e a 100 mililitros são dois produtos diferentes, e o cliente que não vê o volume pensa que lhe foi dito outra coisa. A estrutura de dados trata estes quatro campos como obrigatórios, não como opcionais, precisamente para que uma posição incompleta não chegue à mesa.
Três línguas, até à última etiqueta de sabor
A tradução cobre a interface, as categorias, as designações, os volumes, as composições, as 82 etiquetas de sabor e todos os textos curtos de apresentação, tendo cada chave romena a sua correspondência em russo e inglês. Uma das verificações antes da publicação falha se o menu não estiver completo nas três línguas.
O carrinho, os favoritos e a divisão da conta correm no browser
Sem conta, sem servidor, sem dados enviados para lado nenhum. O cliente compõe o seu pedido no telemóvel e mostra-o ao empregado de mesa ou usa-o para dividir a conta. Consequência técnica: não existe uma base com o que os teus clientes pediram, porque não é criada nenhuma.
Zero cookie e nada de domínios de terceiros
Verificado externamente: nenhum cabeçalho de cookie em nenhum dos dois sites, e a política de conteúdo de um deles não permite absolutamente nada do exterior. Os tipos de letra estão alojados no mesmo domínio, não num serviço externo. Os únicos endereços externos na página são os links para as redes sociais do estabelecimento — que o visitante clica, não a página chama.
Verificações antes de cada publicação, incluindo as aborrecidas
Dezasseis blocos de verificação num local, catorze no outro: sem seguidores, sem recursos carregados automaticamente de terceiros, tipos de letra auto-hospedados, ficheiros estruturados válidos, cada fotografia existe, o menu completo em três línguas, os dados estruturados da página válidos e — a que surpreende toda a gente — os preços descem em cada categoria. Um preço introduzido incorretamente vê-se como uma descontinuidade na ordem da lista, não na reclamação do cliente.
A página publicada corresponde sempre às fontes
A cada alteração, a integração contínua regenera a página a partir das fontes e rejeita a alteração se o resultado diferir do ficheiro no repositório. É a única garantia real de que o que está no ecrã do cliente vem dos dados que o estabelecimento edita localmente, e não de uma intervenção manual esquecida lá há três meses.
Os registos do servidor não guardam endereços IP completos
Na configuração de servidor de um dos estabelecimentos: máscara nos endereços IP, cabeçalhos de identificação apagados do registo e retenção limitada, com referência explícita ao princípio da limitação da conservação. A integração contínua recusa a alteração se estas linhas desaparecerem da configuração — portanto, a proteção não se pode perder silenciosamente numa mudança de servidor.
O que um menu digital não faz
Não recebe o pedido na cozinha e não confirma uma reserva: para isso é necessária uma ligação ao sistema de gestão do estabelecimento, que é um trabalho separado. E não publicamos funções que prometam algo que tem de ser cumprido na caixa — um desconto do tipo “happy hour” ou um horário da cozinha não se ativam sem o acordo escrito do estabelecimento, porque quem paga pela promessa no ecrã é a pessoa ao balcão.
Traseul
Como um pedido passa pelo sistema.
01
Estruturamos o menu antes de desenhar qualquer coisa
A primeira entrega é o menu como dados: categorias, itens, preço, volume, composição, fotografia. Aqui também se descobrem as lacunas — itens sem volume, categorias que afinal são duas, produtos sem fotografia. Um menu digital construído sobre dados incompletos parece incompleto, por melhor que seja o design.
02
Traduzimos tudo, não apenas a interface
As categorias, as denominações, os volumes, as composições, as etiquetas de sabor e os textos de apresentação recebem os seus pares em russo e inglês. Entregamos o menu completo em três línguas e a verificação automática que falha se uma chave ficar por traduzir.
03
Colocamos as verificações antes da primeira publicação
Sem rastreadores, sem recursos de terceiros, fontes auto-hospedadas, ficheiros válidos, cada fotografia presente, preços em ordem decrescente por categoria, dados estruturados válidos. Entregamos o script de verificação no repositório, para que o local o possa executar mesmo sem nós.
04
Publicação automática a partir do repositório, com cópia da versão anterior
A publicação é feita na fusão da alteração, depois de a integração contínua ter regenerado a página e a ter comparado com as fontes, e depois de ter sido guardada uma cópia da versão anterior. Entregamos os acessos e o procedimento de reversão — não apenas o site a funcionar.
Traseul, în 5 pași
Os dados
Qué tocamos, dónde están y cuánto se quedan
As regras diferem de um setor para outro. Estas são as que se aplicam a restaurantes & horeca.
Não se recolhe nada sobre o cliente
Sem conta, sem cookie, sem rastreadores, sem recursos pedidos a domínios terceiros. O carrinho e os favoritos vivem no navegador do visitante. Não existe connosco nem no local uma lista do que alguém navegou no menu — não porque a tenhamos apagado, mas porque não é criada.
O que fica nos registos do servidor
Os pedidos normais de um servidor web, com o endereço IP mascarado, sem cabeçalhos de identificação, guardados por um intervalo limitado. São definidos na configuração do servidor, verificados automaticamente e justificados com o princípio da limitação do armazenamento — não deixados nos valores predefinidos do programa.
O menu, os preços, as receitas e as fotografias pertencem ao local
Nós construímos a estrutura, o gerador e as verificações. O conteúdo é dele e muda por decisão dele. Não publicamos nenhum número de preço como exemplo nos nossos materiais, nem de forma ilustrativa.
O que acontece quando o local quer também um assistente na página
É possível, mas isso significa que a política de conteúdo da página deve permitir exatamente esse domínio e mais nenhum. Num dos dois sites isso é visível de fora: a política permite um único domínio externo, o do assistente. A diferença entre „permitimos um domínio” e „permitimos tudo” é toda a discussão sobre rastreamento.
Os dados de reserva, se existirem, mudam as regras
No momento em que o menu recebe um formulário de reserva, surgem nome, telefone e hora — ou seja, dados pessoais, com prazo de conservação, com um lugar para onde vão e com alguém que os vê. Então também se escreve a política publicada do local. Até lá, o menu é uma página que não recolhe nada, e é mais simples que assim permaneça se as reservas forem feitas por telefone.
Un caso
Uma verificação que exige que os preços desçam em cada categoria
A situação
Num menu com mais de cem itens, o erro mais frequente não é de design, mas de digitação: um algarismo a mais num preço ou um item sem fotografia. Ambos são descobertos, geralmente, quando o cliente os mostra ao empregado de mesa.
Qué construimos
Antes da publicação, colocámos um script de verificação — 233 linhas num local, 210 no outro — que executa dezasseis, respetivamente catorze, blocos: que não entrou nenhum rastreador, que a página não pede nada a um domínio de terceiros, que os tipos de letra são alojados localmente, que os ficheiros de dados são válidos e que cada fotografia existe, que o menu está completo em todas as três línguas, que os dados estruturados na página são válidos e que os preços descem em cada categoria. Em separado, a integração contínua regenera a página a partir das fontes em cada alteração e rejeita-a se o resultado diferir do ficheiro publicado.
Qué salió
Um erro de digitação no preço quebra a ordem decrescente e impede a publicação, e uma fotografia em falta nunca chega ao ecrã da mesa. A página publicada corresponde sempre aos dados que o local edita, porque, caso contrário, não é publicada.
Qué no dice el caso
As verificações apanham o que pode ser verificado mecanicamente. Um preço introduzido incorretamente, mas plausível — e em ordem — passa; para ele não existe outro mecanismo além de alguém que olhe. A documentação de um dos projetos diz «14 verificações» onde o script tem 16 blocos; a cifra correta é a do script.
Perguntas
O que alguém dos restaurantes & horeca pergunta
Podemos mudar nós próprios os preços e retirar um prato do menu?
Sim. Editam-se os dados, não a página; a página é regenerada a partir deles. A integração contínua verifica a regeneração em cada alteração e rejeita a alteração se a página publicada já não corresponder às fontes. Assim, não existe o cenário em que alguém corrigiu um preço diretamente na página e a alteração desapareceu na publicação seguinte.
Porque é que importa que não ponham cookies?
Porque um menu que não recolhe nada não precisa de faixa de consentimento, não tem nada para vazar e não tem nada para explicar a um controlador. A verificação está ao alcance de qualquer pessoa: um único pedido ao site mostra que não é devolvido nenhum cabeçalho de cookie. E a política de conteúdo de um dos locais não permite absolutamente nenhum recurso externo.
O menu pode receber a encomenda?
O carrinho funciona no navegador, como uma lista que o cliente mostra ao empregado de mesa ou usa para dividir a conta. O envio da encomenda para a cozinha exige uma ligação ao sistema do local e é um trabalho separado, com verificação de compatibilidade antes. Não chamamos «encomenda online» a um carrinho que não chega a lado nenhum.
Podemos pôr «happy hour» ou uma oferta da noite?
Pode ser construído, mas não o iniciamos sem o acordo escrito do local, porque é uma promessa que se cumpre na caixa. A nossa regra: as funções que vinculam o local perante o cliente — descontos, horários da cozinha, disponibilidades — não são publicadas com base numa conversa verbal.
Em quantas línguas e com que nível de completude?
Três: romeno como base, russo e inglês. Completo significa categorias, nomes, volumes, composições, etiquetas de sabor e os textos de apresentação, não apenas os botões. Uma verificação automática falha se o menu não estiver completo nas três — por isso não chega ao site meio traduzido.
Como se asseguram de que não aparece um preço errado?
Entre as verificações antes da publicação existe uma que exige que os preços desçam em cada categoria. Não é uma regra comercial, é um detetor de erros de digitação: um item introduzido com um algarismo a mais ou a menos quebra a ordem e impede a publicação. As restantes verificações tratam de fotografias em falta e de ficheiros inválidos.
O site é rápido no telemóvel, em local, com dados móveis?
O resultado é uma única página gerada, com as fontes alojadas no mesmo domínio e sem recursos pedidos a domínios terceiros. Isso significa menos ligações para abrir e nada a aguardar por um serviço externo. Não publicamos números de velocidade medidos em condições diferentes das suas.
Podemos adicionar um assistente que responde a perguntas sobre o menu?
Sim, e então a política de conteúdo da página permite exatamente esse domínio, mais nada. Num dos dois locais isso vê-se do exterior. Vale a pena dizer também o reverso: nesse momento a página já não é «sem nada do exterior», por isso a decisão é tomada conscientemente, não como bónus.
Têm dois menus quase idênticos no portefólio. São dois trabalhos?
São dois sites com o mesmo motor, do mesmo proprietário, e dizemo-lo explicitamente. A diferença funcional declarada entre eles são as recomendações de associação por produto, que o segundo não tem. Poderíamos apresentá-los como trabalhos independentes; seria um exagero de portefólio.