commit 66f531e5aa5b6215e66929deab80059c911ecca6 Author: Mohammad Oftadeh Date: Thu Sep 26 10:17:47 2024 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fd3dbb5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8d5fd2a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Mohammad Oftadeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9d68a00 --- /dev/null +++ b/README.md @@ -0,0 +1,146 @@ +[![Shopco Screenshot](https://github.com/mohammadoftadeh/repo-assets/blob/main/shopco-cover.png?raw=true)](https://your-demo-link.com) + +# Shopco + +Shopco is an open-source project that converts a Figma design of an e-commerce website into a fully responsive front-end application. It utilizes **Next.js 14 App Router**, **TypeScript**, **Tailwind CSS**, **Redux**, **Framer Motion**, and **ShadCN UI** to deliver a modern, scalable, and optimized solution based on industry standards. + +## Table of Contents + +- [Shopco](#shopco) + - [Table of Contents](#table-of-contents) + - [Overview](#overview) + - [Demo](#demo) + - [Features](#features) + - [Technologies](#technologies) + - [Installation](#installation) + - [Usage](#usage) + - [Project Structure](#project-structure) + - [Contributing](#contributing) + - [Issues](#issues) + - [License](#license) + - [Contact](#contact) + +## Overview + +Shopco bridges the gap between design and development by converting Figma designs into production-ready code. The project follows best practices for **SEO**, **performance optimization**, and **accessibility**, making it a perfect foundation for developers looking to create scalable and maintainable e-commerce front-ends. + +## Demo + +Check out the live demo: [Shopco Demo](https://your-demo-link.com) + + + +## Features + +- **Next.js 14**: Server-side rendering (SSR), Static Site Generation (SSG), optimized routing, and API integrations. +- **TypeScript**: Strongly typed code for better error detection and maintainability. +- **Tailwind CSS**: Utility-first CSS framework for rapid UI development. +- **Redux**: State management for managing the shopping cart and other global states. +- **Framer Motion**: Smooth animations and transitions for an enhanced user experience. +- **ShadCN UI**: Beautifully styled, accessible, and customizable UI components. +- **Fully Responsive**: Mobile-first design ensuring the layout adapts across devices. +- **Performance Optimized**: Best practices followed for fast loading and interaction. +- **Accessible**: Built with accessibility standards to provide an inclusive experience. + +## Technologies + +- **Next.js 14** - A popular React framework with built-in SSR and optimization. +- **TypeScript** - A superset of JavaScript for strong typing and code consistency. +- **Tailwind CSS** - A utility-first CSS framework for fast, responsive design. +- **Redux** - A state management library used for the shopping cart and global app state. +- **Framer Motion** - A library for animations and interactions in React. +- **ShadCN UI** - A collection of beautiful, accessible, and customizable UI components. +- **Figma** - The design tool used as the source of the project’s layout. The [Figma file](https://www.figma.com/community/file/1273571982885059508/e-commerce-website-template-freebie) designed by [Hamza Naeem](https://www.figma.com/@hamzauix) + +## Installation + +To get started with Shopco locally, follow these steps: + +1. **Clone the repository:** + + ```bash + git clone https://github.com/mohammadoftadeh/next-ecommerce-shopco.git + cd next-ecommerce-shopco + ``` + +2. **Install dependencies:** + + ```bash + npm install + ``` + + ```bash + yarn install + ``` + +3. **Run the development server:** + + ```bash + npm run dev + ``` + + ```bash + yarn dev + ``` + +4. **Open in your browser:** + Navigate to [http://localhost:3000](http://localhost:3000) to view the app. + +## Usage + +- To explore or modify the code, navigate through the `components`, `features`, and `app` directories. +- The shopping cart logic is managed using **Redux**. You can find the store configuration and cart actions in the `src/lib/features` directory. +- **ShadCN UI** components are used across the app. They can be customized in the `src/components/ui` directory. +- You can easily modify and extend the project to suit your needs, whether for personal use or professional projects. + +## Project Structure + +```bash +Shopco/ +│ +├── public/ # Static assets +├── src/ +│ ├── app/ # Next.js App Router +│ ├── components/ # Reusable components (including ShadCN UI components) +│ └── lib/ +│ ├── features/ # The Redux logics for features (e.g., shopping cart) +│ ├── hooks/ # Custom React hooks +│ ├── store.ts # Redux store +│ ├── utils.ts # Utility functions +│ ├── styles/ # Tailwind CSS styles (global, utilities and fonts) +│ ├── types/ # TypeScript types +│ +├── components.json # ShadCN UI configuration +├── next.config.mjs # Next.js configuration +├── package.json # Node.js dependencies and scripts +├── postcss.config.mjs # Post CSS configuration +└── README.md # Project documentation +├── tailwind.config.js # Tailwind CSS configuration +├── tsconfig.json # TypeScript configuration +``` + +## Contributing + +Contributions are welcome! If you'd like to contribute, Please follow these steps to contribute to Shopco: + +1. Fork the repository. +2. Create a new branch (`git checkout -b feature/your-feature-name`). +3. Make your changes. +4. Push to the branch (`git push origin feature/your-feature-name`). +5. Open a pull request. + +## Issues + +Feel free to submit issues for any bugs, feature requests, or general questions related to the project. You can also reach out via [email](mailto:mr.mohammadoftadeh@gmail.com) for support. + +## License + +This project is licensed under the MIT License - see the [LICENSE](https://opensource.org/licenses/MIT) file for details. + +## Contact + +Feel free to reach out to: + +- **Name**: Mohammad Oftadeh +- **Email**: [mr.mohammadoftadeh@gmail.com](mailto:mr.mohammadoftadeh@gmail.com) +- **GitHub**: [https://github.com/mohammadoftadeh](https://github.com/mohammadoftadeh) diff --git a/components.json b/components.json new file mode 100644 index 0000000..1f6462b --- /dev/null +++ b/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/styles/globals.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} \ No newline at end of file diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..4678774 --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; + +export default nextConfig; diff --git a/package.json b/package.json new file mode 100644 index 0000000..15b42bc --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "next-ecommerce-shopco", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@radix-ui/react-accordion": "^1.2.0", + "@radix-ui/react-dialog": "^1.1.1", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-navigation-menu": "^1.2.0", + "@radix-ui/react-select": "^2.1.1", + "@radix-ui/react-separator": "^1.1.0", + "@radix-ui/react-slider": "^1.2.0", + "@radix-ui/react-slot": "^1.1.0", + "@reduxjs/toolkit": "^2.2.7", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "embla-carousel-react": "^8.2.1", + "framer-motion": "^11.5.4", + "holy-loader": "^2.3.7", + "lucide-react": "^0.438.0", + "next": "14.2.7", + "react": "^18", + "react-dom": "^18", + "react-icons": "^5.3.0", + "react-redux": "^9.1.2", + "react-simple-star-rating": "^5.1.7", + "redux-persist": "^6.0.0", + "tailwind-merge": "^2.5.2", + "tailwindcss-animate": "^1.0.7", + "usehooks-ts": "^3.1.0", + "vaul": "^0.9.4" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "typescript": "^5" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..1a69fd2 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/public/icons/Visa.svg b/public/icons/Visa.svg new file mode 100644 index 0000000..ab86da5 --- /dev/null +++ b/public/icons/Visa.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/applePay.svg b/public/icons/applePay.svg new file mode 100644 index 0000000..c213ad2 --- /dev/null +++ b/public/icons/applePay.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/icons/arrowLeft.svg b/public/icons/arrowLeft.svg new file mode 100644 index 0000000..e432cd7 --- /dev/null +++ b/public/icons/arrowLeft.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/arrowRight.svg b/public/icons/arrowRight.svg new file mode 100644 index 0000000..ed1f5e2 --- /dev/null +++ b/public/icons/arrowRight.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/big-star.svg b/public/icons/big-star.svg new file mode 100644 index 0000000..c4a3017 --- /dev/null +++ b/public/icons/big-star.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/calvin-klein-logo.svg b/public/icons/calvin-klein-logo.svg new file mode 100644 index 0000000..3551ac8 --- /dev/null +++ b/public/icons/calvin-klein-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/cart.svg b/public/icons/cart.svg new file mode 100644 index 0000000..3c66a0c --- /dev/null +++ b/public/icons/cart.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/check.svg b/public/icons/check.svg new file mode 100644 index 0000000..5d1e30d --- /dev/null +++ b/public/icons/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/circleCheck.svg b/public/icons/circleCheck.svg new file mode 100644 index 0000000..7721b89 --- /dev/null +++ b/public/icons/circleCheck.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/dotsHorizontal.svg b/public/icons/dotsHorizontal.svg new file mode 100644 index 0000000..86b0e2c --- /dev/null +++ b/public/icons/dotsHorizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/envelope.svg b/public/icons/envelope.svg new file mode 100644 index 0000000..ff8b2f7 --- /dev/null +++ b/public/icons/envelope.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/facebook.svg b/public/icons/facebook.svg new file mode 100644 index 0000000..62acba0 --- /dev/null +++ b/public/icons/facebook.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/github.svg b/public/icons/github.svg new file mode 100644 index 0000000..e4a23a8 --- /dev/null +++ b/public/icons/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/googlePay.svg b/public/icons/googlePay.svg new file mode 100644 index 0000000..3abd9d0 --- /dev/null +++ b/public/icons/googlePay.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/icons/gucci-logo.svg b/public/icons/gucci-logo.svg new file mode 100644 index 0000000..08832ff --- /dev/null +++ b/public/icons/gucci-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/icons/instagram.svg b/public/icons/instagram.svg new file mode 100644 index 0000000..a927b4e --- /dev/null +++ b/public/icons/instagram.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/icons/keyboardArrowDown.svg b/public/icons/keyboardArrowDown.svg new file mode 100644 index 0000000..5738b96 --- /dev/null +++ b/public/icons/keyboardArrowDown.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/keyboardArrowRight.svg b/public/icons/keyboardArrowRight.svg new file mode 100644 index 0000000..ba526eb --- /dev/null +++ b/public/icons/keyboardArrowRight.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/mastercard.svg b/public/icons/mastercard.svg new file mode 100644 index 0000000..db84d0d --- /dev/null +++ b/public/icons/mastercard.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/icons/menu.svg b/public/icons/menu.svg new file mode 100644 index 0000000..d29a059 --- /dev/null +++ b/public/icons/menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/minus.svg b/public/icons/minus.svg new file mode 100644 index 0000000..1e28d28 --- /dev/null +++ b/public/icons/minus.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/outlineOffer.svg b/public/icons/outlineOffer.svg new file mode 100644 index 0000000..ea0754c --- /dev/null +++ b/public/icons/outlineOffer.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/paypal.svg b/public/icons/paypal.svg new file mode 100644 index 0000000..ee95df5 --- /dev/null +++ b/public/icons/paypal.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/plus.svg b/public/icons/plus.svg new file mode 100644 index 0000000..adf4114 --- /dev/null +++ b/public/icons/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/prada-logo.svg b/public/icons/prada-logo.svg new file mode 100644 index 0000000..636fade --- /dev/null +++ b/public/icons/prada-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/icons/search-black.svg b/public/icons/search-black.svg new file mode 100644 index 0000000..4ec8407 --- /dev/null +++ b/public/icons/search-black.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/search.svg b/public/icons/search.svg new file mode 100644 index 0000000..d10c707 --- /dev/null +++ b/public/icons/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/small-star.svg b/public/icons/small-star.svg new file mode 100644 index 0000000..c84f6cc --- /dev/null +++ b/public/icons/small-star.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/times.svg b/public/icons/times.svg new file mode 100644 index 0000000..cf31062 --- /dev/null +++ b/public/icons/times.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/trash.svg b/public/icons/trash.svg new file mode 100644 index 0000000..c7f9e08 --- /dev/null +++ b/public/icons/trash.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/user.svg b/public/icons/user.svg new file mode 100644 index 0000000..1670a15 --- /dev/null +++ b/public/icons/user.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/versace-logo.svg b/public/icons/versace-logo.svg new file mode 100644 index 0000000..1c70fd8 --- /dev/null +++ b/public/icons/versace-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/verticalSlider.svg b/public/icons/verticalSlider.svg new file mode 100644 index 0000000..27e54cb --- /dev/null +++ b/public/icons/verticalSlider.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/xTwitter.svg b/public/icons/xTwitter.svg new file mode 100644 index 0000000..7e9c382 --- /dev/null +++ b/public/icons/xTwitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/zara-logo.svg b/public/icons/zara-logo.svg new file mode 100644 index 0000000..5d8abd6 --- /dev/null +++ b/public/icons/zara-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/images/dress-style-1.png b/public/images/dress-style-1.png new file mode 100644 index 0000000..385e76f Binary files /dev/null and b/public/images/dress-style-1.png differ diff --git a/public/images/dress-style-2.png b/public/images/dress-style-2.png new file mode 100644 index 0000000..eb84104 Binary files /dev/null and b/public/images/dress-style-2.png differ diff --git a/public/images/dress-style-3.png b/public/images/dress-style-3.png new file mode 100644 index 0000000..50aa06d Binary files /dev/null and b/public/images/dress-style-3.png differ diff --git a/public/images/dress-style-4.png b/public/images/dress-style-4.png new file mode 100644 index 0000000..8c6036c Binary files /dev/null and b/public/images/dress-style-4.png differ diff --git a/public/images/header-homepage.png b/public/images/header-homepage.png new file mode 100644 index 0000000..9de4444 Binary files /dev/null and b/public/images/header-homepage.png differ diff --git a/public/images/header-res-homepage.png b/public/images/header-res-homepage.png new file mode 100644 index 0000000..2e134a5 Binary files /dev/null and b/public/images/header-res-homepage.png differ diff --git a/public/images/pic1.png b/public/images/pic1.png new file mode 100644 index 0000000..5e8afa7 Binary files /dev/null and b/public/images/pic1.png differ diff --git a/public/images/pic10.png b/public/images/pic10.png new file mode 100644 index 0000000..e0d11fe Binary files /dev/null and b/public/images/pic10.png differ diff --git a/public/images/pic11.png b/public/images/pic11.png new file mode 100644 index 0000000..d89d24b Binary files /dev/null and b/public/images/pic11.png differ diff --git a/public/images/pic12.png b/public/images/pic12.png new file mode 100644 index 0000000..4e93d96 Binary files /dev/null and b/public/images/pic12.png differ diff --git a/public/images/pic13.png b/public/images/pic13.png new file mode 100644 index 0000000..9422ddc Binary files /dev/null and b/public/images/pic13.png differ diff --git a/public/images/pic14.png b/public/images/pic14.png new file mode 100644 index 0000000..9b0e8c6 Binary files /dev/null and b/public/images/pic14.png differ diff --git a/public/images/pic15.png b/public/images/pic15.png new file mode 100644 index 0000000..44c5c20 Binary files /dev/null and b/public/images/pic15.png differ diff --git a/public/images/pic2.png b/public/images/pic2.png new file mode 100644 index 0000000..64399d0 Binary files /dev/null and b/public/images/pic2.png differ diff --git a/public/images/pic3.png b/public/images/pic3.png new file mode 100644 index 0000000..159ad8b Binary files /dev/null and b/public/images/pic3.png differ diff --git a/public/images/pic4.png b/public/images/pic4.png new file mode 100644 index 0000000..6b8c0ba Binary files /dev/null and b/public/images/pic4.png differ diff --git a/public/images/pic5.png b/public/images/pic5.png new file mode 100644 index 0000000..8f45859 Binary files /dev/null and b/public/images/pic5.png differ diff --git a/public/images/pic6.png b/public/images/pic6.png new file mode 100644 index 0000000..4829330 Binary files /dev/null and b/public/images/pic6.png differ diff --git a/public/images/pic7.png b/public/images/pic7.png new file mode 100644 index 0000000..5e6e882 Binary files /dev/null and b/public/images/pic7.png differ diff --git a/public/images/pic8.png b/public/images/pic8.png new file mode 100644 index 0000000..9be76fa Binary files /dev/null and b/public/images/pic8.png differ diff --git a/public/images/pic9.png b/public/images/pic9.png new file mode 100644 index 0000000..01d1169 Binary files /dev/null and b/public/images/pic9.png differ diff --git a/public/next.svg b/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..d2f8422 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/cart/page.tsx b/src/app/cart/page.tsx new file mode 100644 index 0000000..8e6b20e --- /dev/null +++ b/src/app/cart/page.tsx @@ -0,0 +1,123 @@ +"use client"; + +import BreadcrumbCart from "@/components/cart-page/BreadcrumbCart"; +import ProductCard from "@/components/cart-page/ProductCard"; +import { Button } from "@/components/ui/button"; +import InputGroup from "@/components/ui/input-group"; +import { cn } from "@/lib/utils"; +import { integralCF } from "@/styles/fonts"; +import { FaArrowRight } from "react-icons/fa6"; +import { MdOutlineLocalOffer } from "react-icons/md"; +import { TbBasketExclamation } from "react-icons/tb"; +import React from "react"; +import { RootState } from "@/lib/store"; +import { useAppSelector } from "@/lib/hooks/redux"; +import Link from "next/link"; + +export default function CartPage() { + const { cart, totalPrice, adjustedTotalPrice } = useAppSelector( + (state: RootState) => state.carts + ); + + return ( +
+
+ {cart && cart.items.length > 0 ? ( + <> + +

+ your cart +

+
+
+ {cart?.items.map((product, idx, arr) => ( + + + {arr.length - 1 !== idx && ( +
+ )} +
+ ))} +
+
+
+ Order Summary +
+
+
+ Subtotal + ${totalPrice} +
+
+ + Discount (- + {Math.round( + ((totalPrice - adjustedTotalPrice) / totalPrice) * 100 + )} + %) + + + -${Math.round(totalPrice - adjustedTotalPrice)} + +
+
+ + Delivery Fee + + Free +
+
+
+ Total + + ${Math.round(adjustedTotalPrice)} + +
+
+
+ + + + + + + +
+ +
+
+ + ) : ( +
+ + Your shopping cart is empty. + +
+ )} +
+
+ ); +} diff --git a/src/app/favicon.ico b/src/app/favicon.ico new file mode 100644 index 0000000..718d6fe Binary files /dev/null and b/src/app/favicon.ico differ diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..9088b94 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,37 @@ +import type { Metadata, Viewport } from "next"; +import "@/styles/globals.css"; +import { satoshi } from "@/styles/fonts"; +import TopBanner from "@/components/layout/Banner/TopBanner"; +import TopNavbar from "@/components/layout/Navbar/TopNavbar"; +import Footer from "@/components/layout/Footer"; +import HolyLoader from "holy-loader"; +import Providers from "./providers"; + +export const metadata: Metadata = { + title: "Shopco", + description: "Generated by create next app", +}; + +export const viewport: Viewport = { + themeColor: "#000000", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + + + + {children} + +