gitextract_eys7q486/ ├── .eslintrc.json ├── .example-env ├── .gitignore ├── .prettierrc.yaml ├── README.md ├── app/ │ ├── (auth)/ │ │ ├── layout.tsx │ │ ├── sign-in/ │ │ │ ├── credentials-signin-form.tsx │ │ │ └── page.tsx │ │ └── sign-up/ │ │ ├── page.tsx │ │ └── sign-up-form.tsx │ ├── (root)/ │ │ ├── cart/ │ │ │ ├── cart-table.tsx │ │ │ └── page.tsx │ │ ├── layout.tsx │ │ ├── order/ │ │ │ └── [id]/ │ │ │ ├── order-details-table.tsx │ │ │ ├── page.tsx │ │ │ ├── stripe-payment-success/ │ │ │ │ └── page.tsx │ │ │ └── stripe-payment.tsx │ │ ├── page.tsx │ │ ├── payment-method/ │ │ │ ├── page.tsx │ │ │ └── payment-method-form.tsx │ │ ├── place-order/ │ │ │ ├── page.tsx │ │ │ └── place-order-form.tsx │ │ ├── product/ │ │ │ └── [slug]/ │ │ │ ├── page.tsx │ │ │ ├── review-form.tsx │ │ │ └── review-list.tsx │ │ ├── search/ │ │ │ └── page.tsx │ │ └── shipping-address/ │ │ ├── page.tsx │ │ └── shipping-address-form.tsx │ ├── admin/ │ │ ├── layout.tsx │ │ ├── main-nav.tsx │ │ ├── orders/ │ │ │ └── page.tsx │ │ ├── overview/ │ │ │ ├── charts.tsx │ │ │ └── page.tsx │ │ ├── products/ │ │ │ ├── [id]/ │ │ │ │ └── page.tsx │ │ │ ├── create/ │ │ │ │ └── page.tsx │ │ │ └── page.tsx │ │ └── users/ │ │ ├── [id]/ │ │ │ ├── page.tsx │ │ │ └── update-user-form.tsx │ │ └── page.tsx │ ├── api/ │ │ ├── auth/ │ │ │ └── [...nextauth]/ │ │ │ └── route.ts │ │ ├── uploadthing/ │ │ │ ├── core.ts │ │ │ └── route.ts │ │ └── webhooks/ │ │ └── stripe/ │ │ └── route.ts │ ├── layout.tsx │ ├── loading.tsx │ ├── not-found.tsx │ ├── unauthorized/ │ │ └── page.tsx │ └── user/ │ ├── layout.tsx │ ├── main-nav.tsx │ ├── orders/ │ │ └── page.tsx │ └── profile/ │ ├── page.tsx │ └── profile-form.tsx ├── assets/ │ └── styles/ │ └── globals.css ├── auth.config.ts ├── auth.ts ├── components/ │ ├── admin/ │ │ ├── admin-search.tsx │ │ └── product-form.tsx │ ├── deal-countdown.tsx │ ├── footer.tsx │ ├── icon-boxes.tsx │ ├── shared/ │ │ ├── checkout-steps.tsx │ │ ├── delete-dialog.tsx │ │ ├── header/ │ │ │ ├── category-drawer.tsx │ │ │ ├── index.tsx │ │ │ ├── menu.tsx │ │ │ ├── mode-toggle.tsx │ │ │ ├── search.tsx │ │ │ └── user-button.tsx │ │ ├── pagination.tsx │ │ └── product/ │ │ ├── add-to-cart.tsx │ │ ├── product-card.tsx │ │ ├── product-carousel.tsx │ │ ├── product-images.tsx │ │ ├── product-list.tsx │ │ ├── product-price.tsx │ │ └── rating.tsx │ ├── ui/ │ │ ├── alert-dialog.tsx │ │ ├── badge.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── carousel.tsx │ │ ├── checkbox.tsx │ │ ├── dialog.tsx │ │ ├── drawer.tsx │ │ ├── dropdown-menu.tsx │ │ ├── form.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── radio-group.tsx │ │ ├── select.tsx │ │ ├── sheet.tsx │ │ ├── table.tsx │ │ ├── textarea.tsx │ │ ├── toast.tsx │ │ └── toaster.tsx │ └── view-all-products-button.tsx ├── components.json ├── db/ │ ├── prisma.ts │ ├── sample-data.ts │ └── seed.ts ├── email/ │ ├── index.tsx │ └── purchase-receipt.tsx ├── hooks/ │ └── use-toast.ts ├── jest.config.ts ├── jest.setup.ts ├── lib/ │ ├── actions/ │ │ ├── cart.actions.ts │ │ ├── order.actions.ts │ │ ├── product.actions.ts │ │ ├── review.actions.ts │ │ └── user.actions.ts │ ├── auth-guard.ts │ ├── constants/ │ │ └── index.ts │ ├── encrypt.ts │ ├── paypal.ts │ ├── uploadthing.ts │ ├── utils.ts │ └── validators.ts ├── middleware.ts ├── next.config.ts ├── package.json ├── postcss.config.mjs ├── prisma/ │ ├── migrations/ │ │ ├── 20241116125832_init/ │ │ │ └── migration.sql │ │ ├── 20241118183645_add_user_based_tables/ │ │ │ └── migration.sql │ │ ├── 20241121210251_add_cart/ │ │ │ └── migration.sql │ │ ├── 20241125173259_add_order/ │ │ │ └── migration.sql │ │ ├── 20241205162619_add_featured_default/ │ │ │ └── migration.sql │ │ ├── 20241209181915_add_review/ │ │ │ └── migration.sql │ │ └── migration_lock.toml │ └── schema.prisma ├── tailwind.config.ts ├── tests/ │ └── paypal.test.ts ├── tsconfig.json └── types/ ├── index.ts └── next-auth.d.ts