Portfolio
Loading Shiham's portfolio
Preparing the latest projects, skills, and contact paths with a quiet production-ready polish.
Initializing portfolio
Projects · Skills · Contact
Portfolio
Preparing the latest projects, skills, and contact paths with a quiet production-ready polish.
Initializing portfolio
Projects · Skills · Contact
An individually developed MERN e-commerce platform for technology shoppers, with product discovery, role-based product management, and cart workflows.
TechZone eCommerce was built individually as the final project for the University of Colombo School of Computing MERN Stack Training Course. It demonstrates a technology-product marketplace for customers, sellers, and administrators, covering product discovery, account access, cart interaction, and role-specific management.
Customers can register, sign in, browse featured and category-based listings, inspect product details, and use cart controls with calculated totals. Sellers receive a dashboard for creating products with uploaded images and viewing seller-filtered listings, while administrators can review all products, delete entries, and control featured visibility.
The React frontend uses routed pages, reusable components, Axios, and separate Zustand stores for users, products, and carts. An Express REST API organizes authentication, product, and cart routes around Mongoose models. JWTs are stored in HTTP-only cookies, backend middleware enforces roles, MongoDB stores application data, and Cloudinary hosts uploaded product images.
Related projects
Jan 2026 – Jun 2026
A multi-vendor commerce platform connecting buyers, sellers, and administrators through dedicated storefronts, dashboards, payments, chat, and personalized discovery.
TechZone uses a React single-page frontend that calls an Express REST API through Axios. The API separates authentication, product, and cart routes, applies JWT and role middleware, and persists users and products with Mongoose in MongoDB. Cloudinary stores seller-uploaded product images, while Zustand manages frontend user, product, and cart state.
TechZone eCommerce is a full-stack MERN stack web application developed as the final project submission for the MERN Stack Training Course conducted by the University of Colombo School of Computing.
The project is designed as an online technology product marketplace where customers can browse products, view product details, manage their shopping cart, and interact with role-based features. Sellers can create and manage their own products, while admins can manage all products and control featured product visibility.
TechZone eCommerce focuses on building a practical e-commerce platform using the MERN stack. The application includes authentication, role-based access control, product management, category browsing, featured products, shopping cart functionality, image uploads, and a modern responsive user interface.
This project was created to demonstrate the core concepts of full-stack development, including frontend development with React, backend API development with Express.js, database management using MongoDB, authentication with JWT, and image hosting using Cloudinary.
TechZone-eCommerce/
│
├── backend/
│ ├── controllers/
│ │ ├── auth.controller.js
│ │ ├── cart.controller.js
│ │ └── product.controller.js
│ │
│ ├── lib/
│ │ ├── cloudinary.js
│ │ └── connectDB.js
│ │
│ ├── middleware/
│ │ └── auth.middleware.js
│ │
│ ├── models/
│ │ ├── product.model.js
│ │ └── user.model.js
│ │
│ ├── routes/
│ │ ├── auth.route.js
│ │ ├── cart.route.js
│ │ └── product.route.js
│ │
│ ├── utils/
│ │ └── generateTokenAndSetCookie.js
│ │
│ └── index.js
│
├── frontend/
│ ├── public/
│ ├── src/
│ │ ├── assets/
│ │ ├── components/
│ │ ├── lib/
│ │ ├── pages/
│ │ ├── store/
│ │ ├── App.jsx
│ │ ├── index.css
│ │ └── main.jsx
│ │
│ ├── package.json
│ ├── tailwind.config.js
│ └── vite.config.js
│
├── package.json
├── package-lock.json
├── .gitignore
└── README.md
| Page | Description |
|---|---|
/ | Home page with hero section, categories, and featured products |
/sign-up | User registration page |
/login | User login page |
/cart | Authenticated user's cart page |
/category/:category | Products filtered by category |
/product/:productID | Single product details page |
/secret-dashboard | Admin or seller dashboard |
Base URL:
/api/auth
| Method | Endpoint | Description | Access |
|---|---|---|---|
| POST | /signup | Register a new user | Public |
| POST | /login | Login user | Public |
| POST | /logout | Logout user | Authenticated |
| GET | /profile | Get logged-in user profile | Authenticated |
Base URL:
/api/products
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | / | Get all products | Admin |
| GET | /sellerProducts | Get products created by logged-in seller | Seller |
| GET | /featured | Get featured products | Public |
| GET | /recommendations | Get random recommended products | Public |
| GET | /category/:category | Get products by category | Public |
Base URL:
/api/cart
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | / | Get logged-in user's cart products | Authenticated |
| POST | / | Add product to cart | Authenticated |
| PUT | /:id | Update cart product quantity | Authenticated |
| DELETE | / | Remove one product or clear cart | Authenticated |
The system supports three user roles:
Customers can browse products, view product details, and manage their cart.
Sellers can access the dashboard, create products, upload product images, view their own products, and delete products.
Admins can access the dashboard, view all products, delete products, and mark products as featured.
Note: New users are created with the default role
customer. To test seller or admin features, update the user role manually in MongoDB.
Example:
db.users.updateOne(
{ email: "seller@example.com" },
{ $set: { role: "seller" } }
)
db.users.updateOne(
{ email: "admin@example.com" },
{ $set: { role: "admin" } }
)
Create a .env file in the root directory.
PORT=5000
MONGO_URI=mongodb://127.0.0.1:27017/techzone_ecommerce
JWT_SECRET=your_jwt_secret_key
CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret
| Variable | Description |
|---|---|
PORT | Backend server port |
MONGO_URI | MongoDB connection string |
JWT_SECRET | Secret key used to sign JWT tokens |
CLOUDINARY_CLOUD_NAME | Cloudinary cloud name |
CLOUDINARY_API_KEY | Cloudinary API key |
CLOUDINARY_API_SECRET | Cloudinary API secret |
git clone https://github.com/theShihamAhamed/TechZone-eCommerce.git
cd TechZone-eCommerce
From the root folder:
npm install
cd frontend
npm install
Go back to the root folder and create the .env file:
cd ..
Create .env and add your MongoDB, JWT, and Cloudinary values.
From the root folder:
npm run dev
The backend will run on:
http://localhost:5000
Open a new terminal:
cd frontend
npm run dev
The frontend will run on:
http://localhost:5173
Use two terminals.
cd TechZone-eCommerce
npm run dev
cd TechZone-eCommerce/frontend
npm run dev
Then open:
http://localhost:5173
This project uses MongoDB.
You can use:
Example local connection string:
MONGO_URI=mongodb://127.0.0.1:27017/techzone_ecommerce
Example MongoDB Atlas connection string:
MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/techzone_ecommerce
Cloudinary is used to store uploaded product images.
To configure Cloudinary:
.env file.CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
Product images uploaded by sellers are stored in Cloudinary and the image URL is saved in MongoDB.
The frontend currently supports the following product categories:
The backend includes middleware for:
verifyTokenadminRoutesellerRouteadminOrSellerRouteThese middleware functions protect sensitive routes such as product creation, product deletion, featured product updates, and dashboard-related APIs.
The frontend uses Zustand for state management.
Main stores:
| Store | Purpose |
|---|---|
useUserStore | Handles login, signup, logout, and authentication check |
useProductStore | Handles product fetching, product creation, product deletion, featured products, and product details |
useCartStore | Handles cart items, cart quantity, subtotal, and total |
Some possible improvements for future versions:
Through this project, I practiced and demonstrated:
Shiham Ahamed
Final project submission for the MERN Stack Training Course conducted by the University of Colombo School of Computing.
This project is licensed under the ISC License.
The case-study preview is collapsed. Activate the button to make the full content available.
Aug 2025 – Oct 2025
A marketplace for verified Sri Lankan homestays, supporting guest bookings, host onboarding, admin approval, and test-mode payments.
Oct 2025 – Nov 2025
A full-stack developer Q&A platform where programmers can ask, answer, vote, save questions, explore tags, and generate AI-assisted responses.
| GET |
/:id |
| Get product details |
| Public |
| POST | / | Create a new product | Seller |
| PATCH | /:id | Toggle featured product status | Admin |
| DELETE | /:id | Delete a product | Admin or Seller |