diff --git a/package-lock.json b/package-lock.json index ccc0331..5bcee77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,11 @@ "dependencies": { "framer-motion": "^12.42.0", "jsdom": "^29.1.1", + "lucide-react": "^1.22.0", "next": "16.2.9", "puppeteer-core": "^24.43.1", "react": "19.2.4", - "react-dom": "19.2.4", - "react-icons": "^5.6.0" + "react-dom": "19.2.4" }, "devDependencies": { "@tailwindcss/postcss": "^4", @@ -5760,6 +5760,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.22.0.tgz", + "integrity": "sha512-c9o3l0PiNcgOQDW4F31BEYHudE7kgxVt3o30qMl36ZPwTxXlGB4QnLilhERvVM4uh/pl5MDyY1/gzZSYcHDtBg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -6512,15 +6521,6 @@ "react": "^19.2.4" } }, - "node_modules/react-icons": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.6.0.tgz", - "integrity": "sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==", - "license": "MIT", - "peerDependencies": { - "react": "*" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/package.json b/package.json index 6f5a8df..9c21845 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,23 @@ "start": "next start", "lint": "eslint" }, + "browserslist": [ + "last 2 Chrome versions", + "last 2 Edge versions", + "last 2 Firefox versions", + "last 2 Safari versions", + "last 2 iOS versions", + "not dead", + "not op_mini all" + ], "dependencies": { "framer-motion": "^12.42.0", "jsdom": "^29.1.1", + "lucide-react": "^1.22.0", "next": "16.2.9", "puppeteer-core": "^24.43.1", "react": "19.2.4", - "react-dom": "19.2.4", - "react-icons": "^5.6.0" + "react-dom": "19.2.4" }, "devDependencies": { "@tailwindcss/postcss": "^4", diff --git a/public/about.webp b/public/about.webp new file mode 100644 index 0000000..4f5f281 Binary files /dev/null and b/public/about.webp differ diff --git a/public/contact-page1.webp b/public/contact-page1.webp new file mode 100644 index 0000000..c08f4ea Binary files /dev/null and b/public/contact-page1.webp differ diff --git a/public/contact.webp b/public/contact.webp new file mode 100644 index 0000000..37d9913 Binary files /dev/null and b/public/contact.webp differ diff --git a/public/contect.webp b/public/contect.webp new file mode 100644 index 0000000..3c4609e Binary files /dev/null and b/public/contect.webp differ diff --git a/public/fonts/material-symbols-outlined.woff2 b/public/fonts/material-symbols-outlined.woff2 new file mode 100644 index 0000000..bcdd223 Binary files /dev/null and b/public/fonts/material-symbols-outlined.woff2 differ diff --git a/public/images/app-mockup.webp b/public/images/app-mockup.webp new file mode 100644 index 0000000..ed49e53 Binary files /dev/null and b/public/images/app-mockup.webp differ diff --git a/public/images/business1.webp b/public/images/business1.webp new file mode 100644 index 0000000..bc1d29e Binary files /dev/null and b/public/images/business1.webp differ diff --git a/public/images/cat-daily-essentials.webp b/public/images/cat-daily-essentials.webp new file mode 100644 index 0000000..545dbdd Binary files /dev/null and b/public/images/cat-daily-essentials.webp differ diff --git a/public/images/cat-health-wellness.webp b/public/images/cat-health-wellness.webp new file mode 100644 index 0000000..13ead10 Binary files /dev/null and b/public/images/cat-health-wellness.webp differ diff --git a/public/images/cat-home-services.webp b/public/images/cat-home-services.webp new file mode 100644 index 0000000..6762ce4 Binary files /dev/null and b/public/images/cat-home-services.webp differ diff --git a/public/images/cat-hot-food.webp b/public/images/cat-hot-food.webp new file mode 100644 index 0000000..0260bfc Binary files /dev/null and b/public/images/cat-hot-food.webp differ diff --git a/public/images/cat-pet-essentials.webp b/public/images/cat-pet-essentials.webp new file mode 100644 index 0000000..df5fcf3 Binary files /dev/null and b/public/images/cat-pet-essentials.webp differ diff --git a/public/images/home1.webp b/public/images/home1.webp new file mode 100644 index 0000000..8d1412b Binary files /dev/null and b/public/images/home1.webp differ diff --git a/public/images/people1.webp b/public/images/people1.webp new file mode 100644 index 0000000..d40eea1 Binary files /dev/null and b/public/images/people1.webp differ diff --git a/public/images/slider-courier-mask-purple-v5.webp b/public/images/slider-courier-mask-purple-v5.webp new file mode 100644 index 0000000..ebdbd33 Binary files /dev/null and b/public/images/slider-courier-mask-purple-v5.webp differ diff --git a/public/images/slider-glob.webp b/public/images/slider-glob.webp new file mode 100644 index 0000000..11fb082 Binary files /dev/null and b/public/images/slider-glob.webp differ diff --git a/public/map1.webp b/public/map1.webp new file mode 100644 index 0000000..3020049 Binary files /dev/null and b/public/map1.webp differ diff --git a/public/mobile-image.webp b/public/mobile-image.webp new file mode 100644 index 0000000..0485d96 Binary files /dev/null and b/public/mobile-image.webp differ diff --git a/public/nearle-business.webp b/public/nearle-business.webp new file mode 100644 index 0000000..c983e6b Binary files /dev/null and b/public/nearle-business.webp differ diff --git a/public/nearle-people.webp b/public/nearle-people.webp new file mode 100644 index 0000000..4b3ce57 Binary files /dev/null and b/public/nearle-people.webp differ diff --git a/public/vegetable.png b/public/vegetable.png new file mode 100644 index 0000000..e6e761a Binary files /dev/null and b/public/vegetable.png differ diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index b8ec28c..110c480 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -38,7 +38,7 @@ const STRATEGY_CARDS = [ descr: "Nearle is essential for a business to grow by leveraging the full potential of its neighbourhood. It is an indispensable tool for consumers to take advantage of what their neighbourhood has to offer.", icon: "help_outline", iconClass: "bg-[#6330D6]/10 text-[#6330D6] border-[#6330D6]/20", - image: "/images/app-mockup.png", + image: "/images/app-mockup.webp", imageAlt: "Nearle app on a smartphone", imgFit: "object-contain object-bottom" } diff --git a/src/app/brands/page.tsx b/src/app/brands/page.tsx index 38e99e4..ce27a83 100644 --- a/src/app/brands/page.tsx +++ b/src/app/brands/page.tsx @@ -199,7 +199,7 @@ export default function BrandsPage() {
Fresh Harvest & Daily Needs
{item.desc}
diff --git a/src/components/home/ServiceCategories.tsx b/src/components/home/ServiceCategories.tsx index b13391f..5e2ae6b 100644 --- a/src/components/home/ServiceCategories.tsx +++ b/src/components/home/ServiceCategories.tsx @@ -11,7 +11,7 @@ const MotionLink = motion.create(Link); const CATEGORIES = [ { name: "Groceries & Daily Essentials", - image: "/images/cat-daily-essentials.png", + image: "/images/cat-daily-essentials.webp", tag: "Local Store", tagStyle: "bg-secondary text-white", desc: "Fresh groceries, dairy, and household essentials from nearby shops.", @@ -19,7 +19,7 @@ const CATEGORIES = [ }, { name: "Wellness", - image: "/images/cat-health-wellness.png", + image: "/images/cat-health-wellness.webp", tag: "Available Near You", tagStyle: "bg-primary text-white", desc: "Prescription medicines and wellness supplies from verified pharmacies.", @@ -27,7 +27,7 @@ const CATEGORIES = [ }, { name: "Food & Snacks", - image: "/images/cat-hot-food.png", + image: "/images/cat-hot-food.webp", tag: "Nearby", tagStyle: "bg-brand-accent text-brand-dark", desc: "Fresh meals, bakes, and local snacks from neighbourhood kitchens.", @@ -35,7 +35,7 @@ const CATEGORIES = [ }, { name: "Fresh Fruits & Vegetables", - image: "/images/cat-daily-essentials.png", + image: "/vegetable.png", tag: "Local Store", tagStyle: "bg-secondary text-white", desc: "Farm-fresh fruits and vegetables from trusted local vendors.", @@ -43,7 +43,7 @@ const CATEGORIES = [ }, { name: "Home Needs", - image: "/images/cat-pet-essentials.png", + image: "/images/cat-pet-essentials.webp", tag: "Available Near You", tagStyle: "bg-orange-500 text-white", desc: "Kitchen supplies, household cleaners, and daily utilities.", @@ -51,7 +51,7 @@ const CATEGORIES = [ }, { name: "Local Services", - image: "/images/cat-home-services.png", + image: "/images/cat-home-services.webp", tag: "Nearby", tagStyle: "bg-blue-600 text-white", desc: "Verified local handymen, laundry, tailors, and household help.", @@ -117,6 +117,7 @@ export function ServiceCategories() { alt={cat.name} width={400} height={300} + sizes="(max-width: 767px) calc(100vw - 48px), (max-width: 1023px) calc((100vw - 80px) / 2), 405px" className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500" /> ) : ( diff --git a/src/components/home/StoreQRSection.tsx b/src/components/home/StoreQRSection.tsx index a02fd78..6d25847 100644 --- a/src/components/home/StoreQRSection.tsx +++ b/src/components/home/StoreQRSection.tsx @@ -134,7 +134,7 @@ export function StoreQRSection() { >Order Online
-Order Online
-
424, Diwan Bahadur Rd, Opp. Sri Krishna Sweets, R.S. Puram,
Coimbatore, TN 641002
diff --git a/src/components/layout/PremiumNavbar.tsx b/src/components/layout/PremiumNavbar.tsx
index 94656a9..983259b 100644
--- a/src/components/layout/PremiumNavbar.tsx
+++ b/src/components/layout/PremiumNavbar.tsx
@@ -2,7 +2,7 @@
import Link from "next/link";
import Image from "next/image";
-import { useState, useEffect } from "react";
+import { useState } from "react";
import { usePathname } from "next/navigation";
import {
motion,
@@ -56,11 +56,6 @@ export function PremiumNavbar() {
setScrolled(y > 20);
});
- // Close mobile menu whenever the route changes (navbar no longer remounts on navigation)
- useEffect(() => {
- setMobileOpen(false);
- }, [pathname]);
-
const isActiveLink = (href: string) => {
if (href === "/") return pathname === "/";
return pathname.startsWith(href);
diff --git a/src/components/motion/AnimatedSection.tsx b/src/components/motion/AnimatedSection.tsx
index 74f722e..d193aa6 100644
--- a/src/components/motion/AnimatedSection.tsx
+++ b/src/components/motion/AnimatedSection.tsx
@@ -3,7 +3,7 @@
import { motion } from "framer-motion";
import type { ReactNode } from "react";
import { fadeUp, staggerContainer, viewport } from "@/lib/animations";
-import type { Variants } from "framer-motion";
+import type { TargetAndTransition, Variants } from "framer-motion";
const VARIANTS: Record
{item.desc}
diff --git a/src/components/ui/MaterialIcon.tsx b/src/components/ui/MaterialIcon.tsx
index 4bd76aa..ae9fb98 100644
--- a/src/components/ui/MaterialIcon.tsx
+++ b/src/components/ui/MaterialIcon.tsx
@@ -1,3 +1,21 @@
+import {
+ Target,
+ Eye,
+ CircleHelp,
+ Users,
+ Store,
+ Building2,
+ Zap,
+ Download,
+ Compass,
+ Smile,
+ X,
+ Menu,
+ MapPin,
+ Phone,
+ type LucideIcon,
+} from "lucide-react";
+
type MaterialIconProps = {
icon: string;
size?: number;
@@ -5,15 +23,51 @@ type MaterialIconProps = {
className?: string;
};
+// Small, frequently-used subset of Material Symbols rendered as inline SVG
+// (via lucide-react) so these pages don't need to fetch the full icon font.
+// Any icon name not listed here falls back to the material-symbols-outlined
+// font, which other pages still rely on.
+const LUCIDE_ICON_MAP: Record