Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Next.js solution to the Frontend Mentor Audiophile e-commerce challenge with cart management and checkout validation.

Next.js ecommerce starter built as a web programming final exam, using MongoDB, Prisma, Tailwind CSS, and JWT auth.
Audiophile Ecommerce Website is a Next.js and TypeScript solution to the Frontend Mentor Audiophile e-commerce guru challenge, implementing a complete audio equipment store with product categories, cart management, and checkout with validation.
Audiophile Ecommerce Website is a front-end project that recreates the Audiophile online store concept from a Frontend Mentor design challenge. It takes product data from a local products.json file and renders homepage, category pages for headphones, speakers, and earphones, product detail pages, a cart, and a checkout flow. The project runs on Next.js with TypeScript, uses Chakra UI for styling, Redux Toolkit for state management, React-Hook-Form for form validation, and Framer Motion for animations. It was built by front-end developer mbart13 and is live at audiophile-ecommerce-mbart13.vercel.app.
To run the project locally, clone the repository and execute yarn && yarn dev (or npm install && npm run dev). Next.js uses getStaticProps to pre-render pages at build time with product data from a products.json file prepared by Frontend Mentor and slightly modified by the author. The cart state lives in Redux Toolkit and is persisted to localStorage, then retrieved when the app loads.
No, this is a front-end solution. Product data is static from products.json, and cart persistence relies on localStorage rather than a backend or database. Checkout does not process real payments.
Clone the repository and run yarn && yarn dev for Yarn users, or npm install && npm run dev for npm users. The dev server will start with the Next.js app.
All product details come from a products.json file supplied by Frontend Mentor and slightly modified by the solution author. Next.js fetches it at build time using getStaticProps.
Yes. The cart state is stored in localStorage via Redux Toolkit, and on app load it is retrieved and restored. This is the bonus requirement of the challenge.
The author chose aria-disabled to keep the checkout submit button focusable and screen-reader friendly, following the inclusive disabled-button pattern described by CSS-Tricks. This prevents form submission while still allowing accessibility tools to announce the button.
