diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index f67355a..2a4cb67 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -1,35 +1,174 @@
-import { useState } from 'react'
-import reactLogo from './assets/react.svg'
-import viteLogo from '/vite.svg'
-import './App.css'
+// src/App.jsx
+import React from "react";
+import LandingPage from "./Pages/LandingPage";
function App() {
- const [count, setCount] = useState(0)
-
return (
- <>
-
- Vite + React
-
-
-
- Edit src/App.jsx and save to test HMR
-
-
-
- Click on the Vite and React logos to learn more
-
- >
- )
+
+
+
+ );
}
-export default App
+export default App;
+
+
+
+// // src/App.jsx
+// import { useState } from "react";
+// import { motion } from "framer-motion";
+// import Button from "./reusableComponents/Button";
+// import Input from "./reusableComponents/Input";
+// import ProductCard from "./reusableComponents/ProductCard";
+// import Navbar from "./reusableComponents/Navbar";
+// import Footer from "./reusableComponents/Footer";
+// import BentoGrid from "./reusableComponents/BentoGrid";
+
+// import FilterOptions from "./reusableComponents/FilterOption";
+// import Modal from "./reusableComponents/ModalPopup";
+// import Carousel from "./reusableComponents/CarouselSlider";
+// import BannerCard from "./reusableComponents/BannerCard";
+// import SearchBar from "./reusableComponents/Searchbar";
+
+// const products = [
+// { id: 1, name: "iPhone 15 Pro", price: 999, image: "https://images.unsplash.com/photo-1690489874296-ea89dd0ba3f3?w=300", category: "Electronics" },
+// { id: 2, name: "MacBook Air", price: 1299, image: "https://images.unsplash.com/photo-1517336714731-489689fd1ca8?w=300", category: "Electronics" },
+// { id: 3, name: "Nike Air Max", price: 129, image: "https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=300", category: "Clothing" },
+// { id: 4, name: "Adidas Ultraboost", price: 189, image: "https://images.unsplash.com/photo-1549298916-b41d501d3772?w=300", category: "Clothing" },
+// { id: 5, name: "Coffee Maker", price: 79, image: "https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=300", category: "Home" },
+// { id: 6, name: "Yoga Mat", price: 39, image: "https://images.unsplash.com/photo-1588854337236-7947b26e6a62?w=300", category: "Sports" }
+// ];
+
+// function App() {
+// const [cartCount, setCartCount] = useState(3);
+// const [isModalOpen, setIsModalOpen] = useState(false);
+// const [searchTerm, setSearchTerm] = useState("");
+// const [filters, setFilters] = useState([]);
+// const [email, setEmail] = useState("");
+
+// const categories = ["Electronics", "Clothing", "Home", "Sports"];
+// const carouselImages = [
+// "https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=1200",
+// "https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=1200",
+// "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=1200"
+// ];
+
+// const filteredProducts = products.filter(product =>
+// product.name.toLowerCase().includes(searchTerm.toLowerCase()) &&
+// (filters.length === 0 || filters.includes(product.category))
+// );
+
+// return (
+//
+// {/* Navbar */}
+//
+
+//
+// {/* Hero Carousel */}
+//
+//
+//
+
+// {/* Search + Filters Row */}
+//
+//
+//
+//
+
+// {/* Banner Cards */}
+//
+// setFilters(["Electronics"])}
+// />
+// alert("Free shipping on orders over $50!")}
+// />
+// setFilters([])}
+// />
+//
+
+// {/* Featured Products */}
+//
+// Featured Products
+//
+// {filteredProducts.map(product => (
+//
+// ))}
+//
+//
+
+// {/* Newsletter Signup */}
+//
+// Stay Updated
+//
+// setEmail(e.target.value)}
+// />
+//
+//
+//
+
+// {/* Bento Grid Demo */}
+//
+// Dashboard Preview
+//
+//
+
+// {/* Demo Modal Trigger */}
+//
+//
+//
+//
+
+// {/* Modal */}
+//
setIsModalOpen(false)}
+// title="iPhone 15 Pro - Quick View"
+// >
+//
+//

+//
$999
+//
Latest iPhone with A17 Pro chip and titanium design.
+//
+//
+//
+//
+//
+//
+
+// {/* Footer */}
+//
+//
+// );
+// }
+
+// export default App;
+
diff --git a/frontend/src/Pages/LandingPage.jsx b/frontend/src/Pages/LandingPage.jsx
new file mode 100644
index 0000000..13ec2c1
--- /dev/null
+++ b/frontend/src/Pages/LandingPage.jsx
@@ -0,0 +1,71 @@
+import React from "react";
+import { motion } from "framer-motion";
+import Navbar from "../reusableComponents/Navbar";
+import Carousel from "../reusableComponents/CarouselSlider";
+import ListCards from "../reusableComponents/ListCards";
+import Footer from "../reusableComponents/Footer";
+import ProductCard from "../reusableComponents/ProductCard";
+import FeatureList from "../reusableComponents/FeaturesList";
+import TechnicianCard from "../reusableComponents/TechnicianCard";
+import BentoGrid from "../reusableComponents/BentoGrid";
+import BannerCard from "../reusableComponents/BannerCard";
+
+const LandingPage = () => {
+ return (
+
+
+
+ {/* Carousel */}
+
+
+
+
+
+
+ {/* Featured Products */}
+
+
+
+ Featured Products
+
+
{/* Now renders all featured products internally */}
+
+
+
+ {/* Service Features */}
+
+
+ {/* Technicians Section */}
+
+
+
+ Our Top Skilled Technicians
+
+ {/* Now renders all technicians internally */}
+
+
+
+
+
+
+
+ );
+};
+
+export default LandingPage;
diff --git a/frontend/src/Pages/ProductsDetails.jsx b/frontend/src/Pages/ProductsDetails.jsx
new file mode 100644
index 0000000..90ff424
--- /dev/null
+++ b/frontend/src/Pages/ProductsDetails.jsx
@@ -0,0 +1,9 @@
+import React from 'react'
+
+const ProductsDetails = () => {
+ return (
+ ProductsDetails
+ )
+}
+
+export default ProductsDetails
\ No newline at end of file
diff --git a/frontend/src/Pages/ProductsPage.jsx b/frontend/src/Pages/ProductsPage.jsx
new file mode 100644
index 0000000..e69de29
diff --git a/frontend/src/data/Productsdata.js b/frontend/src/data/Productsdata.js
new file mode 100644
index 0000000..402cbf1
--- /dev/null
+++ b/frontend/src/data/Productsdata.js
@@ -0,0 +1,240 @@
+ const products = [
+ {
+ id: 1,
+ name: "Ro Enrich Glory RO+UV+UF Copper Water Purifier",
+ brand: "Pureit",
+ rating: 4.6,
+ reviews: 112,
+ price: 11999,
+ mrp: 12599,
+ discount: "20% Off",
+ emi: "No-cost EMI from ₹2,084/mo",
+ image: "https://i.ibb.co/Ln7s2h9/ro1.jpg",
+ description:
+ "Getting pure and safe water for daily consumption is easy with the Aqua Fresh Copper 18 ltr Audi alkaline technology India no 01 Ro Water purifier. It uses RO + UV + UF + TDS + Copper purification to deliver 100% safe water. Auto-start and auto shut-off prevents overflow. 18 L tank ideal for medium-size families.",
+ deliveryText: "Delivery by DD/MM/YYYY. If you order before HH:MM",
+ offers: [
+ "HDFC Bank: 10% Instant Discount",
+ "SBI Credit Card: 10% Cashback",
+ "No-cost EMI Available",
+ ],
+ specifications: {
+ filtrationCapacity: "18 L/hr",
+ purificationCapacity: "2000 L",
+ purificationProcess: "RO + UV + UF + Copper",
+ coldWaterCapacity: "0 L",
+ hotWaterCapacity: "0 L",
+ uvLight: "Yes, in storage tank",
+ hotDispenser: "No",
+ coldDispenser: "No",
+ digitalDisplay: "Yes",
+ installationType: "Wall Mount",
+ stages: "7",
+ },
+ },
+
+ {
+ id: 2,
+ name: "Kent Grand Plus ZWW RO + UV + UF + TDS Controller",
+ brand: "Kent",
+ rating: 4.5,
+ reviews: 240,
+ price: 15000,
+ mrp: 16999,
+ discount: "18% Off",
+ emi: "EMI starting from ₹2,300/mo",
+ image: "https://i.ibb.co/8mMXrWb/ro2.jpg",
+ description:
+ "Kent Grand Plus comes with RO + UV + UF multistage purification for pure drinking water. TDS controller ensures natural minerals are retained. Suitable for borewell and tanker water.",
+ deliveryText: "Delivery within 2–3 days",
+ offers: ["SBI Card: ₹1500 Instant Discount", "Free installation"],
+ specifications: {
+ filtrationCapacity: "20 L/hr",
+ purificationCapacity: "2500 L",
+ purificationProcess: "RO + UV + UF",
+ coldWaterCapacity: "0 L",
+ hotWaterCapacity: "0 L",
+ uvLight: "Yes",
+ installationType: "Wall Mount",
+ stages: "7",
+ },
+ },
+
+ {
+ id: 3,
+ name: "Aquaguard Aura RO+UV+UF with Active Copper",
+ brand: "Eureka Forbes",
+ rating: 4.4,
+ reviews: 198,
+ price: 13999,
+ mrp: 15999,
+ discount: "12% Off",
+ emi: "EMI from ₹1,899/mo",
+ image: "https://i.ibb.co/vQyx4hv/ro3.jpg",
+ description:
+ "Aquaguard Aura with Active Copper Technology enhances immunity and improves taste. The RO + UV + UF purification ensures water is free from viruses, bacteria, and heavy metals.",
+ deliveryText: "Delivery in 3–5 days",
+ offers: ["HDFC: 5% Cashback", "Free Filter Replacement (1 Year)"],
+ specifications: {
+ filtrationCapacity: "15 L/hr",
+ purificationCapacity: "1800 L",
+ purificationProcess: "RO + UV + UF + Active Copper",
+ uvLight: "Yes",
+ installationType: "Wall Mount / Counter Top",
+ stages: "8",
+ },
+ },
+
+ {
+ id: 4,
+ name: "Livpure Glo RO + UV + Mineralizer",
+ brand: "Livpure",
+ rating: 4.3,
+ reviews: 310,
+ price: 10499,
+ mrp: 12999,
+ discount: "25% Off",
+ emi: "EMI from ₹1,400/mo",
+ image: "https://i.ibb.co/PtW4VWG/ro4.jpg",
+ description:
+ "Livpure Glo with RO + UV purification and a mineralizer ensures balanced and healthy drinking water. Ideal for all water sources.",
+ deliveryText: "Delivery in 2 days",
+ offers: ["Axis Bank 10% Discount", "Free Installation"],
+ specifications: {
+ filtrationCapacity: "12 L/hr",
+ purificationCapacity: "1600 L",
+ purificationProcess: "RO + UV + Mineralizer",
+ installationType: "Wall Mount",
+ stages: "6",
+ },
+ },
+
+ {
+ id: 5,
+ name: "HUL Pureit Classic RO+UV+MF Water Purifier",
+ brand: "Pureit",
+ rating: 4.2,
+ reviews: 180,
+ price: 9999,
+ mrp: 10999,
+ discount: "10% Off",
+ emi: "EMI from ₹1,299/mo",
+ image: "https://i.ibb.co/QQcNZk6/ro5.jpg",
+ description:
+ "Pureit Classic RO+UV+MF guarantees 100% RO filtered water with multi-stage purification.",
+ deliveryText: "Delivery within 48 hours",
+ offers: ["ICICI: 750 Cashback"],
+ specifications: {
+ filtrationCapacity: "10 L/hr",
+ purificationCapacity: "1500 L",
+ purificationProcess: "RO + UV + MF",
+ stages: "6",
+ installationType: "Wall Mount",
+ },
+ },
+
+ {
+ id: 6,
+ name: "Aqua Fresh Swift RO+UV+UF+TDS Controller",
+ brand: "AquaFresh",
+ rating: 4.1,
+ reviews: 105,
+ price: 8999,
+ mrp: 12999,
+ discount: "30% Off",
+ emi: "EMI from ₹999/mo",
+ image: "https://i.ibb.co/Y3Bgb7q/ro6.jpg",
+ description:
+ "Affordable RO purifier with UV + UF purification and TDS adjustments for borewell water.",
+ offers: ["Free Pre-Filter Kit"],
+ specifications: {
+ filtrationCapacity: "14 L/hr",
+ purificationCapacity: "1800 L",
+ purificationProcess: "RO + UV + UF + TDS",
+ stages: "7",
+ },
+ },
+
+ {
+ id: 7,
+ name: "Blue Star Excella RO+UF 6 L Purifier",
+ brand: "Blue Star",
+ rating: 4.3,
+ reviews: 155,
+ price: 8499,
+ mrp: 9990,
+ discount: "15% Off",
+ emi: "EMI from ₹1,150/mo",
+ image: "https://i.ibb.co/CJ0mpc6/ro7.jpg",
+ description:
+ "Blue Star’s Excella RO+UF provides pure and great-tasting drinking water with a 6-stage purification system.",
+ specifications: {
+ filtrationCapacity: "12 L/hr",
+ purificationCapacity: "1400 L",
+ purificationProcess: "RO + UF",
+ stages: "6",
+ },
+ },
+
+ {
+ id: 8,
+ name: "Faber Galaxy Fresh RO+UV+UF with Copper Guard",
+ brand: "Faber",
+ rating: 4.4,
+ reviews: 167,
+ price: 12999,
+ mrp: 14999,
+ discount: "14% Off",
+ emi: "EMI from ₹1,799/mo",
+ image: "https://i.ibb.co/fHbhkXM/ro8.jpg",
+ description:
+ "Faber Galaxy uses RO+UV+UF triple purification along with Copper Guard technology to ensure healthy drinking water.",
+ specifications: {
+ filtrationCapacity: "13 L/hr",
+ purificationCapacity: "1800 L",
+ stages: "7",
+ },
+ },
+
+ {
+ id: 9,
+ name: "AO Smith Z1 UV + UF + Hot Water Purifier",
+ brand: "AO Smith",
+ rating: 4.6,
+ reviews: 198,
+ price: 15999,
+ mrp: 18999,
+ discount: "15% Off",
+ emi: "EMI from ₹2,200/mo",
+ image: "https://i.ibb.co/0M4T4mJ/ro9.jpg",
+ description:
+ "AO Smith Z1 provides UV purification and hot water at 45°C and 80°C. Ideal for families, offices, and kitchens.",
+ specifications: {
+ purificationProcess: "UV + UF",
+ hotWaterCapacity: "Yes, 45°C and 80°C",
+ stages: "5",
+ },
+ },
+
+ {
+ id: 10,
+ name: "Havells Max Alkaline RO+UV Water Purifier",
+ brand: "Havells",
+ rating: 4.5,
+ reviews: 220,
+ price: 14999,
+ mrp: 16999,
+ discount: "12% Off",
+ emi: "EMI from ₹1,999/mo",
+ image: "https://i.ibb.co/F4WQzC3/ro10.jpg",
+ description:
+ "Havells Max Alkaline provides 100% RO purified alkaline water with balanced minerals and antioxidants.",
+ specifications: {
+ filtrationCapacity: "15 L/hr",
+ purificationProcess: "RO + UV + Alkaline",
+ stages: "8",
+ },
+ },
+];
+
+export default products;
diff --git a/frontend/src/index.css b/frontend/src/index.css
index 08a3ac9..0326a3d 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -1,68 +1,20 @@
-:root {
- font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
+/* src/index.css */
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-a:hover {
- color: #535bf2;
-}
-
-body {
- margin: 0;
- display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
-}
-
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-button:hover {
- border-color: #646cff;
-}
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
+@layer base {
+ html {
+ scroll-behavior: smooth;
+ }
}
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
+@layer components {
+ .btn-primary {
+ @apply bg-primary-600 hover:bg-primary-700 text-white font-medium py-2 px-4 rounded-lg transition-all duration-200 flex items-center gap-2 shadow-md hover:shadow-lg;
}
- button {
- background-color: #f9f9f9;
+
+ .product-card-hover {
+ @apply hover:shadow-xl hover:-translate-y-2 transition-all duration-300;
}
}
diff --git a/frontend/src/reusableComponents/BannerCard.jsx b/frontend/src/reusableComponents/BannerCard.jsx
new file mode 100644
index 0000000..1683241
--- /dev/null
+++ b/frontend/src/reusableComponents/BannerCard.jsx
@@ -0,0 +1,88 @@
+import { motion } from "framer-motion";
+
+export default function BannerCard() {
+ const bannerData = {
+ image: "https://images.unsplash.com/photo-1615484473812-66b5c0b8c63f?auto=format&fit=crop&w=1200&q=80",
+ title: "Exchange Your Old RO",
+ subtitle: "Get instant value for your old purifier. Upgrade to a new model with advanced filtration and smart design.",
+ ctaText: "Explore Exchange Offers"
+ };
+
+ return (
+
+ {/* Background RO Purifier Image - Right Corner */}
+
+

+
+
+
+ {/* Content Section - Full Width */}
+
+
+
+ {bannerData.title}
+
+
+
+ {bannerData.subtitle}
+
+
+
+
+ {bannerData.ctaText}
+
+
+
+
+
+
+
+ {/* RO Purifier Accent - Bottom Right Corner */}
+
+
+
+
+ {/* Decorative particles */}
+
+
+
+ );
+}
diff --git a/frontend/src/reusableComponents/BentoGrid.jsx b/frontend/src/reusableComponents/BentoGrid.jsx
new file mode 100644
index 0000000..b550d6d
--- /dev/null
+++ b/frontend/src/reusableComponents/BentoGrid.jsx
@@ -0,0 +1,124 @@
+import { motion } from "framer-motion";
+
+export default function BentoGrid() {
+ return (
+
+
+ {/* 1️⃣ LEFT TALL CARD - Exchange Offer */}
+
+
+
+
+
Exchange Your Old Purifier
+
+ Save up to 30% when you trade in your old RO system. Keep your
+ home healthy with the latest models.
+
+
+
+
+
+
+ {/* 2️⃣ TOP MIDDLE - Freshness */}
+
+
+
+
+
Experience the Freshness
+
This Season, Stay Hydrated & Save Big!
+
+
+
+
+
+ {/* 3️⃣ RIGHT TALL - Latest RO Purifiers */}
+
+
+
+
+
+ Discover Our Latest RO Purifiers
+
+
+ Energy-efficient, compact, and stylish. Designed for modern homes.
+
+
+
+
+
+
+ {/* 4️⃣ BOTTOM MIDDLE - Service Booking */}
+
+
+
+
+
Book a Technician
+
+ Certified technicians at your doorstep — fast & reliable service.
+
+
+
+
+
+
+
+ );
+}
diff --git a/frontend/src/reusableComponents/Button.jsx b/frontend/src/reusableComponents/Button.jsx
new file mode 100644
index 0000000..7d94861
--- /dev/null
+++ b/frontend/src/reusableComponents/Button.jsx
@@ -0,0 +1,19 @@
+// Button.jsx
+export default function Button({ children, variant="primary", size="md", onClick, disabled, className="" }) {
+ const base = "px-4 py-2 rounded-lg font-medium transition-all duration-200 flex items-center gap-2";
+ const variants = {
+ primary: "bg-blue-600 text-white hover:bg-blue-700",
+ secondary: "bg-gray-200 text-gray-800 hover:bg-gray-300",
+ outline: "border-2 border-blue-600 text-blue-600 hover:bg-blue-50"
+ };
+ const sizes = { sm: "px-3 py-1.5 text-sm", md: "px-4 py-2", lg: "px-6 py-3 text-lg" };
+
+ return (
+
+ );
+}
diff --git a/frontend/src/reusableComponents/CarouselSlider.jsx b/frontend/src/reusableComponents/CarouselSlider.jsx
new file mode 100644
index 0000000..18e8aeb
--- /dev/null
+++ b/frontend/src/reusableComponents/CarouselSlider.jsx
@@ -0,0 +1,62 @@
+import { useState, useEffect } from "react";
+import { motion, AnimatePresence } from "framer-motion";
+
+export default function Carousel({ autoPlay = true }) {
+ const [current, setCurrent] = useState(0);
+
+ const images = [
+ "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=1200&q=80",
+ "https://images.unsplash.com/photo-1441986300917-64674bd600d8?auto=format&fit=crop&w=1200&q=80",
+ "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=1200&q=80",
+ ];
+
+ useEffect(() => {
+ if (autoPlay) {
+ const interval = setInterval(() => {
+ setCurrent((current + 1) % images.length);
+ }, 4000);
+ return () => clearInterval(interval);
+ }
+ }, [current, autoPlay]);
+
+ return (
+
+
+
+
+
+
+
+
+
+ {images.map((_, idx) => (
+
+
+ );
+}
diff --git a/frontend/src/reusableComponents/FeaturesList.jsx b/frontend/src/reusableComponents/FeaturesList.jsx
new file mode 100644
index 0000000..8e63d9f
--- /dev/null
+++ b/frontend/src/reusableComponents/FeaturesList.jsx
@@ -0,0 +1,36 @@
+import React from "react";
+import { motion } from "framer-motion"; // ✅ Added missing import
+import { FaNetworkWired, FaUndoAlt, FaCheckCircle, FaGift } from "react-icons/fa";
+
+export default function FeatureList() {
+ const serviceFeatures = [
+ { icon: FaNetworkWired, name: "Wide Service Network" },
+ { icon: FaUndoAlt, name: "Easy Return" },
+ { icon: FaCheckCircle, name: "Trusted Brand" },
+ { icon: FaGift, name: "Free 1 Year Warranty" },
+ ];
+
+ return (
+
+
+ {serviceFeatures.map((feature, index) => (
+
+
+
+
+
+ {feature.name}
+
+
+ ))}
+
+
+ );
+}
diff --git a/frontend/src/reusableComponents/FilterOption.jsx b/frontend/src/reusableComponents/FilterOption.jsx
new file mode 100644
index 0000000..42640c3
--- /dev/null
+++ b/frontend/src/reusableComponents/FilterOption.jsx
@@ -0,0 +1,44 @@
+// FilterOptions.jsx
+import { useState } from "react";
+
+export default function FilterOptions({ categories, onFilterChange }) {
+ const [selected, setSelected] = useState([]);
+
+ const toggleFilter = (category) => {
+ const newSelected = selected.includes(category)
+ ? selected.filter((c) => c !== category)
+ : [...selected, category];
+ setSelected(newSelected);
+ onFilterChange(newSelected);
+ };
+
+ return (
+
+
Filters
+
+ {categories.map((category) => (
+
+ ))}
+
+ {selected.length > 0 && (
+
+ )}
+
+ );
+}
diff --git a/frontend/src/reusableComponents/Footer.jsx b/frontend/src/reusableComponents/Footer.jsx
new file mode 100644
index 0000000..bc4c32a
--- /dev/null
+++ b/frontend/src/reusableComponents/Footer.jsx
@@ -0,0 +1,76 @@
+export default function Footer() {
+ return (
+
+ );
+}
diff --git a/frontend/src/reusableComponents/Input.jsx b/frontend/src/reusableComponents/Input.jsx
new file mode 100644
index 0000000..c0a88ed
--- /dev/null
+++ b/frontend/src/reusableComponents/Input.jsx
@@ -0,0 +1,15 @@
+// Input.jsx
+export default function Input({ label, type="text", value, onChange, error, className="" }) {
+ return (
+
+ {label &&
}
+
+ {error &&
{error}
}
+
+ );
+}
diff --git a/frontend/src/reusableComponents/ListCards.jsx b/frontend/src/reusableComponents/ListCards.jsx
new file mode 100644
index 0000000..972e42d
--- /dev/null
+++ b/frontend/src/reusableComponents/ListCards.jsx
@@ -0,0 +1,46 @@
+import React from "react";
+import { FaMapMarkerAlt, FaExchangeAlt } from "react-icons/fa";
+import { MdCompareArrows } from "react-icons/md";
+
+export default function ListCards() {
+ const cards = [
+ {
+ icon: FaMapMarkerAlt,
+ title: "Track Location",
+ content: "Track your product delivery in real-time.",
+ },
+ {
+ icon: MdCompareArrows,
+ title: "Compare Product",
+ content: "Compare features between multiple products.",
+ },
+ {
+ icon: FaExchangeAlt,
+ title: "Xchange Product",
+ content: "Exchange your products quickly and easily.",
+ },
+ ];
+
+ return (
+
+ {cards.map((card, index) => (
+
+
+
+
+
+
+ {card.title}
+
+
+ {card.content}
+
+
+
+ ))}
+
+ );
+}
diff --git a/frontend/src/reusableComponents/ModalPopup.jsx b/frontend/src/reusableComponents/ModalPopup.jsx
new file mode 100644
index 0000000..c414365
--- /dev/null
+++ b/frontend/src/reusableComponents/ModalPopup.jsx
@@ -0,0 +1,43 @@
+// Modal.jsx
+import { motion, AnimatePresence } from "framer-motion";
+
+export default function Modal({ isOpen, onClose, children, title }) {
+ return (
+
+ {isOpen && (
+ <>
+
+
+ e.stopPropagation()}
+ >
+
+
{title}
+
+
+ {children}
+
+
+ >
+ )}
+
+ );
+}
diff --git a/frontend/src/reusableComponents/Navbar.jsx b/frontend/src/reusableComponents/Navbar.jsx
new file mode 100644
index 0000000..cc68b08
--- /dev/null
+++ b/frontend/src/reusableComponents/Navbar.jsx
@@ -0,0 +1,93 @@
+import { useState } from "react";
+import { FaShoppingCart, FaUserCircle, FaSearch, FaTimes } from "react-icons/fa";
+import Button from './Button';
+
+
+export default function Navbar({ cartCount }) {
+ const [isSearchOpen, setSearchOpen] = useState(false);
+ const [searchTerm, setSearchTerm] = useState("");
+
+ return (
+
+ );
+}
diff --git a/frontend/src/reusableComponents/ProductCard.jsx b/frontend/src/reusableComponents/ProductCard.jsx
new file mode 100644
index 0000000..da325da
--- /dev/null
+++ b/frontend/src/reusableComponents/ProductCard.jsx
@@ -0,0 +1,231 @@
+import { motion } from "framer-motion";
+import { FiEye, FiCheck, FiStar, FiCreditCard } from "react-icons/fi";
+import { TbBasket } from "react-icons/tb";
+import Button from "./Button";
+
+export default function ProductCard() {
+ const featuredProducts = [
+ {
+ id: 0,
+ isPromo: true,
+ brand: "Latest",
+ name: "New Products",
+ image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=500&q=80",
+ features: ["Latest Arrivals", "Best Deals"],
+ },
+ {
+ id: 1,
+ brand: "Pureit",
+ name: "Ro Enrich Glory RO+UV+UF Copper Water Purifier",
+ price: 11999,
+ originalPrice: 12599,
+ image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=500&q=80",
+ isNew: true,
+ features: ["5 Year Free Service", "Free Delivery"],
+ rating: 4.6,
+ reviews: "98",
+ emi: 2084,
+ },
+ {
+ id: 2,
+ brand: "Aquaguard",
+ name: "Enhance RO+UV Water Purifier",
+ price: 8999,
+ originalPrice: 10999,
+ image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=500&q=80",
+ features: ["3 Year Warranty", "Free Installation"],
+ rating: 4.4,
+ reviews: "156",
+ emi: 1673,
+ },
+ {
+ id: 3,
+ brand: "Kent",
+ name: "Grand Plus RO Water Purifier",
+ price: 14999,
+ image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=500&q=80",
+ isNew: true,
+ features: ["10 Year Free Service", "Free Delivery"],
+ rating: 4.8,
+ reviews: "234",
+ emi: 2499,
+ },
+ ];
+
+ return (
+
+ {featuredProducts.map((product, index) => (
+
+ ))}
+
+ );
+}
+
+function SingleProductCard({ product, index }) {
+ if (!product) {
+ return (
+
+ Product data missing
+
+ );
+ }
+
+ const discount = product.originalPrice
+ ? Math.round(((product.originalPrice - product.price) / product.originalPrice) * 100)
+ : 0;
+
+ return (
+
+ {/* PROMO CARD */}
+ {product.isPromo ? (
+
+
+

+
+
+
+
+
+ SPECIAL PROMOTION
+
+
+
+
+
+ {product.promoTitle || "Exclusive New Arrivals"}
+
+
+ {product.promoSubtitle || "Find the best new products curated just for you."}
+
+
+
+
+
+ Shop Now
+
+
+
+ ) : (
+ /* NORMAL PRODUCT CARD */
+ <>
+
+
+ {product.isNew && (
+
+ NEW
+
+ )}
+ {discount > 0 && (
+
+ {discount}% OFF
+
+ )}
+
+
+
+
+
+ {product.brand}
+
+
+ {product.name}
+
+
+
+
+
+ {product.features?.slice(0, 3).map((feature, idx) => (
+
+
+ {feature}
+
+ ))}
+
+
+
+
+
+
+
+ ₹{product.price?.toLocaleString()}
+
+ {product.originalPrice && (
+
+ ₹{product.originalPrice.toLocaleString()}
+
+ )}
+
+
+ {product.rating && (
+
+ {product.rating}
+
+ )}
+
+
+
+
+ {product.emi && (
+
+
+
+
+ No Cost EMI ₹{product.emi}/mo
+
+
+
+
+ )}
+
+
+
+
+
+ Add to Cart
+
+
+
+
+
+
+
+
+ >
+ )}
+
+ );
+}
diff --git a/frontend/src/reusableComponents/SearchBar.jsx b/frontend/src/reusableComponents/SearchBar.jsx
new file mode 100644
index 0000000..b837293
--- /dev/null
+++ b/frontend/src/reusableComponents/SearchBar.jsx
@@ -0,0 +1,18 @@
+// SearchBar.jsx
+export default function SearchBar({ onSearch }) {
+ return (
+
+
+
onSearch(e.target.value)}
+ />
+
+
+
+ );
+}
diff --git a/frontend/src/reusableComponents/TechnicianCard.jsx b/frontend/src/reusableComponents/TechnicianCard.jsx
new file mode 100644
index 0000000..5d3e3ec
--- /dev/null
+++ b/frontend/src/reusableComponents/TechnicianCard.jsx
@@ -0,0 +1,146 @@
+import { motion } from "framer-motion";
+import { FiEye, FiStar } from "react-icons/fi";
+import { TbCalendarCheck } from "react-icons/tb";
+
+export default function TechnicianCard() {
+ const technicians = [
+ {
+ id: 1,
+ name: "Rajesh Kumar",
+ image: "https://randomuser.me/api/portraits/men/32.jpg",
+ rating: 4.8,
+ reviews: 220,
+ experience: 6,
+ location: "Chennai",
+ services: ["Leakage Repair", "Filter Change"],
+ startingPrice: 499,
+ availableToday: true,
+ },
+ {
+ id: 2,
+ name: "Suresh Reddy",
+ image: "https://randomuser.me/api/portraits/men/45.jpg",
+ rating: 4.5,
+ reviews: 180,
+ experience: 5,
+ location: "Bangalore",
+ services: ["Pipe Replacement", "RO Servicing"],
+ startingPrice: 599,
+ availableToday: false,
+ },
+ {
+ id: 3,
+ name: "Anita Sharma",
+ image: "https://randomuser.me/api/portraits/women/65.jpg",
+ rating: 4.7,
+ reviews: 150,
+ experience: 7,
+ location: "Mumbai",
+ services: ["Filter Change", "RO Installation"],
+ startingPrice: 549,
+ availableToday: true,
+ },
+ {
+ id: 4,
+ name: "Vikram Singh",
+ image: "https://randomuser.me/api/portraits/men/78.jpg",
+ rating: 4.6,
+ reviews: 200,
+ experience: 6,
+ location: "Delhi",
+ services: ["Leakage Repair", "Pipe Replacement"],
+ startingPrice: 499,
+ availableToday: false,
+ },
+ ];
+
+ return (
+
+ {technicians.map((tech, index) => (
+
+ ))}
+
+ );
+}
+
+function SingleTechnicianCard({ technician, index }) {
+ if (!technician) {
+ return (
+
+ Technician data missing
+
+ );
+ }
+
+ return (
+
+
+

+ {technician.availableToday && (
+
+ Available Today
+
+ )}
+
+
+
+
+
{technician.name}
+
+
+
+ {technician.rating} ({technician.reviews})
+
+
• {technician.experience} yrs
+
+
{technician.location}
+
+
+
+ {technician.services?.map((service, idx) => (
+
+ {service}
+
+ ))}
+
+
+
+ ₹{technician.startingPrice} onwards
+
+
+
+
+
+ View Profile
+
+
+
+ Book Now
+
+
+
+
+ );
+}