English source · 2 min
storefront/shell
Store navigation/controller, debounced catalogue and opt-in personalization.
Each file starts with its responsibility. See the source inventory for the full map.
Modules
CatalogNavigation.tsx: Public category navigation uses the same tenant/channel tree as the listing API, with translated names.CollectionView.tsx: CollectionView: storefront view composed from the scoped cart/controller.CompanyLegalPage.tsx: Directly reachable channel legal page; renders only the server's explicit public projection as text.ConciergeView.tsx: ConciergeView: storefront view composed from the scoped cart/controller.Storefront.tsx: Storefront composition root: cart context, routes, customer account and checkout.StorefrontContext.ts: Local storefront context, scoped to the mounted tenant and sales channel.StorefrontHeader.tsx: StorefrontHeader: storefront view composed from the scoped cart/controller.StorefrontHome.tsx: StorefrontHome: storefront view composed from the scoped cart/controller.StorefrontLanguage.tsx: Shop-configured content languages, including custom locales; the interface keeps its supported language vocabulary.useCatalog.ts: Cursor catalogue loading, debounced filters and stale-response protection.useCompanyIdentity.ts: Channel-scoped public brand/legal identity; stale responses cannot leak across tenants or languages.usePersonalization.ts: Opt-in behavior signals and stable product ordering; no authoritative prices are changed.useStorefrontController.ts: Cart lifecycle, authoritative checkout commands and storefront coordination.
useStorefrontAnchors.ts restores section scrolling after SPA rendering, with reduced-motion support. ConciergeView starters prepare an editable question and reuse the existing cart-scoped recommendation API only on explicit submission.
Verification
Run npm run build, npm test, npm run test:coverage and npm run architecture from frontend/. Coverage includes untested source files. See testing and limitations; file presence does not mean full test coverage.
useCompanyIdentity loads the channel/language-scoped public projection. Header/footer display the effective brand/logo; CompanyLegalPage is reachable at #legal. Private banking and domestic tax fields never enter this projection.
useConsentedExperience assigns experiments after affirmative consent and resets the displayed variant on withdrawal.
StorefrontHeaderView, HomeHero, ProductTile and StorefrontFooter are shared presentational views consumed by both the existing native storefront composition and the app-owned design preview. The live controller still owns account/cart/checkout commands, consent and observations; no such controller starts in a design frame. Keep domain-specific editor behavior under extensions/apps/site-builder/.