# Frontend Component Structure
This document outlines the component structure for the e-commerce frontend, inspired by turntupfashion.com.
## Core Components
### Layout Components
- `Layout.jsx` - Main layout wrapper with header and footer
- `Header.jsx` - Site header with navigation, search, and cart
- `Footer.jsx` - Site footer with links and newsletter signup
- `MobileMenu.jsx` - Responsive navigation for mobile devices
- `Breadcrumbs.jsx` - Navigation breadcrumbs component
### Navigation Components
- `MainNav.jsx` - Primary navigation menu
- `CategoryMenu.jsx` - Category dropdown navigation
- `CountrySelector.jsx` - Country and currency selector component
- `PromoBanner.jsx` - Promotional announcement banner (e.g., "A24" discount code)
### Product Components
- `ProductCard.jsx` - Card display for product in listings
- `ProductGrid.jsx` - Grid layout for product listings
- `ProductGallery.jsx` - Image gallery for product detail page
- `ProductDetails.jsx` - Product information display
- `ProductVariants.jsx` - Size/color selection component
- `AddToCartButton.jsx` - Button with quantity selector
### Cart Components
- `CartIcon.jsx` - Cart icon with item count indicator
- `CartDrawer.jsx` - Slide-out cart drawer
- `CartItem.jsx` - Individual item in cart
- `CartSummary.jsx` - Order summary with subtotal and discounts
### Checkout Components
- `CheckoutForm.jsx` - Multi-step checkout form
- `ShippingForm.jsx` - Shipping information form
- `PaymentForm.jsx` - Payment information with Stripe integration
- `OrderSummary.jsx` - Order review component
### User Account Components
- `LoginForm.jsx` - User login form
- `RegisterForm.jsx` - New user registration
- `AccountDashboard.jsx` - User account overview
- `OrderHistory.jsx` - Past order display
### UI Components
- `Button.jsx` - Styled button component
- `Input.jsx` - Form input field
- `Select.jsx` - Dropdown select component
- `Modal.jsx` - Popup modal component
- `Spinner.jsx` - Loading spinner
- `Toast.jsx` - Notification toast
## Page Structure
### Home Page (`pages/index.js`)
```jsx
```
### Product Listing Page (`pages/products/index.js`)
```jsx
```
### Product Detail Page (`pages/products/[slug].js`)
```jsx
```
### Cart Page (`pages/cart.js`)
```jsx
Your Cart
{cartItems.length > 0 ? (
{cartItems.map(item => (
))}
) : (
)}
```
### Checkout Page (`pages/checkout.js`)
```jsx
{currentStep === 'information' &&
}
{currentStep === 'shipping' &&
}
{currentStep === 'payment' &&
}
```
## Component Examples
### Promo Banner Component
```jsx
// components/PromoBanner.jsx
import { useState } from 'react';
export default function PromoBanner({ code, message }) {
const [isVisible, setIsVisible] = useState(true);
if (!isVisible) return null;
return (
{message} Use code {code} at checkout
setIsVisible(false)}
className="absolute right-4 top-1/2 transform -translate-y-1/2"
aria-label="Dismiss banner"
>
);
}
```
### Product Card Component
```jsx
// components/ProductCard.jsx
import Image from 'next/image';
import Link from 'next/link';
export default function ProductCard({ product }) {
return (
{product.compareAtPrice && (
Sale
)}
{product.name}
{product.compareAtPrice ? (
${product.price.toFixed(2)}
${product.compareAtPrice.toFixed(2)}
) : (
${product.price.toFixed(2)}
)}
);
}
```
### Add to Cart Button
```jsx
// components/AddToCartButton.jsx
import { useState } from 'react';
import { useCart } from '@/contexts/CartContext';
export default function AddToCartButton({ product, selectedVariant }) {
const [quantity, setQuantity] = useState(1);
const { addItem } = useCart();
const handleAddToCart = () => {
if (!selectedVariant) {
// Show error - need to select size/color
return;
}
addItem(product, quantity, selectedVariant);
// Show success toast
};
return (
);
}
```
## CSS and Styling
The project uses Tailwind CSS for styling with some additional custom styles where needed. Key style considerations:
1. **Color Scheme**
- Primary: Black (#000000)
- Accent: Indigo (#4F46E5)
- Backgrounds: White/light grays
- Text: Dark gray for body, black for headings
2. **Typography**
- Primary font: Inter (sans-serif)
- Heading sizes: h1 (2rem), h2 (1.5rem), h3 (1.25rem)
- Body text: 1rem (16px)
3. **Spacing System**
- Based on Tailwind's default spacing scale
- Consistent padding/margins for sections (py-16, px-4)
4. **Responsive Breakpoints**
- Mobile first approach
- Key breakpoints: sm (640px), md (768px), lg (1024px), xl (1280px)
## Component State Management
The application uses React Context for global state management:
1. **CartContext** - Manages shopping cart items and operations
2. **AuthContext** - Handles user authentication state
3. **UIContext** - Controls UI elements like modals and notifications
For complex state logic, we use the reducer pattern with the `useReducer` hook.