Treat the customer journey as one system
The interface follows the core shopping path: discover products, manage a cart, authenticate when needed, and complete checkout without losing context.
Case study / Live
A complete storefront that connects product discovery, cart and checkout, authentication, and protected admin workflows into one coherent full-stack product.

Problem
Many storefront demos polish the browsing experience while leaving session state, payments, and administration loosely connected. The goal was a storefront that feels like one product across the customer path and the operational work behind it.
Constraints
Responsibilities
Architecture
A React and TypeScript client talks to an Express API. The API owns business logic, JWT auth, and validation. MongoDB persists catalog and session-related data. Stripe handles checkout. Frontend and backend deploy as separate services.
System shape
A React client talks to an Express API. Auth, data, and payments stay on clear boundaries—with frontend and backend deployed separately.
Hover or focus a node to inspect how the storefront pieces connect. The diagram remains readable without interaction.
What shaped the build
The interface follows the core shopping path: discover products, manage a cart, authenticate when needed, and complete checkout without losing context.
A React and TypeScript frontend is paired with an Express and Node.js API, while MongoDB handles persistence. That separation keeps the interface, business logic, and data concerns easier to evolve.
JWT authentication, protected admin routes, request validation, Stripe checkout, and core-path tests support the safeguards expected of a transactional application.
Difficult technical challenge
Session state, authentication timing, and payment handoff had to stay aligned so shoppers did not lose cart context while admin routes remained protected. The API boundary and explicit auth checks made those transitions easier to reason about than folding everything into the client.
Result
The result is a deployed full-stack application that goes beyond a polished storefront: it accounts for the API, database, payments, administration, and the details that make the flow dependable.
Retrospective
Clear service boundaries paid off—especially around auth and checkout. If revisited, I would invest earlier in shared contract tests between the client and API to catch session-edge cases before they surface in the UI.
Selected work