Polaris — Frontend
React 18 + Vite + TypeScript + Tailwind. Two surfaces sharing one API client (src/lib/api.ts):
- Storefront
/— home hero, shop grid (category filter + search), product detail, cart, checkout, order tracking. - Admin
/admin— JWT login, today KPI dashboard, top products, supplier performance, product import, lifecycle view, order list with tracking simulation.
Layout
src/lib/api.ts shared fetch wrapper → /api, Cache-Control: no-store
src/lib/types.ts models mirroring db/schema.sql
src/store/cart.tsx cart context (localStorage-persisted)
src/pages/* storefront pages
src/admin/* admin console pages
nginx.conf static + proxy /api → api:8000 (compose service `api`)
Dockerfile multi-stage: node build → nginx runtime
mock/mock_api.py standalone mock API for local verification (not shipped in image)
Dev
npm install
npm run dev # Vite dev server proxies /api → http://localhost:8000
Run the mock API in another terminal: python3 mock/mock_api.py (admin: admin@polaris.shop / polaris-admin).
Build / verify
npm run build # tsc --noEmit (no TS errors required) + vite build → dist/
docker build -t polaris-frontend .
The nginx image serves dist/ and proxies /api/ to the api service on port 8000.