Kodza

Menu Board

A restaurant menu by service: dish, original name, a tabular price on a dotted leader, marks in icon and words. Opens on the service served now; tabs, or stacked with pinned titles (data-layout="stack").

Data display No dependencies menurestaurantprice listfoodtabsopening hoursallergens Added Nov 2026
/anim/menu-board/ GitHub Fullscreen

With your AI

Just ask.

Say it to your AI. It gets the exact code below, not its best guess, and knows where it goes.

Add the Kodza Menu Board to my page.

Not plugged in yet?
claude mcp add -t http kodza https://kodza.dev/api/mcp
Also in Codex, Cursor and VS Code.
kodza-menu-board.html
<div class="kodza-menu-board" data-kodza-menu-board data-timezone="Europe/Paris" data-label="Menu">
  <section class="kodza-menu-board__service" data-hours="12:00-14:30">
    <div class="kodza-menu-board__head">
      <h3 class="kodza-menu-board__title">Lunch</h3>
      <p class="kodza-menu-board__note">12:00 – 14:30 · Prices in euros, service included</p>
    </div>
    <ul class="kodza-menu-board__list">
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Mussels and fries <span class="kodza-menu-board__origin" lang="fr">Moules-frites</span></span><span class="kodza-menu-board__price">16.50</span></div>
        <p class="kodza-menu-board__desc">Bay mussels, white wine, shallots. The fries are cut here and fried twice.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="allergens">Contains shellfish, celery</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Fish of the morning <span class="kodza-menu-board__origin" lang="fr">Poisson du jour</span></span><span class="kodza-menu-board__price">21.00</span></div>
        <p class="kodza-menu-board__desc">Whatever the boats brought in at six. Butter, lemon, nothing to hide it.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="allergens">Contains fish, dairy</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Leek and Neufchâtel tart <span class="kodza-menu-board__origin" lang="fr">Tarte aux poireaux</span></span><span class="kodza-menu-board__price">13.00</span></div>
        <p class="kodza-menu-board__desc">The heart-shaped cheese from up the road, leeks from Gonfreville.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="veg">Vegetarian</span><span class="kodza-menu-board__mark" data-mark="allergens">Contains gluten, dairy, egg</span></div>
      </li>
      <li class="kodza-menu-board__dish kodza-menu-board__dish--out">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Grey shrimp <span class="kodza-menu-board__origin" lang="fr">Crevettes grises</span></span><span class="kodza-menu-board__price">9.50</span></div>
        <p class="kodza-menu-board__desc">A bowl of shrimp and bread. You peel them, we don’t judge.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="out">Sold out</span><span class="kodza-menu-board__mark" data-mark="allergens">Contains crustaceans</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Teurgoule</span><span class="kodza-menu-board__price">7.00</span></div>
        <p class="kodza-menu-board__desc">Rice pudding baked five hours with cinnamon. Normandy patience.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="veg">Vegetarian</span><span class="kodza-menu-board__mark" data-mark="allergens">Contains dairy</span></div>
      </li>
    </ul>
  </section>
  <section class="kodza-menu-board__service" data-hours="19:00-22:30">
    <div class="kodza-menu-board__head">
      <h3 class="kodza-menu-board__title">Dinner</h3>
      <p class="kodza-menu-board__note">19:00 – 22:30 · Last orders at 22:00</p>
    </div>
    <ul class="kodza-menu-board__list">
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Fish soup, rouille <span class="kodza-menu-board__origin" lang="fr">Soupe de poissons</span></span><span class="kodza-menu-board__price">11.00</span></div>
        <p class="kodza-menu-board__desc">Rockfish and saffron. The garlic and chilli rouille comes on the side.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="spicy">Spicy</span><span class="kodza-menu-board__mark" data-mark="allergens">Contains fish, egg</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Seared scallops <span class="kodza-menu-board__origin" lang="fr">Saint-Jacques snackées</span></span><span class="kodza-menu-board__price">26.00</span></div>
        <p class="kodza-menu-board__desc">From October to May. The rest of the year, we don’t pretend.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="allergens">Contains molluscs, dairy</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Duck with cider <span class="kodza-menu-board__origin" lang="fr">Canard au cidre</span></span><span class="kodza-menu-board__price">24.00</span></div>
        <p class="kodza-menu-board__desc">Pays d’Auge cider, apples cooked in the pan juices.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="allergens">Contains dairy, sulphites</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Leek and Neufchâtel tart <span class="kodza-menu-board__origin" lang="fr">Tarte aux poireaux</span></span><span class="kodza-menu-board__price">13.00</span></div>
        <p class="kodza-menu-board__desc">Same tart as lunch. It was good at noon, it still is.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="veg">Vegetarian</span><span class="kodza-menu-board__mark" data-mark="allergens">Contains gluten, dairy, egg</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Pear and Calvados <span class="kodza-menu-board__origin" lang="fr">Poire au calvados</span></span><span class="kodza-menu-board__price">9.00</span></div>
        <p class="kodza-menu-board__desc">One poached pear. The Calvados sits next to it, not hidden in it.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="vegan">Vegan</span></div>
      </li>
    </ul>
  </section>
  <section class="kodza-menu-board__service">
    <div class="kodza-menu-board__head">
      <h3 class="kodza-menu-board__title">Drinks</h3>
      <p class="kodza-menu-board__note">Until we close · Ask for the cider of the week</p>
    </div>
    <ul class="kodza-menu-board__list">
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Farm cider <span class="kodza-menu-board__origin" lang="fr">Cidre fermier</span></span><span class="kodza-menu-board__price">5.50</span></div>
        <p class="kodza-menu-board__desc">Dry, from the Pays d’Auge. 33 cl, cold.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="vegan">Vegan</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Pommeau</span><span class="kodza-menu-board__price">6.00</span></div>
        <p class="kodza-menu-board__desc">Apple juice and Calvados, aged together. Before dinner, not instead of it.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="vegan">Vegan</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Calvados</span><span class="kodza-menu-board__price">8.00</span></div>
        <p class="kodza-menu-board__desc">Three years in oak. Small glass, strong opinion.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="vegan">Vegan</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Lemonade <span class="kodza-menu-board__origin" lang="fr">Limonade artisanale</span></span><span class="kodza-menu-board__price">4.00</span></div>
        <p class="kodza-menu-board__desc">Made in Rouen. Sweet, but not stupid about it.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="vegan">Vegan</span></div>
      </li>
      <li class="kodza-menu-board__dish">
        <div class="kodza-menu-board__line"><span class="kodza-menu-board__name">Espresso</span><span class="kodza-menu-board__price">2.20</span></div>
        <p class="kodza-menu-board__desc">No refills. Ask for another one, we’ll make it.</p>
        <div class="kodza-menu-board__marks"><span class="kodza-menu-board__mark" data-mark="vegan">Vegan</span></div>
      </li>
    </ul>
  </section>
</div>

Checked

Checked before you paste.

Robots poked at it before you did. Every component goes through the same checks, and again each time it changes.

What ranLast run
Accessibilityaxe-core 4.10.2: the WCAG 2.1 A and AA rules, plus best practices. 0 issues
KeyboardThe Tab key gets there, and the focus ring shows when it does. Passed
Reduced motionTurn on reduced motion and what moved just appears. Nothing loops. Passed
Light and darkThe same checks on both themes, contrast included. Passed
WordPressPasted into Twenty Twenty-Five, Twenty Twenty-One, Astra, Blocksy, GeneratePress, Hello Elementor, Kadence and OceanWP. Nothing to flag. 8 / 8 themes
Robots checked this. A human with VoiceOver hasn't yet.
KeyboardPress them in the preview
On a tab
  • Shows the next or previous service, round and round→/←
  • Shows the first or last serviceHome/End
  • Skips the other tabs, on to the dishesTab

More like this

More in Data display