A modern, full-stack e-commerce web application built with React, Node.js, Express, MongoDB, and Clerk Authentication. ReactStore delivers a complete shopping experience for customers alongside a protected admin dashboard for managing products and orders.
Live Demo Β· Features Β· Tech Stack Β· Getting Started Β· API Β· Roadmap
| Resource | Link |
|---|---|
| π Website | react-ecommerce-nine-lyart.vercel.app |
| π Backend API | react-ecommerce-backend-0tqa.onrender.com |
| π¦ Repository | github.com/MrGaurav695/react-ecommerce |
Note: The backend is hosted on Render's free tier, so the first request after a period of inactivity may take a few seconds to spin up.
- π Secure registration and login via Clerk
- ποΈ Browse the full product catalog
- π Detailed product view pages
- π·οΈ Filter products by category
- π Add to cart, adjust quantities, and remove items
- π³ Streamlined checkout flow
- π¦ Place orders and track order history
- π View individual order details
- π± Fully responsive design across mobile, tablet, and desktop
- π Protected, role-gated admin dashboard
- π¦ View, add, edit, and delete products
- π View all customer orders
- π Update order status
- π Centralized store and order management
ReactStore uses Clerk for authentication, with role-based access control enforced on both the frontend and backend.
| Role | Access |
|---|---|
| Customer (authenticated) | Products, Product Details, Cart, Checkout, Orders, Order Details |
| Admin (authorized) | Admin Dashboard, Product Management, Order Management |
Backend routes are additionally guarded by authentication and admin-authorization middleware, so protection isn't reliant on the frontend alone.
Frontend React.js Β· React Router Β· Redux Β· Bootstrap Β· Axios Β· React Hot Toast Β· React Loading Skeleton Β· Clerk Authentication
Backend Node.js Β· Express.js Β· MongoDB Β· Mongoose Β· Clerk Express Β· CORS Β· dotenv
Deployment Vercel (Frontend) Β· Render (Backend) Β· MongoDB Atlas (Database) Β· GitHub (Source Control)
react-ecommerce/
βββ Client/ # React frontend
β βββ public/
β βββ src/
β βββ api/ # Axios API calls
β βββ components/ # Reusable UI components
β βββ pages/ # Route-level pages
β βββ redux/ # State management
β
βββ Server/ # Express backend
β βββ config/
β βββ controllers/
β βββ middleware/ # Auth & admin guards
β βββ models/ # Mongoose schemas
β βββ routes/
β βββ server.js
β
βββ README.md
ββββββββββββββββ
β User β
ββββββββ¬ββββββββ
β
βΌ
βββββββββββββββββββββ
β React Frontend β
β (Vercel) β
βββββββββββ¬ββββββββββ
β Axios (REST API)
βΌ
βββββββββββββββββββββ
β Express Backend β
β (Render) β
βββββββββββ¬ββββββββββ
β
βββββββββββββββ΄ββββββββββββββ
βΌ βΌ
ββββββββββββββββββ ββββββββββββββββββββ
β Clerk Auth β β MongoDB Atlas β
ββββββββββββββββββ ββββββββββββββββββββ
Admins have full CRUD control over the product catalog:
Create β Read β Update β Delete
All products are stored in MongoDB Atlas and served through REST APIs.
Customers place orders through the checkout flow. Each order captures:
- Customer information
- Products and quantities
- Shipping address & method
- Payment method
- Subtotal, shipping cost, and total price
- Order status
Order statuses: Pending β Confirmed β Shipped β Delivered (or Cancelled)
Admins can update order status directly from the dashboard.
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/products |
Get all products |
GET |
/api/products/:id |
Get a single product |
POST |
/api/products |
Create a product (admin) |
PUT |
/api/products/:id |
Update a product (admin) |
DELETE |
/api/products/:id |
Delete a product (admin) |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/orders |
Place a new order |
GET |
/api/orders |
Get all orders (admin) |
GET |
/api/orders/user/:userId |
Get a user's order history |
GET |
/api/orders/:id |
Get order details |
PUT |
/api/orders/:id/status |
Update order status (admin) |
REACT_APP_API_URL=your_backend_api_url
REACT_APP_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_keyPORT=5000
MONGODB_URI=your_mongodb_connection_string
CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
CLIENT_URL=your_frontend_url
β οΈ Never commit.envfiles or secret keys to GitHub. Make sure both are listed in.gitignore.
- Node.js (v16+)
- npm or yarn
- A MongoDB Atlas account
- A Clerk account (for API keys)
git clone https://github.com/MrGaurav695/react-ecommerce.git
cd react-ecommercecd Server
npm install
npm startRuns at β http://localhost:5000
Open a new terminal:
cd Client
npm install
npm startRuns at β http://localhost:3000
GitHub
βββ Client βββΊ Vercel
βββ Server βββΊ Render βββΊ MongoDB Atlas
| Layer | Platform |
|---|---|
| Frontend | Vercel |
| Backend | Render |
| Database | MongoDB Atlas |
| Auth | Clerk |
- Clerk-based authentication
- Protected frontend and admin routes
- Backend authentication & admin-authorization middleware
- CORS configuration
- Environment-variable-based secret management
- Protected API operations
Building ReactStore helped me strengthen skills in:
- React component architecture & React Router
- Redux state management
- REST API design and Node.js/Express development
- MongoDB & Mongoose data modeling
- Clerk authentication and role-based authorization
- Full CRUD implementation and Axios integration
- Responsive UI development
- Environment variable & secrets management
- Git/GitHub workflows and production deployment (Vercel, Render, MongoDB Atlas)
- π³ Real payment gateway integration
- β Product reviews and ratings
- β€οΈ Wishlist
- π Advanced product search & filters
- π Advanced admin analytics
- ποΈ Coupon and discount system
- π§ Order confirmation emails
- πΌοΈ Product image upload management
- π Sales analytics dashboard
Gaurav Shirsath
Computer Engineering Student
If you found this project useful or interesting, consider giving the repository a β on GitHub β it helps a lot!
This project was created for learning, development, and portfolio purposes.





