# Index: Mall storefront app (`apps/mall`) Guidelines: `docs/frontend-guidelines.md`. | Path | Holds | |---|---| | `plugins/api.ts` | `$api` composition: mock base + per-domain live picks (`LiveDomain`, `LIVE_PICKS`, `DEFAULT_LIVE_DOMAINS`) | | `mock/api.ts` | deterministic fixed-data adapter; versioned persisted state (`STORAGE_KEY`) | | `mock/data.ts` | seed fixtures for the mock adapter | | `nuxt.config.ts` | `liveDomains` runtime default (JSON array env `NUXT_PUBLIC_LIVE_DOMAINS` overrides) | | `pages/index.vue` | home: banners/promos/quick links/category floors | | `pages/search.vue`, `pages/goods/[id].vue` | catalog browsing; goods detail has reviews tab | | `pages/cart.vue`, `pages/checkout/*` | cart and checkout (address → quote → submit → pay → success) | | `pages/stores/*` | store directory + store detail | | `pages/user/*` | buyer center: orders, aftersales, reviews, coupons, addresses, invoices, favorites | | `pages/seckill.vue`, `collective.vue`, `integral.vue` | flash sale, group buying, points mall | | `app.vue` + `components/shell/*` | header/footer shell | | `composables/` | session/cart stores, `usePrice` (currency conversion display) | Remember: mall is the only app with a mock adapter; every new live domain needs mock parity so `NUXT_PUBLIC_LIVE_DOMAINS` rollback keeps working.