ShopNow is a high-performance, frontend-focused full-stack shoe discovery and listing application designed for real-world shopping flows. Built with a strong emphasis on usability, accessibility, and speed, it leverages Next.js for the frontend and API routes, with Supabase handling authentication and database management.
The application is engineered to handle large product datasets efficiently using list virtualization and includes a context-aware AI assistant to enhance product discovery and user decision-making.
-
Search-Driven Navigation
A global search bar available in the header on every page. Searching routes users directly to dynamic product detail pages. -
Advanced Filtering
Sidebar-based filtering by brand, size, color, and price range, implemented using custom React hooks for clean and reusable state management. -
Dynamic Product Pages
SEO-friendly, server-rendered product detail pages using dynamic routing. -
Cart & Wishlist
Dedicated routes for managing cart and wishlist items with instant UI feedback.
-
Context-Aware AI Assistant
Implemented using a shadcn Sheet (drawer), allowing users to ask product-related questions and receive insights without leaving the current page. -
Optimistic UI Updates
Actions like Add to Cart and Add to Wishlist update the UI instantly using Redux Toolkit, while Redux Saga handles API calls and side effects in the background. -
User Feedback System
Non-intrusive toast notifications provide clear success and failure feedback for user actions.
-
Modal-Based Authentication
Login and signup flows are handled via accessible modals, preserving user context without page redirects. -
Custom JWT Authentication
Secure authentication using JWT tokens stored in HttpOnly cookies, with password hashing via bcryptjs. -
Automatic Data Synchronization
Guest cart and wishlist data are automatically merged with persistent backend data when a user logs in.
-
List Virtualization
Ensures smooth 60fps scrolling even with large product lists. -
Loading Skeletons
Improve perceived performance during data fetching. -
Express.js Backend APIs
RESTful API endpoints handle business logic and database operations with Prisma ORM.
- Framework: Next.js (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- UI Components: shadcn/ui
- Icons: Lucide React
- Global State: Redux Toolkit
- Side Effects: Redux Saga (optimistic updates, async flows, error handling)
- API Communication: Axios with credentials support for JWT cookies
- API Layer: Express.js with TypeScript
- Database: Neon DB (PostgreSQL)
- ORM: Prisma
- Authentication: Custom JWT-based (bcryptjs, jsonwebtoken, HttpOnly cookies)
- User triggers an action (e.g., Add to Cart).
- Redux updates the UI immediately.to the Express backend in the background.
- On success, the state is confirmed; on failure, changes are rolled back and an error toast is shown.
Authentication is handled via modals with JWT tokens stored in HttpOnly cookies. Users can sign in or sign up without losing their current browsing context. API requests automatically include credentials via Axios configuration Authentication is handled via modals instead of full-page redirects, allowing users to sign in or sign up without losing their current browsing context.
βββ public/ # Static assets
β βββ images/ # Image assets & product images
βββ scripts/ # Database scripts & seed data
βββ src/
βββ app/ # (Legacy - migrated to Express backend)
β βββ auth/ # Auth pages & callback handler
β βββ cart/ # Cart page
β βββ products/ # Product pages
β β βββ [itemName]/ # Dynamic product detail pages
β βββ wishlist/ # Wishlist page
βββ components/ # Reusable UI components
β βββ ai-assistant/ # AI assistant components
β βββ auth/ # Authentication components
β βββ cart/ # Cart components
β βββ footers/ # Footer components
β βββ headers/ # Header components
β βββ home/ # Home page components
β βββ modals/ # Modal components
β βββ product-details/ # Product detail components
β βββ shared/ # Shared components
β βββ skeletons/ # Loading skeletons
β βββ ui/ # shadcn UI components
β βββ wishlist/ # Wishlist components
βββ config/ # App configuration
βββ constants/ # App constants (animations, filters, routes)
βββ hooks/ # Custom React hooks
βββ lib/ # Utilities & helpers
βββ providers/ # React context providers
βββ redux/ # Redux state management
β βββ cart/ # Cart state
β βββ wishlist/ # Wishlist state
β βββ slices/ # Redux slices
β βββ sagas/ # Redux sagas
βββ services/ # API service layer (Axios)
βββ styles/ # Global styles
βββ types/ # TypeScript types
βββ utils/ # Utility functions
βββ products/ # Product utilities
βββ redux/ # Reduxilities
βββ supabase/ # Supabase utilities
- Global search bar accessible from all pages
- Product filtering controls
/β Home page with product listings/products/[itemName]β Dynamic product detail pages/cartβ Cart management/wishlistβ Wishlist management
- Login & Signup
- User feedback interactions
- Context-aware AI assistant
- Built with shadcn UI and Tailwind CSS
- Fully responsive, pixel-perfect layout
- Dark mode support
- Accessibility best practices followed
- Node.js 18+ or Bun
- npm/yarn/pnpm/bun
- Supabase account (for authentication and database)
# Clone the repository
git clone https://github.com/yourusername/shop-now.git
cd shop-now
# Install dependencies
npm install
# or
bun install
# Set up environment variables
# Create a .env.local file with:
# NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
# NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# Run database migrations (optional)
bun run seed
# Start development server
npm run dev
# or
bun devOpen http://localhost:3000 in your browser.
# Production build
npm run build
# Start production server
npm run start
# Lint codebase
npm run lintShopNow is intentionally designed as a frontend-specialized full-stack application, prioritizing UI/UX quality, performance optimization, and scalable frontend architecture while keeping backend complexity clean and manageable. The project demonstrates strong proficiency in modern React patterns, real-world state management, and production-ready frontend engineering practices.
MIT License β See LICENSE file for details
Built with β€οΈ using Next.js, React, Redux, and Supabase
