A beautiful, modern ecommerce website built with React, Vite, TypeScript, Tailwind CSS, and GSAP. Features anime-themed products with a sleek dark mode design and smooth animations.
- Modern Tech Stack: React 19, Vite, TypeScript, Tailwind CSS, GSAP
- Dark Mode: Default dark theme with light/dark toggle
- Anime Products: Curated collection of anime merchandise including figures, manga, apparel, and collectibles
- Shopping Cart: Persistent cart functionality with local storage
- Wishlist: Save favorite products for later
- Product Search & Filtering: Advanced filtering by categories, price, rating, and more
- Responsive Design: Mobile-first approach with beautiful layouts
- Smooth Animations: GSAP-powered animations and transitions
- Bento Grid Layout: Featured products in an attractive grid layout
- Frontend: React 19, TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- Animations: GSAP with ScrollTrigger
- State Management: Zustand
- Routing: React Router
- Icons: Lucide React
- Payment: Stripe (demo integration)
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open your browser and navigate to
http://localhost:5173
- Bento Grid: Homepage features a Pinterest-style bento grid for featured products
- Dark Mode: Beautiful dark theme as default with seamless toggle
- Anime Aesthetic: Clean, modern design inspired by Japanese aesthetics
- Smooth Animations: GSAP-powered animations for enhanced user experience
- Mobile Responsive: Looks great on all device sizes
- Product Catalog: Browse anime figures, manga, apparel, and more
- Advanced Filtering: Filter by categories, price range, ratings, stock status
- Shopping Cart: Add/remove items, update quantities, persistent storage
- Wishlist: Save products for later
- Checkout Process: Demo checkout with Stripe integration
- Product Reviews: Display ratings and customer reviews
- Figures & Collectibles: Scale figures, Nendoroids, Figmas, Prize figures
- Manga & Light Novels: Latest volumes and art books
- Apparel & Accessories: T-shirts, hoodies, accessories, cosplay
- Gaming & Electronics: Gaming gear, phone cases, keychains
- Home & Lifestyle: Posters, mugs, pillows, stickers
The project is ready for deployment on platforms like Vercel, Netlify, or any static hosting service.
npm run build- Security headers are set in
vercel.json(X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy). - API CORS is origin-restricted in
api/_lib/razorpay.ts— update the allowlist if your domain changes. - HTML caching is disabled; static assets under
/assetsare immutable. - Add environment variables in Vercel Project Settings:
- RAZORPAY_KEY_ID
- RAZORPAY_KEY_SECRET
- RAZORPAY_WEBHOOK_SECRET
index.htmlincludes canonical URL, OpenGraph/Twitter tags, and JSON‑LD for the site.public/robots.txtandpublic/sitemap.xmlare provided. Update sitemap as routes evolve.
This project includes a secure Google Sign-In flow handled on the server:
- Endpoints:
/api/auth/google/start(begin OAuth),/api/auth/google/callback(handle redirect),/api/auth/me,/api/auth/logout. - Session: httpOnly Secure cookie with a signed JWT (see
api/_lib/session.ts). - Frontend: the login page redirects to Google via the start endpoint.
Environment variables (see .env.example):
- GOOGLE_CLIENT_ID
- GOOGLE_CLIENT_SECRET
- GOOGLE_REDIRECT_URI (e.g., https://aapex.vercel.app/api/auth/google/callback)
- SESSION_SECRET (a long random string for JWT signing)
- PUBLIC_URL (base site URL; used as default redirect base)
Setup:
- Create OAuth credentials in Google Cloud Console (OAuth consent screen + Web credentials).
- Add Authorized redirect URI:
https://aapex.vercel.app/api/auth/google/callback(plus localhost for dev). - Set the variables above in Vercel Project Settings → Environment Variables.
- Deploy; the “Continue with Google” button redirects through server to Google.
Security:
-
Client secret is never sent to the browser; token exchanges happen only on the server.
-
Session cookie is httpOnly, Secure, SameSite=Lax with 24h expiry.
-
CSP and CORS are configured in
vercel.jsonandapi/_lib/razorpay.ts. -
Route-based code splitting via
React.lazyinsrc/App.tsx. -
Image tags in listings use
loading="lazy"and explicit dimensions to reduce CLS.
Built with ❤️ for the anime community