Summary
Admin i18n, a full palette-switcher, and a redesigned dish-edit experience. The biggest operator-visible change is the new 0003_primary_locale.sql migration (see Upgrade actions).
Breaking changes
None.
Upgrade actions
Run the primary-locale migration on your D1 database before deploying:
wrangler d1 migrations apply <your-db-name> --remoteThis applies 0003_primary_locale.sql, which adds a primary_locale column to the settings table (default 'it'). Skipping it causes the /catalog endpoint to return a malformed primaryLocale value, which in turn breaks the Save button on the admin Settings page.
What's new
Palette switcher
- 7 built-in palettes: Terracotta, Forest, Slate, Aubergine, Rose, Charcoal, Saffron
- Clicking a swatch instantly reapplies 6 CSS vars across the entire admin UI and the public menu (live preview, no save required)
- Selection is persisted to
restaurant.theme.paletteand re-applied on every page load viaThemeProvider - All previously hardcoded accent hex values in admin pages replaced with CSS vars — they now track the active palette
Admin i18n
- Admin UI fully internationalised; language follows the operator's browser preference
- Runtime language picker in the admin header
- Per-restaurant primary menu locale configurable from Settings › Languages
Dish edit UX
- Dish edit moved to its own full-page route (
?s=entries-edit) instead of an overlay - Edit page includes a phone-frame live preview that tracks the active menu tab
- Category edit retains the slide-in side panel
- Shared view components between admin preview and public menu page
Settings
- Settings sub-sections reachable from mobile viewports via a top nav
- Single-column layout on narrow screens
Local dev
backend/scripts/seed-from-demo.ts(npm run seed:demo): bootstraps the local D1 from the live demo API catalog, including schema migration patches for fresh DBswrangler devnow starts with--persist-to .wrangler/stateso saves survive hot-reloads