A menu worth keeping. For every restaurant on your client list.

The menus here are live right now — real URLs, served by the same code that would serve your client’s.

Every guest menu: server-rendered · no client-side data fetching · no third-party script

Heirloom · The WrenOpen full screen
Bodega · Carmelita'sOpen full screen
Heirloom · new american
Brasserie · bistros
Vitrine · tasting menus
Bodega · taquerias
Heirloom · The Wren · SupperOpen full screen

Now showing Heirloom — The Wren, Supper.

Four restaurants, four typographic systems

Pick one. It is the real page, not a picture of it.

Every theme below is a complete typographic system — faces, scale, colour roles, rule weights, ornament — and each one is rendered by the same code path, from the same token cascade, as the menu your client would get.

These are four different restaurants, which is the honest version of this demonstration: it proves the themes differ, not yet that your restaurant would. One menu set in all four is a content job we owe you.

The handoff

Your client can change a price. They cannot change the design.

The fear is not building the site. It is a client changing a price on a Saturday, breaking the layout, and calling you about it.

The Wren
Wednesday – Sunday
Supper
Half chicken off the hearth29
Catfish, cornmeal-crisped27
Sweet potato & sorghum22
Ribeye for the table86’d
Shaded: everything a client-safe editor may publish. A diagram of one section of The Wren’s live menu — the items and prices are the real ones.

Enforced in Postgres, not in a policy document.

An editor’s publish is compared structurally against the live version. Both are reduced to a skeleton with price, price mode and 86 state stripped out; if the skeletons differ, the publish is refused and the editor is told what else changed. You cannot get around it from the console, the API, or a client’s good intentions.

Price
editor may publish
Market price
editor may publish
86 / back on
editor may publish
Item names & descriptions
refused
Sections, order, add / remove
refused
Theme, tokens, brand kit
refused

Checked Aug 16, 2026

What is actually built, and what is not.

You are being asked to move a client portfolio onto a young platform, so here is the catch, dated, before the ask rather than after it. Nothing marked Planned has a date, because none of them has one.

The four themesFour complete typographic systems, live at real URLs and rendered by the production renderer. Not mockups — the links on this page are the product.Live
Guest menusServer-rendered from an immutable published snapshot: one HTML document, theme tokens inlined, fonts self-hosted, no client-side data fetching and no third-party script. A published menu revalidates on a 60-second window.Live
Allergens & dietsA controlled vocabulary of 11 allergens and 7 diet marks — the US FASTER Act "major nine" plus gluten and sulphites for EU Annex II overlap. Anything outside it is dropped by the publish pipeline and named in the warnings, so what reaches a guest stays filterable, printable and exportable.Live
Client-safe editorA real Postgres role, not a UI setting. An editor may publish only when the change against the live version is 86-and-price-only; anything else is refused by the database and the editor is told what else changed.Live
Publish & rollbackEvery publish writes an immutable snapshot, so what was on the menu in March is still readable. The snapshot machinery and its normalization rules are in; the console surface for browsing and restoring versions is being built.In build
The consoleThe shell, the menu builder and the preview stage run on demo data and are labelled as such wherever they appear. Accounts, billing and onboarding are not built.In build
Print / PDFThe central differentiator and the biggest gap. The token architecture is already format-agnostic and every theme carries CMYK values, but nothing composes a press file yet. Phase 2. No date.Planned
Multi-client consoleOne login across a portfolio, per-client roles and one invoice. Phase 3. No date.Planned
DaypartsOne QR code that switches menu by clock and day. Phase 4. No date.Planned
Migration inThere is no importer. Moving a menu across today means someone doing it by hand — which, at this size, is us doing it rather than you. No date on the automated path.Planned

For agencies & freelancers

Fourteen logins, fourteen renewals, and a client who broke the layout.

Two of those three are answered today — the editor role above, and a theme your client cannot reach past. The third, one console and one invoice across a portfolio, is Phase 3 and the ledger says so rather than the headline.

What to do next

Judge it on a phone, not on this page.

There is no signup form here yet, and putting one up would mean pointing you at onboarding that has not been built. The four menus on this site are live at real URLs, served by the same code that would serve your client's. Open one, scan it, and read the type at the size a guest reads it.

I run one restaurant, not an agency.

Then the theme is the whole decision, and it is the same four. Start by finding the one that already looks like your room.