Command Palette

Search for a command to run...

Back to Projects
WebE-CommerceFull Stack2023-06 — 2023-12

CodersCore

A full-stack e-commerce platform with secure payment processing

Next.jsReactTailwind CSSMongoDBJavaScript

Overview

CodersCore is a full-stack e-commerce platform. It has a clean interface, secure payments, and a responsive layout that works on all devices.

Features

For Customers

  • Product Catalog: Browse products with advanced filtering
  • Shopping Cart: Persistent cart with real-time updates
  • Secure Checkout: Multiple payment options
  • Order Tracking: Real-time status updates
  • User Accounts: Order history and saved preferences

For Administrators

  • Inventory Management: Stock tracking and alerts
  • Order Management: Process and fulfill orders
  • Analytics Dashboard: Sales and user insights
  • Content Management: Update products and categories

Technical Architecture

Frontend

// Next.js App Router with React Server Components
export default async function ProductPage({ 
  params 
}: { 
  params: { slug: string } 
}) {
  const product = await getProduct(params.slug);
  
  return (
    <div className="container mx-auto py-8">
      <ProductGallery images={product.images} />
      <ProductInfo product={product} />
      <AddToCartButton productId={product.id} />
    </div>
  );
}

Shopping Cart State

// Zustand store for cart management
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
 
interface CartStore {
  items: CartItem[];
  addItem: (product: Product) => void;
  removeItem: (productId: string) => void;
  clearCart: () => void;
  total: number;
}
 
export const useCart = create<CartStore>()(
  persist(
    (set, get) => ({
      items: [],
      addItem: (product) => set((state) => ({
        items: [...state.items, { ...product, quantity: 1 }]
      })),
      removeItem: (productId) => set((state) => ({
        items: state.items.filter(item => item.id !== productId)
      })),
      clearCart: () => set({ items: [] }),
      get total() {
        return get().items.reduce(
          (sum, item) => sum + item.price * item.quantity, 
          0
        );
      }
    }),
    { name: 'shopping-cart' }
  )
);

API Routes

// Next.js API route for order creation
import { NextResponse } from 'next/server';
import { stripe } from '@/lib/stripe';
 
export async function POST(req: Request) {
  const { items, email } = await req.json();
  
  const session = await stripe.checkout.sessions.create({
    payment_method_types: ['card'],
    line_items: items.map(item => ({
      price_data: {
        currency: 'usd',
        product_data: { name: item.name },
        unit_amount: item.price * 100,
      },
      quantity: item.quantity,
    })),
    mode: 'payment',
    success_url: `${origin}/success?session_id={CHECKOUT_SESSION_ID}`,
    cancel_url: `${origin}/cart`,
  });
  
  return NextResponse.json({ sessionId: session.id });
}

Database Design

// Prisma schema
model Product {
  id          String   @id @default(cuid())
  name        String
  description String
  price       Float
  images      String[]
  category    Category @relation(fields: [categoryId], references: [id])
  categoryId  String
  inStock     Int      @default(0)
  createdAt   DateTime @default(now())
  orders      OrderItem[]
}
 
model Order {
  id        String      @id @default(cuid())
  user      User        @relation(fields: [userId], references: [id])
  userId    String
  items     OrderItem[]
  status    OrderStatus @default(PENDING)
  total     Float
  createdAt DateTime    @default(now())
}

Performance Optimizations

  • Image Optimization: Next.js Image component with lazy loading
  • Code Splitting: Dynamic imports for large components
  • Caching: Redis for session and product caching
  • CDN: Static assets served via Vercel Edge Network

Security Measures

  • Input validation with Zod
  • CSRF protection
  • Rate limiting on API routes
  • Secure payment handling via Stripe
  • Environment variable management

Lessons Learned

Building CodersCore taught me:

  • State management patterns for e-commerce
  • Payment integration best practices
  • Database optimization for product catalogs
  • Building responsive, accessible UI components

Key Metrics

E-commerce Platform
Target Users
Responsive design
Performance
Secure payment integration
Coverage