2026-05-07 on prod. Reverses the 2026-05-02 hide-call: Pro features on Cafe Starter now render visibly but disabled with an "Available on Pro" affordance, instead of being removed from the UI. Drives upsell — Starter users see what they'd unlock by upgrading. Lumière now demos as a Starter-shaped tenant (1 active shop, BKK1); multi-shop / Kitchen / Orders / Cash live as locked controls.
<LockedForTier> — wraps any element to render visible-but-disabled when current tenant plan < required, with a lock icon corner badge + "Available on Pro" tooltip + click-catcher overlay. Plus a tierLockProps() helper for buttons that already own their layout (returns { disabled, title, aria-label }).<LockedForTier>. Renders even when Starter has only 1 shop. (Screenshots 02 + 03)<PosLanding> shape with one card per accessible shop showing open/closed status + today's sold + count + cash float. Card click opens the lockable shell at /cafe/pos/register/<configId> in a new tab, same flow as Pro. New buildStarterLanding() DAO reads from cafe.sessions + cafe.orders aggregates. (Screenshot 04)/cafe/orders instead of being greyed. Cash + Kitchen remain Pro-only. (Screenshot 05)tierLockProps. Same set on both surfaces so the cashier sees consistent locked controls regardless of entry point./cafe/kitchen/[shopId] on Starter now renders a friendly upsell page instead of notFound(). Defense-in-depth — UI doesn't mint kitchen URLs for Starter, so this only fires on stale bookmarks.POST /admin/tenants/:id/shops blocks Starter at ≥1 active shop with 403 + clear message. UI side now matches the data side.