YamzWay Digital Menu and WhatsApp Ordering
A data-driven digital menu and ordering web app for YamzWay, a home-based Lebanese sandwich shop, with a custom sub builder and a cart that compiles orders into a formatted WhatsApp message.
Overview
YamzWay is a mobile-first web menu for a home-based Lebanese sandwich business (appetizers, subs, a "Build It Your Way" custom sub builder, and beverages). All menu content, including item names, descriptions, prices, and ingredient lists, lives in menu.json, so the entire catalog can change without touching HTML, CSS, or JS. The app lets a customer browse the menu, build a custom sub from grouped ingredient options, adjust quantities and ingredients inline, and check out through an overlay that collects name, phone, and delivery address before sending the full order as a pre-formatted WhatsApp message.
Approach
The site is a static, framework-free build: index.html provides structure, sections, and metadata (including Open Graph and Twitter card tags for link previews), styles.css handles a mobile-first green and yellow brand theme with animated nav and cart transitions, and app.js owns all behavior. The menu is fetched at runtime from menu.json and rendered into category cards; the "build-your-way" category is treated specially and rendered as an interactive chip-based builder (vegetables, cheeses, meats, sauces, priced protein add-ons) with a live running total. Cart state is kept in memory as an array of entries (item id, price, quantity, default ingredients, removed ingredients, and priced extras). A floating cart bar opens a full-screen checkout overlay where customers can adjust quantities, remove default ingredients, add more toppings to a custom sub, and leave a note per item. On submit, the app validates the customer/address fields, assembles an emoji-sectioned order summary, URL-encodes it, and opens the WhatsApp click-to-chat link with the message pre-filled so the order is sent directly to the shop's WhatsApp number.
Tech stack
- Vanilla HTML, CSS, and JavaScript (no framework, no build step, no bundler)
menu.jsonas the single source of truth for categories, items, prices, and build-your-own ingredient options- Google Fonts (Fraunces for display type, Inter for body text)
- WhatsApp click-to-chat API as the order submission channel
- Python
http.server(serve.py) as a local dev server with custom content-type and cache-control headers
Engineering highlights
- Fully data-driven menu rendering: category cards, item rows, and the interactive sub builder are built purely from
menu.json, so menu changes require no code edits. - Custom sub builder with toggleable chips grouped by ingredient type, a live ingredient count and running total, and a clear split between free toppings and priced add-ons.
- Per-item customization in the cart: default ingredients can be toggled off, and custom subs support adding more toppings after the initial build.
- Order-summary generation assembles a structured, emoji-sectioned WhatsApp message (customer info, delivery address, itemized order with kept/removed ingredients and per-item notes, grand total) entirely client-side, with no backend or payment processor involved.
- Consistent HTML-escaping helper applied to all menu and user-entered data before it is interpolated into the DOM, reducing injection risk from cart notes or menu content.
- Accessible mobile navigation: hamburger toggle with
aria-expanded/aria-hiddenstate management, focus handling on open/close, an IntersectionObserver-based scroll spy for active section highlighting, and aprefers-reduced-motionoverride. serve.pyexplicitly sets UTF-8 for JS/CSS/HTML and disables browser caching, addressing two common local-dev pitfalls: mojibake emoji and stale JavaScript after edits.
Want to dig deeper?
Ask my AI agent anything about how this was built, what tradeoffs I made, or how it could fit your team.
Ask my AI →// related projects
Dani Production
A single-page marketing site for a wedding film and photography studio, built around a cinematic scroll experience with GSAP-driven reveals and a pinned "process" timeline.
Linc Consultancy Website
A responsive marketing website for Linc Consultancy, a management consulting firm operating across Lebanon, Syria, Iraq, and the GCC, presenting its services, team, and regional presence.
PAL - Personal AI Live-Assistant
A voice-driven browser assistant that listens, thinks with Claude, and speaks back, with a second mode that lets it drive the Claude Code CLI as an autonomous coding agent by voice.