Menu v2 Concept

When we realized how complex menus really are, we started building tools to make setup and management easier across multiple channels. A well-structured menu needs categories, items, modifiers, modifier options, and sometimes different versions based on the time of day. To handle this, we built a core model with four entity types—Menus, Categories, Products, and Product Groups—organized in a tree structure.

This setup lets restaurateurs reuse entities without duplicating them. Update something once, and it updates everywhere it’s used. That means less busywork and smoother menu management.

Screenshot 2025-04-07 at 14.36.31.png

But we didn’t stop there. Many of our customers run multiple locations, and their menus are usually the same across them. Instead of creating and maintaining separate menus for each location, we introduced Menus as templates—digital blueprints that can be deployed across locations. Change one menu, and the update automatically rolls out everywhere.

Take a fast-food chain like Cravewave Burger. Many items—burgers, fries, onion rings—offer the same set of sauces. Instead of defining sauces separately for each item, we create one modifier group called “Add a sauce” and attach it wherever it’s needed. Add a new sauce once, and it automatically appears on every product that uses the group. It’s simple, efficient, and consistent.

But what if a specific sauce isn’t available for a certain item? No problem. You don’t need to create a separate modifier group. You can control availability at the product level, directly from the shared group.

Screenshot 2025-04-07 at 14.37.46.png

But reuse like this can introduce complexity—especially when items need different properties depending on where they appear in the menu. Pricing is the most common case.

For example, Cravewave Burger sells “French Fries” on their own for $2. But when part of a combo meal, they drop to $1. Same item, different context, different price.

To handle this, we sync pricing directly from the POS. This lets us set prices based on how the item is accessed—whether through a category as a stand-alone or as a modifier in a combo. The result: flexible pricing that fits real-world menu logic.

Screenshot 2025-04-07 at 14.42.12.png

Now that we’ve covered how we model menus internally, let’s add another layer: adapting those menus across different channels.

Adapting Menus for External Channels

Our menus don’t just power our own online storefront—they’re also used on third-party delivery platforms like Uber Eats, DoorDash, and Grubhub. The challenge? Each platform structures menus differently and stores different kinds of data per item.

To handle this, our internal menu model acts as a superset of all possible data across channels. It captures everything needed for each platform without overwhelming the restaurant team with unnecessary complexity.

Each delivery service has limitations. Some don’t support nested modifiers (e.g., toppings on a topping), so we flatten them out automatically. Others don’t allow the same item to appear both as a standalone product and as an add-on. In those cases, we duplicate the item in the external menu while linking both versions back to the same source internally.

We’ve built a robust integration layer to convert and sync menus across platforms—but that’s a deep dive for another day.

Menus at Scale Are Even Harder

Many of our customers operate across multiple locations—not just channels. And while menus are usually consistent across these locations, updating them individually doesn’t scale.

Imagine Cravewave Burger has 50 locations. Adding a new seasonal item shouldn’t mean editing 50 separate menus.

Introducing Template Menus

To solve this, we built template menus. These act as digital blueprints that can be shared across locations. Update a template once, and it rolls out everywhere it's used—saving time and reducing errors.

But shared templates don’t mean identical menus. While locations may share most menu data, many details—like pricing and availability—still need flexibility.

Handling Differences Across Locations

By default, an product on a template has a single price that propagates to all locations. But in reality, pricing often varies by location, by channel, and based on where the item appears on the menu (e.g., standalone vs. add-on). We support all of these variations.

Availability works the same way. An operator might want to mark an item as out of stick at one location while it remains available at others—or mark it unavailable across all locations at once. Our system links each item on a template to every instance of that item across all channels and locations, so updates like these can be done with a single action.

Menus can also differ structurally between locations. Some items or categories may be region-specific. For example, global fast-food chains often offer regional specialties not found in other markets.

In short, we designed template menus to provide both scale and flexibility—one menu to manage many, without losing control at the local level.

Keeping Menus in Sync

When you’re managing menus across locations and channels, staying in sync becomes critical. If an item is removed or updated on the template, that change needs to cascade correctly across every connected version—without breaking links or causing inconsistencies.

To make this work, we maintain a clear relationship between template entities and their local versions. Each item, category, and modifier on a template has a mapped counterpart at each location and channel, allowing us to push updates precisely where they’re needed.

This also applies to more complex changes. Say a restaurant wants to restructure its combo meals across all locations—changing modifier groups, updating pricing logic, and adding new options. With our system, those changes can be made once on the template and confidently rolled out everywhere, knowing each variation (by location or channel) will still behave as expected.

Why It Matters

For small restaurants, menu management is already a challenge. For large brands operating across dozens (or hundreds) of locations and multiple ordering channels, it becomes a logistical nightmare—unless you have the right infrastructure.

By building a flexible, scalable, and intelligent menu system, we make it possible for restaurants to move fast, stay consistent, and deliver great customer experiences everywhere they serve food.