This is a solution to the Audiophile e-commerce website challenge on Frontend Mentor. Frontend Mentor challenges help you improve your coding skills by building realistic projects.
Users should be able to:
- View the optimal layout for the app depending on their device's screen size
- See hover states for all interactive elements on the page
- Add/Remove products from the cart
- Edit product quantities in the cart
- Fill in all fields in the checkout
- Receive form validations if fields are missed or incorrect during checkout
- See correct checkout totals depending on the products in the cart
- Shipping always adds $50 to the order
- VAT is calculated as 20% of the product total, excluding shipping
- See an order confirmation modal after checking out with an order summary
- Bonus: Keep track of what's in the cart, even after refreshing the browser (
localStorage
could be used for this if you're not building out a full-stack app)
- Semantic HTML5 markup
- Flexbox
- CSS Grid
- Mobile-first workflow
- React - JS library
- Next.js - React framework
- Tailwind CSS - CSS Library
I had so much fun with NextJS and this really huge project. I used a new feature for me, the useContext
hook from React.
'use client'
import { createContext, useState } from 'react';
const CartContext = createContext([
[],
() => {}]);
const CartContextProvider = (props) => {
const [state, setState] = useState([{
quantity: 0,
item: ''
}]);
return (
<CartContext.Provider value={[state, setState]}>
{props.children}
</CartContext.Provider>
);
}
export { CartContext, CartContextProvider}