Restaurant menus guests read in their own language

Role
I designed and built it, on my own initiative
Started
September 12, 2026
Stack
Python, HTML, CSS, JavaScript, GitHub Pages
Status
Working versions for all 8 brands, ready for the group’s review
Live
Open the live menus

Working menus for all 8 brands of the restaurant group where I work. A guest scans the code at the table, picks one of 13 languages, and sees which dishes contain the allergens they avoid. They are ready for the group’s review.

Before

It started with one of the group’s restaurants. Its menu was a designed PDF, in English.

The problem

Guests at these restaurants read many languages first, but the menu came in one. A guest with an allergy had to ask about each dish.

The goal

One system every brand in the group could use: each dish in 13 languages with its allergens on the page, a printable menu for the table, and all of it built from one set of data, so a change is made once.

Decisions

  1. The allergen warning works even when nothing else does.

    Every page carries a plain menu inside the page itself, shown when JavaScript is off or fails to load, and each dish in it keeps its own allergen warning.

    Why: a guest with an allergy should never see a menu without its warnings, whatever phone or browser they use.

    Trade-off: that fallback is in English only, without the language switch or the photos.

  2. “Contains: Egg” only where it tells the guest something.

    An item that is just an egg, like a fried egg or a sous-vide egg on the side, no longer carries the line; dishes that are more than an egg, like egg fried rice, egg tarts and egg rolls, keep it. The allergen filter still reads the full data, so a guest who marks egg still sees every one of those items flagged or hidden.

    Why: on a dish that is an egg, “Contains: Egg” says nothing, and warnings that say nothing teach guests to skip them.

  3. Right to left is the whole layout, not just the text.

    In Arabic, Farsi and Urdu the whole page mirrors and reads from the right, not just the text. In the printed menus, prices and English names inside those lines keep reading left to right.

    Why: a mirrored sentence inside a left-to-right page still reads as a translation stuck onto an English menu.

  4. Each script gets its own print rules.

    The PDFs set Korean, Chinese, Japanese, Arabic, Farsi, Hindi and Russian each in a typeface drawn for that script, Urdu in its traditional Nastaliq style, with taller lines where the script needs them, no capitals or letter-spacing where a script has no capitals, and line breaks that follow Korean and Japanese rules.

    Why: a printed menu in the wrong typeface, or with clipped letters, is the first thing a native reader notices.

What I built

Limits

Result

13 languages, 3 of them right to left

The menu build’s language list

8 brands, every one with a working menu

The menu repository

195 print-ready PDFs

As of September 2026 · the menu repository

Every brand in the group has a menu a guest can read in their own language, with the allergen warnings on every dish, on the phone and on paper.

Next

The group’s review, the kitchen’s sign-off on the allergen lines, and a native speaker’s read of each language.

Contact

Want a menu like this for your restaurant? QR menus start at $1,200. Email me at hanjames1999@gmail.com; I reply within one business day.

Email me hanjames1999@gmail.com