Files
menu/CONTEXT.md
T
tanshu c31b73d553 Let the owner manage categories, and give the menus a shelf
Categories were baked into config/<site>.site.json, so adding one meant a
rebuild and a redeploy. They are now data: data/sections.json, seeded from the
config the first time, and managed in the admin (add, rename, reorder, remove).
A category's web address is fixed when it is created because that is what a QR
code points at, and a category cannot be removed while it still holds menus.

The landing and the top bar were the ugliest parts. The landing was a column of
hairlines with tiny meta — a broadsheet, and the paper that makes this app worth
looking at was nowhere on it. It is now a shelf: each category is a row whose
right edge is a sliver of that menu's first page, bleeding off the screen, with
the shelf edge in brass and the name in heavy tight Archivo. The bar was a row
of teal pills that would not survive more categories: it now names the menu you
are reading and opens a sheet listing the rest, each with its own paper sliver,
and the current one is the only teal thing on screen. The sheet is a link to the
landing page, so navigating still works without the script.

Also fixes the category manager's own layout, which I shipped unstyled, and the
markup contract the route tests described.
2026-09-22 22:24:53 +05:30

2.4 KiB

Menu Publishing

Publishing the customer-facing menus of several brewery-restaurant Sites. A Site serves photographed pages of its printed menus, grouped into Sections and published as Menu Sets.

Language

Structure

Site: One restaurant's customer-facing menu deployment, with its own brand, Sections and content. Each Site runs its own instance of the app. Avoid: brand, tenant, deployment, instance

Section: A top-level category of menu content that customers choose between, such as Food, Bar or What's On. Sections are content: the owner adds and renames them in the admin. Avoid: type, tab, folder

The admin, and the owner, say category where the code and this glossary say Section. The two words mean the same thing; the code keeps Section so the storage layout, routes and manifests stay consistent.

Menu Set: One complete set of Pages published together for a Section, with a label and an optional valid-until date. Avoid: menu, version, batch, upload, album

Page: One image within a Menu Set, in a deliberate order; usually a photographed page of a printed menu. Avoid: sheet, slide, image, photo

Poster: A Page whose content is an event or seasonal creative rather than a menu, published in the What's On Section. Avoid: flyer, banner, creative

Publication

Draft: A Menu Set that has been uploaded but is not visible to customers.

Current: The single published Menu Set per Section that customers see. Avoid: live, active, main

Archive: A Menu Set that was once Current and has been superseded. Reachable by direct URL, never listed in customer navigation. Avoid: old menu, history, expired, past

Publish: The act of making a Draft Current, which archives the Menu Set that was Current before it. Avoid: release, deploy, go live

Images

Original: The uploaded image as stored, kept so that viewing images and thumbnails can be regenerated. Never served to customers. Avoid: source, master, full-size

Viewing image: The wide image shown on a Section page and opened by tap-to-zoom. Avoid: preview, display image

Thumbnail: The small image used only inside the admin. Avoid: preview, grid image

Surfaces

Landing page: The Site root, listing the Sections that have a Current Menu Set. Avoid: home, index

Admin: The password-protected area where a Menu Set is uploaded, ordered, previewed and published. Avoid: dashboard, CMS, back office