Project
Shoppers
A single-vendor storefront with authentication, an admin interface, and a shopping flow built around mock catalog data.
Features
01Storefront
A home page assembled from shared sections: hero slider, category carousels, and a browse-all-categories view
Product listings with sorting, a price-range filter, availability filters, and pagination
Product pages carrying description, reviews, and a customer questions section
A cart and wishlist that flow through checkout with contact details, shipping, and the payment method selection
Order tracking that walks the timeline from order received to delivered
A dark and light theme toggle, plus a mobile navigation that actually works on small screens
02Authentication
Registration and sign-in with zod guarding the forms on the client and express-validator guarding the request on the API, returning 409 for duplicate emails
Access tokens expire fast on purpose: 30 minutes by default, 3 hours with remember-me, while the refresh token rides in an httpOnly cookie (2 days, or 7 with remember-me)
When a request comes back 403, the client quietly calls /refresh, stores the fresh access token, and replays the original request, with the same pattern mirrored in the axios stack
Routes are role-gated against stored roles (Admin, Editor, User), so the admin area and the user dashboard never blur together
Logout clears the session, and deleting an account removes the user and wipes the session cookie in the same motion
03Account & API
Profile management with avatar upload: multer catches the file, sharp processes it, and Cloudinary stores it
Every request passes through helmet headers, rate limiting, a CORS allowlist of known origins, sanitisation against mongo and XSS injection, and hpp against parameter pollution
Access and error logs from morgan land in real files, so debugging never depends on console output
04Admin panel
An admin side with its own dashboard, products table, orders, transactions, and reviews screens, behind the role guard and the same auth flow
Add-product forms and admin account settings, held together by the Mantine layout kit
05Data & operations
Product, order, and review data ship as local mock collections in the storefront, so the full shopping journey runs without standing up a catalog API
The API ships in Docker with compose, PM2 process scripts, and autocannon in the dev kit for quick load checks
