Files
tanshu 32eeed144f Let the owner change the name, the icon and the dates
Three things that needed a rebuild and a redeploy, or had no way in at all, now
have a Site identity panel in the admin: the restaurant's name and tagline, an
SVG icon upload, and a switch for whether a menu says when it was published.
They live in data/site.json and data/brand/icon.svg, extending ADR 0007: what
the owner changes is content, and the config is the seed plus the theme, which
still needs a rebuild.

An uploaded SVG is a document that would run with this origin's authority, so it
is reduced to shapes on the way in and served with default-src 'none'. The
archive list keeps its dates even when the switch is off, because those dates
are how one old menu is told from another.

Also fixes the live check's own trap: the app caches identity in memory, so the
tests drive it through the app rather than a second store instance, which would
be a second writer.
2026-09-22 23:11:40 +05:30

75 lines
2.6 KiB
Markdown

# 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 identity**:
The restaurant's name, tagline, icon and display switches, as customers see them. Edited in the admin, stored in the Site's data rather than its configuration.
_Avoid_: brand config, theme
**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