A headphones e-commerce build that started from a Frontend Mentor brief and grew a real backend. Convex stores products and orders, the cart rides in React context + localStorage between sessions, checkout dispatches a Nodemailer receipt — fully responsive across the catalog, product, and cart screens.
Cart, in three places at once
The cart lives in React context for live updates, mirrors itself into localStorage so a hard refresh never loses an item, and only writes into Convex at checkout. Three storage surfaces, one source of truth — the context is canonical and the other two are mirrors.
Receipt on success
A completed checkout fires a Nodemailer email summary with line items and totals. The transactional copy is plain text by design — easier to land in inboxes, harder to break across mail clients.