Skip to content

filecc/audiophile-e-commerce

Repository files navigation

Frontend Mentor - Audiophile e-commerce website solution

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.

Table of contents

Overview

The challenge

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)

Links

My process

Built with

  • Semantic HTML5 markup
  • Flexbox
  • CSS Grid
  • Mobile-first workflow
  • React - JS library
  • Next.js - React framework
  • Tailwind CSS - CSS Library

What I learned

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}

Author

About

a challenge from Frontend Mentor

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published