This is a full-stack e-commerce application with a React client and a Node/Express backend. It includes product browsing, cart management, checkout, order placement, address handling, authentication, file uploads, Stripe payments, Cloudinary image storage, and email support.
The frontend is a single-page app built with Vite and React, while the backend exposes REST APIs for products, cart, addresses, orders, users, and webhooks. The app is designed to support both customer shopping flows and owner/admin product management.
Use the table below for a compact screenshot gallery.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Node.js 18 or newer
- MongoDB database connection string
- Clerk application keys
- Cloudinary account credentials
- Stripe secret key for payments
- SMTP credentials for outgoing emails
- Clone or open the project folder.
- Install dependencies in both apps.
- Create the
.envfiles from the example files. - Start the server.
- Start the client.
- Open the frontend in the browser and test the cart or checkout flow.
- Browse products by collection and product details
- Add products to cart and update quantities
- Manage shipping addresses
- Choose between Cash on Delivery and Stripe payment
- Owner/admin product management views
- User authentication with Clerk
- Image upload and storage with Cloudinary
- Order creation and checkout flow
- Email notifications through Nodemailer
- Home page with featured sections
- Collection page for browsing products
- Product details page for item information and size selection
- Cart and order summary page
- Address form for shipping details
- Orders page for viewing placed orders
- Owner dashboard for managing products
- A user signs in with Clerk.
- Products are fetched from the backend.
- The user adds items to the cart.
- Shipping address is selected or created.
- Checkout is completed with Cash on Delivery or Stripe.
- The order is saved in MongoDB and the user is redirected to the result page.
- Frontend: React, Vite, React Router, Axios, Tailwind CSS, Swiper, React Hot Toast, Clerk React
- Backend: Node.js, Express, MongoDB, Mongoose, Clerk Express, Stripe, Cloudinary, Nodemailer, Multer, CORS
- Tools: ESLint, Nodemon, dotenv
client/React frontend built with Viteserver/Express API for business logic and database accessclient/src/components/reusable UI componentsclient/src/pages/application screensserver/controllers/request handlersserver/models/database schemasserver/routes/API route definitions
client/src/context/global app state and shared helpersclient/src/assets/static data and mediaserver/config/database, Cloudinary, and mail setupserver/middleware/request protection and upload helpersserver/images/uploaded image assets
/api/productsproduct listing and product details/api/cartcart actions/api/addressesshipping address management/api/ordersorder placement and Stripe checkout flow/api/useruser sync and profile-related data/api/clerkClerk webhook handling/api/stripeStripe webhook handling
- Install dependencies in both folders:
cd client npm install cd ../server npm install
- Create your environment files:
- Copy
client/.env.exampletoclient/.env - Copy
server/.env.exampletoserver/.env
- Copy
- Fill in the required values for MongoDB, Clerk, Cloudinary, Stripe, SMTP, and the client URL.
VITE_BACKEND_URL- Backend API base URLVITE_CURRENCY- Currency symbol used in pricesVITE_CLERK_PUBLISHABLE_KEY- Clerk publishable key for authentication
PORT- Server portVERCEL- Set to1when deployed on VercelCLIENT_URL- Frontend URL used for Stripe redirectsMONGO_URL- MongoDB connection stringCLDN_NAME,CLDN_API_KEY,CLDN_API_SECRET- Cloudinary credentialsSMTP_SENDER_EMAIL,SMTP_PASS- SMTP credentials for email deliveryCLERK_SECRET_KEY- Clerk secret key for backend authSTRIPE_SECRET_KEY- Stripe secret key for payments
- Start the backend:
cd server npm run server - Start the frontend in a second terminal:
cd client npm run dev - Open the client URL shown by Vite, usually
http://localhost:5173.
Create these files before running the app:
client/.envserver/.env
The example files already added to the repo can be copied and edited with your real values.
- Frontend:
http://localhost:5173 - Backend:
http://localhost:3000 - Live Demo: https://fronend-onugxcbny-kalharas-projects-265c6636.vercel.app/collection
- Client:
npm run dev,npm run build,npm run lint,npm run preview - Server:
npm start,npm run server
- Frontend is deployed on Vercel and can use the live demo link above.
- Backend should run with the correct production environment variables set.
- If Stripe checkout redirect URLs fail, check
CLIENT_URLon the server. - If API calls fail from the client, verify
VITE_BACKEND_URL.
- Clerk is used for user sign-in and identity.
- Stripe is used for online payment checkout.
- Cash on Delivery is available for users who do not want to pay online.
- The backend uses protected routes for authenticated actions such as cart and order operations.
- MongoDB stores users, products, orders, addresses, and cart-related records.
- Cloudinary stores uploaded product images.
- Nodemailer sends order or notification emails through SMTP.
- The backend expects the local
.envfile inserver/. - The frontend expects the local
.envfile inclient/. - If Stripe checkout or user sync fails, confirm the API base URL and Clerk keys are set correctly.
- Make sure MongoDB is running or the Atlas connection string is valid.
- Confirm Clerk keys match the frontend and backend projects.
- Restart both client and server after changing environment variables.
- If images do not upload, check the Cloudinary credentials.
- If the frontend shows API connection errors, verify the backend is running on the configured port.
- If Stripe checkout fails, confirm the Stripe secret key and client URL are correct.
- If auth errors appear, recheck the Clerk publishable and secret keys.
This project is covered by the proprietary license in LICENSE.md. The code is not licensed for public use, copying, modification, redistribution, or commercial use without explicit written permission from the author.








