# Index: Mobile H5 app (`apps/mobile`) Standalone Nuxt 3 shopper app on port 3003, added by `add-mobile-h5`. Live-only: no mock adapter (nothing to roll back from); all data through `@vmall/shared` `createApi`. Guidelines: `docs/frontend-guidelines.md`. | Path | Holds | |---|---| | `app.vue` | shell: 4-tab bottom bar (`/`, `/category`, `/cart`, `/user`) with safe-area insets; top back-bar on other routes | | `plugins/api.ts` | live-only `$api` (mall-identical token contract) | | `stores/session.ts` | session store, same as mall (`vmall.token`/`vmall.user`) | | `middleware/auth.ts`, `utils/auth.ts` | auth guard + sign-in return path | | `composables/usePrice.ts`, `usePrefs.ts`, `usePullToRefresh.ts` | currency-aware prices, prefs, touch pull-to-refresh | | `components/PriceText.vue`, `ProductGridCard.vue`, `QtyStepper.vue` | shared bits | | `pages/index.vue` | home: banners, quick links, promos, category floors | | `pages/category.vue`, `pages/search/` | category browse, search + results | | `pages/product/[id].vue`, `pages/cart.vue`, `pages/checkout.vue` | purchase path | | `pages/user.vue`, `pages/orders/`, `pages/aftersales.vue`, `pages/coupon.vue`, `pages/wallet.vue` | account center | | `pages/login.vue`, `pages/register.vue` | auth | | `locales-extra.ts` | app copy (en+zh), namespaced per page group | The mall top-bar "Mobile" entry points here (`apps/mall/components/shell/TopBar.vue`).