Development Guide
Complete overview of the Elite Events project architecture, setup, and development workflow.
Quick Start
Development Server
npm run dev # Runs on http://localhost:3000
Building & Production
npm run build # Production build
npm start # Start production server
npm run lint # Lint code
Database Commands
npx prisma generate # Generate Prisma client
npx prisma migrate dev # Run database migrations
npx prisma db seed # Seed database with sample data
npx prisma studio # Open database GUI (http://localhost:5555)
Project Overview
Elite Events is an e-commerce Next.js application built with:
- Framework: Next.js 16 with App Router
- Language: TypeScript
- UI: React 19, Tailwind CSS
- State Management: Redux Toolkit
- Database: MySQL with Prisma ORM
Features:
- Product catalog with filtering and search
- Shopping cart and wishlist
- Blog with posts
- User account management
- Checkout and orders
Architecture
Next.js App Router Structure
The app uses route groups to organize pages:
src/app/(site)/- Main site route groupsrc/app/(site)/layout.tsx- Root layout with provider setup- All pages:
src/app/(site)/(pages)/andsrc/app/(site)/blogs/
State Management
Redux Toolkit manages global state with four slices:
-
Cart (
src/redux/features/cart-slice.ts)- Add, remove, update quantity, clear operations
- Memoized selector
selectTotalPricefor total value
-
Wishlist (
src/redux/features/wishlist-slice.ts)- Product wishlist functionality
-
Quick View (
src/redux/features/quickView-slice.ts)- Product quick view modal state
-
Product Details (
src/redux/features/product-details.ts)- Currently viewed product information
Store Configuration: src/redux/store.ts
- Exports:
useAppSelector,RootState,AppDispatch
Context Providers
React Context for UI state outside Redux:
- QuickViewModalContext - Quick view modal visibility
- CartSidebarModalContext - Cart sidebar modal
- PreviewSliderContext - Image preview slider
Provider Hierarchy (from src/app/(site)/layout.tsx):
ReduxProvider
└─ CartModalProvider
└─ ModalProvider
└─ PreviewSliderProvider
└─ App Components
Component Organization
Components organized by four main directories:
-
Feature Components (
src/components/features/)account/- User account, ordersauth/- Sign in, sign upblog/- Blog grid, details, sidebarcart/- Cart, sidebar modal, wishlistcheckout/- Billing, shipping, payment, ordershome/- Hero, categories, best sellers, testimonialsshop/- Product grid, details, sidebar
-
Layout Components (
src/components/layout/)Header/- Site navigationFooter/- Site footerScrollToTop/- Scroll button
-
Shared Components (
src/components/shared/)BrandLogo/,IconButton/,Newsletter/,PreLoader/,QuickViewModal/,PreviewSlider/
-
UI Components (
src/components/ui/)icons/- SVG iconslinks/- Link components
Each feature folder exports an index.ts for clean imports.
Types
Centralized in src/types/:
product.ts- Product with title, price, discountedPrice, reviews, imagesblogItem.ts- Blog postcategory.ts- Categorytestimonial.ts- TestimonialMenu.ts- Navigation menu
Database
MySQL with Prisma ORM
Setup Files:
- Schema:
prisma/schema.prisma(12 models: User, Product, ProductImage, Category, BlogPost, Order, OrderItem, Cart, Wishlist, Review, Testimonial, Address) - Client:
src/lib/prisma.ts(singleton instance) - Migrations:
prisma/migrations/ - Seed:
prisma/seed.ts
Legacy Static Data (used for seeding):
src/components/features/shop/ShopGrid/shopData.ts- Productssrc/components/features/blog/BlogGrid/blogData.ts- Blog postssrc/components/features/home/Categories/categoryData.ts- Categoriessrc/components/features/home/Testimonials/testimonialsData.ts- Testimonialssrc/context/menuData.ts- Navigation menu
API Routes
RESTful API in src/app/api/:
Products:
GET /api/products- List (pagination, category/price filters, search)GET /api/products/[id]- Get single productPOST /api/products- Create (admin)PATCH /api/products/[id]- Update (admin)DELETE /api/products/[id]- Delete (admin)
Categories:
GET /api/categories- List allPOST /api/categories- Create (admin)
Blog:
GET /api/blog- List (pagination, search)POST /api/blog- Create (admin)
Cart (authentication required):
GET /api/cart- Get user's itemsPOST /api/cart- Add itemPATCH /api/cart/[id]- Update quantityDELETE /api/cart/[id]- Remove item
Wishlist (authentication required):
GET /api/wishlist- Get user's itemsPOST /api/wishlist- Add itemDELETE /api/wishlist/[id]- Remove item
API Responses:
- Products and blog posts include pagination metadata
- Errors:
{ error: "message" }with appropriate status codes - Products transformed to match frontend type
Styling
- Tailwind CSS -
tailwind.config.ts - Colors: blue (primary), green, red, yellow, dark, gray, meta
- Font: Euclid Circular A (in
src/app/css/euclid-circular-a-font.css) - Main Styles:
src/app/css/style.css - Breakpoints: xsm (375px), lsm (425px), 3xl (2000px)
Path Aliases
TypeScript in tsconfig.json:
@/*→src/*
Key Patterns
Modal Management
Combination of Context API and Redux:
- Context controls visibility (open/close)
- Redux stores display data
- Example: QuickViewModal reads from
quickViewReducer, dispatches tocartReducer
Cart Operations
Items tracked with quantity:
- Existing item → increment quantity
- New item → add with initial quantity
- Actions:
addItemToCart,removeItemFromCart,updateCartItemQuantity
Image Handling
Products use dual-image structure:
thumbnails[]- Sidebar/gallery imagespreviews[]- Main display images- Preview functionality uses PreviewSliderContext
Route Groups
Pages nested under (site) route group:
- Shared layout without affecting URLs
- Centralized provider setup
- Consistent header/footer
Development Notes
- Client-side rendering for interactive features (cart, modals)
- PreLoader displays 1 second on initial mount
- All client components need
"use client"directive - Uses Next.js Image component for optimization
- React 19 features available
Data Fetching
Three approaches available:
Option 1: Custom Hooks (Recommended for components)
import { useProducts } from "@/hooks/useProducts";
const { products, loading, error } = useProducts({ limit: 10 });
Option 2: Redux with API (Global state)
import { useDispatch } from "react-redux";
import { fetchCart, addToCartAsync } from "@/redux/features/cartSliceApi";
dispatch(fetchCart());
dispatch(addToCartAsync({ productId: 1, quantity: 2 }));
Option 3: Direct API Calls (Server components)
import { getProducts } from "@/lib/api/products";
const { products } = await getProducts({ page: 1, limit: 10 });
Available Hooks
useProducts(filters)- Products with pagination/filteringuseCategories(includeProductCount)- CategoriesuseBlogPosts(filters)- Blog posts with pagination
Testing
See TESTING_GUIDE.md for testing approach and examples.
API Integration
See API_INTEGRATION_GUIDE.md for detailed API usage patterns.
Security
See SECURITY.md for security guidelines and practices.