Live Menu Storefront
A live daily menu presented as an editorial list rather than a card grid. Stock and prices come straight from Postgres, so a batch that sells out shows as gone within the minute.

- Live Daily Menu: Items, prices and per-item stock are read from Postgres and revalidate every 30 seconds. If the query returns nothing, the storefront falls back to a local menu.json snapshot.
- WebGL Depth-Map Hero: A fragment shader displaces the hero photo along a grayscale depth map as the cursor moves. It falls back to a still image with no WebGL, on load failure, or with reduced motion.
- Editorial Menu List: Full-width, hairline-divided rows with a sticky preview panel on desktop that swaps photography on hover or keyboard focus.
- Category Filtering: Pill navigation whose active fill slides between categories instead of cutting.
- Item Customization: A slide-over sheet for modifiers and variants, with the price recalculating as you choose.
- Stock States: A depleted item reads “Gone for today”; five or fewer left reads “Only N left”.



