Catalog data only refreshed on first boot, admin button click, or
checkout retry — nothing kept it fresh on a schedule despite the
cache-refresh endpoint being built for cron use. A Next instrumentation
hook was tried first but broke the build (middleware.ts forces
instrumentation.ts into the same edge bundle, which can't resolve
fs/path/crypto). Using a lightweight cron sidecar in the compose stack
instead, so it ships with the deployment regardless of host.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Admin panel shows a prominent open/closed toggle above the tabs. When
closed, the shop displays a branded closure message and the checkout API
returns 503. The closure state persists in data/store-status.json.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>