schema: spec-driven context: | VMall: B2B2C e-commerce MVP, spec-driven in phases. Tech stack: - Backend: Rust (axum 0.8, sqlx 0.8 + Postgres 18, redis 8, JWT, argon2) at apps/api, crate vmall-api. Modular monolith: handler → service → repository under src/modules/ (docs/adr/0001, docs/tech-specs/rust-api.md). HTTP REST is the public contract; GraphQL is not the primary API (docs/adr/0002). Money is stored as integer minor units + ISO currency code; never floats. - Frontends: three Nuxt 3 apps in pnpm workspace: apps/mall (customer storefront, port 3000), apps/shop-admin (merchant console, 3001), apps/admin (platform console, 3002). - Shared contract: packages/shared (@vmall/shared) — TS types, API client, en/zh locales, Tailwind v4 theme.css. Frontends must use it; no per-app API reimplementation. Shared Vue primitives live in packages/ui (@vmall/ui, Nuxt module); layout uses Tailwind utilities, no