diff --git a/desktop_screenshot.png b/desktop_screenshot.png deleted file mode 100644 index c639224..0000000 Binary files a/desktop_screenshot.png and /dev/null differ diff --git a/mobile_screenshot.png b/mobile_screenshot.png deleted file mode 100644 index b8088a5..0000000 Binary files a/mobile_screenshot.png and /dev/null differ diff --git a/public/contact page1.png b/public/contact page1.png new file mode 100644 index 0000000..831e36f Binary files /dev/null and b/public/contact page1.png differ diff --git a/public/contact.png b/public/contact.png new file mode 100644 index 0000000..bffb003 Binary files /dev/null and b/public/contact.png differ diff --git a/public/images/business1.png b/public/images/business1.png new file mode 100644 index 0000000..61ab46c Binary files /dev/null and b/public/images/business1.png differ diff --git a/public/images/home1.png b/public/images/home1.png new file mode 100644 index 0000000..3550c03 Binary files /dev/null and b/public/images/home1.png differ diff --git a/public/images/people1.png b/public/images/people1.png new file mode 100644 index 0000000..f8aa922 Binary files /dev/null and b/public/images/people1.png differ diff --git a/src/components/heroes/AboutHero.tsx b/src/components/heroes/AboutHero.tsx index f773b2b..1d7cae1 100644 --- a/src/components/heroes/AboutHero.tsx +++ b/src/components/heroes/AboutHero.tsx @@ -1,15 +1,11 @@ "use client"; -import Link from "next/link"; +import Image from "next/image"; import { motion } from "framer-motion"; -import { HeroVisualCollage } from "@/components/layout/HeroVisualCollage"; import { FeatureStatsRow } from "@/components/ui/FeatureStatsRow"; -import type { Variants } from "framer-motion"; import { fadeInSlow, - fadeUp, staggerSlow, - viewport, } from "@/lib/animations"; const HERO_STATS = [ @@ -19,15 +15,6 @@ const HERO_STATS = [ { title: "Coimbatore & Beyond", icon: "location_city", desc: "Growing neighbourhood reach" }, ]; -const COLLAGE_CARDS = [ - { text: "Local First", icon: "store" }, - { text: "Trusted Network", icon: "verified" }, - { text: "Connected Communities", icon: "groups" }, -]; - -// Choreography: deliberate, slow-stagger sequence — thoughtful and purposeful -// badge fades in (opacity only) → h1 sweeps from left → p fades up → CTAs fade up -// The collage scales up softly, reinforcing the "built carefully" feeling const badgeVariant = fadeInSlow; const titleVariant = { hidden: { opacity: 0, x: -30 }, @@ -45,103 +32,56 @@ const descVariant = { transition: { duration: 0.6, ease: [0.22, 1, 0.36, 1] as [number, number, number, number] }, }, }; -const ctaVariant = fadeUp; - -const collageVariant = { - hidden: { opacity: 0, scale: 0.92 }, - visible: { - opacity: 1, - scale: 1, - transition: { duration: 0.95, ease: [0.22, 1, 0.36, 1] as [number, number, number, number], delay: 0.2 }, - }, -}; - -// Trust-feeling card variant: no spring bounce, deliberate easing -const trustCardVariant: Variants = { - hidden: { opacity: 0, y: 20 }, - visible: { - opacity: 1, - y: 0, - transition: { duration: 0.7, ease: [0.22, 1, 0.36, 1] as [number, number, number, number] }, - }, -}; export function AboutHero() { return ( -
-
-
+
+
+ +
- {/* Left Column: slow, deliberate stagger — thoughtful pacing */} About Nearle Built for Every
- Neighbourhood. + Neighbourhood.
Nearle is India's first hyper-local managed “Neighbourhood living platform” which brings all the amenities and requirements of residents to their fingertips. - - - - Our Story - - - Join Our Journey - - -
- - {/* Right Column: soft scale-up — gentle and community-first */} - -
-
+
diff --git a/src/components/heroes/BusinessHero.tsx b/src/components/heroes/BusinessHero.tsx index 57e94a3..5fbc654 100644 --- a/src/components/heroes/BusinessHero.tsx +++ b/src/components/heroes/BusinessHero.tsx @@ -1,16 +1,12 @@ "use client"; -import Link from "next/link"; +import Image from "next/image"; import { motion } from "framer-motion"; -import { HeroVisualCollage } from "@/components/layout/HeroVisualCollage"; import { FeatureStatsRow } from "@/components/ui/FeatureStatsRow"; import { slideInLeftSubtle, - fadeUp, fadeIn, - scaleIn, staggerContainer, - viewport, } from "@/lib/animations"; const HERO_BENEFITS = [ @@ -20,13 +16,6 @@ const HERO_BENEFITS = [ { title: "Local Delivery Support", icon: "local_shipping", desc: "Deliver fast & verified" }, ]; -const COLLAGE_CARDS = [ - { text: "Nearby Customers", icon: "people" }, - { text: "Orders & Offers", icon: "local_offer" }, - { text: "Local Delivery Support", icon: "local_shipping" }, -]; - -// Choreography: badge slides left → title fades up → description fades in (opacity only) → CTAs scale in const badgeVariant = slideInLeftSubtle; const titleVariant = { hidden: { opacity: 0, y: 28 }, @@ -37,17 +26,27 @@ const titleVariant = { }, }; const descVariant = fadeIn; -const ctaVariant = scaleIn; export function BusinessHero() { return ( -
-
-
+
+
+ +
+ +
{/* Left Column: animated with unique stagger */} Get discovered by nearby customers, manage orders, and build repeat business from one simple platform. - - - - List Your Store - - - Explore Solutions - - - - - {/* Right Column: subtle fade-in — HeroVisualCollage internal animations choreograph each element */} - -
-
+
diff --git a/src/components/heroes/BusinessHeroVisual.tsx b/src/components/heroes/BusinessHeroVisual.tsx new file mode 100644 index 0000000..c7aaf62 --- /dev/null +++ b/src/components/heroes/BusinessHeroVisual.tsx @@ -0,0 +1,295 @@ +"use client"; + +import { motion, useReducedMotion } from "framer-motion"; +import { MaterialIcon } from "@/components/ui/MaterialIcon"; + +// ─── Floating feature card ─────────────────────────────────────────────────── + +type CardData = { icon: string; title: string; desc: string }; + +const CARDS: CardData[] = [ + { icon: "verified", title: "Verified Visibility", desc: "Get discovered by nearby shoppers" }, + { icon: "people", title: "More Customers", desc: "Build trust and attract local customers" }, + { icon: "trending_up", title: "Grow Faster", desc: "Increase repeat business" }, +]; + +function FloatingCard({ + card, className, entryDelay, floatDelay, floatDist, +}: { card: CardData; className: string; entryDelay: number; floatDelay: number; floatDist: number }) { + const reduce = useReducedMotion(); + return ( + + +
+ +
+
+
{card.title}
+
{card.desc}
+
+
+
+ ); +} + +// ─── Phone screen UI (React + Tailwind, no image) ──────────────────────────── + +function PhoneScreen() { + return ( +
+ + {/* Header */} +
+
+
+ n +
+ nearle + BIZ +
+
+
+ +
+
+ M +
+
+
+ + {/* Scrollable content */} +
+ + {/* Search bar */} +
+ + Search shops, offers… +
+ + {/* Analytics strip */} +
+ {[ + { val: "₹2.4k", label: "Revenue", color: "text-[#6330D6]" }, + { val: "38", label: "Orders", color: "text-[#16001D]" }, + { val: "↑12%", label: "Growth", color: "text-[#16a34a]" }, + ].map(s => ( +
+ {s.val} + {s.label} +
+ ))} +
+ + {/* Featured store card */} +
+
+
+ +
+
+
Green Valley Mart
+
+ + 4.8 · 0.3 km away +
+
+
+ + Verified +
+
+
+ Visitors today + 124 customers +
+
+ + {/* Quick actions */} +
+
Quick Actions
+
+ {[ + { icon: "add_box", label: "Add Item" }, + { icon: "local_offer", label: "Offers" }, + { icon: "analytics", label: "Stats" }, + { icon: "chat", label: "Chat" }, + ].map(a => ( +
+
+ +
+ {a.label} +
+ ))} +
+
+ + {/* Active offers */} +
+
Active Offers
+
+
+
20% OFF
+
Groceries
+
+
+
15% OFF
+
Daily items
+
+
+
+ + {/* Latest order */} +
+
+ +
+
+
Order #1042
+
₹340 · 2 items · Preparing
+
+
+
+ +
+ + {/* Bottom navigation */} +
+ {[ + { icon: "home", active: true }, + { icon: "bar_chart", active: false }, + { icon: "shopping_bag", active: false }, + { icon: "group", active: false }, + { icon: "settings", active: false }, + ].map(tab => ( +
+ + {tab.active &&
} +
+ ))} +
+
+ ); +} + +// ─── Main visual component ──────────────────────────────────────────────────── + +export function BusinessHeroVisual() { + const reduce = useReducedMotion(); + + return ( +
+ + {/* Soft radial glows — centred on phone */} +
+
+
+
+ + {/* Dotted pattern — top-right */} +
+ + + + + + + + +
+ + {/* Dotted pattern — bottom-left */} +
+ + + + + + + + +
+ + {/* ── Phone mockup ─────────────────────────────────────────────────── */} + + + {/* Outer bezel */} +
+ {/* Screen */} +
+ +
+ + {/* Dynamic island */} +
+ + {/* Screen glare */} +
+
+ + + + {/* ── Floating cards ────────────────────────────────────────────────── */} + + {/* Card 1 — Verified Visibility · top-right */} + + + {/* Card 2 — More Customers · bottom-left */} + + + {/* Card 3 — Grow Faster · mid-right */} + +
+ ); +} diff --git a/src/components/heroes/ContactHero.tsx b/src/components/heroes/ContactHero.tsx index 2fcb989..e5d0728 100644 --- a/src/components/heroes/ContactHero.tsx +++ b/src/components/heroes/ContactHero.tsx @@ -1,5 +1,6 @@ "use client"; +import Image from "next/image"; import { motion } from "framer-motion"; import { MaterialIcon } from "@/components/ui/MaterialIcon"; import { ContactForm } from "@/components/contact/ContactForm"; @@ -52,10 +53,21 @@ const infoStagger = { export function ContactHero() { return ( -
+
+ +
+
{/* Decorative map grid — not animated so it stays subtle */} -
+
@@ -66,12 +78,12 @@ export function ContactHero() {
-
+
{/* Left Column — Contact Info: sequential stagger from top */} Whether you are a customer, local store owner, or delivery partner, our team is here to help you get started with Nearle. {/* Info rows: each row staggers in from left */} -
-
+
+
+ +
+ +
- {/* Left Column: snappy fast-stagger sequence */} Discover verified local stores, save your favorite merchants, and order everyday items with superfast local fulfillment. - - - - Get the App - - - Explore Stores - - - - - {/* Right Column: subtle fade — HeroVisualCollage's internal animations handle phone, images, badges individually */} - -
-
+
diff --git a/src/components/home/Hero.tsx b/src/components/home/Hero.tsx index d632ac9..8611dfd 100644 --- a/src/components/home/Hero.tsx +++ b/src/components/home/Hero.tsx @@ -1,8 +1,8 @@ "use client"; -import Link from "next/link"; +import { Fragment } from "react"; import Image from "next/image"; -import { motion, useReducedMotion } from "framer-motion"; +import { motion } from "framer-motion"; import { MaterialIcon } from "@/components/ui/MaterialIcon"; import { viewport } from "@/lib/animations"; @@ -15,7 +15,6 @@ const PROOF_ITEMS = [ { label: "Trusted", text: "Local Platform", icon: "star" }, ]; -// Left column: badge → line1 mask-reveal → line2 mask-reveal → desc → primary CTA → secondary CTA const heroStagger = { hidden: {}, visible: { transition: { staggerChildren: 0.12, delayChildren: 0.05 } }, @@ -43,21 +42,6 @@ const descVariant = { visible: { opacity: 1, y: 0, transition: { duration: 0.55, ease: EASE } }, }; -const primaryCtaVariant = { - hidden: { opacity: 0, y: 14, scale: 0.97 }, - visible: { opacity: 1, y: 0, scale: 1, transition: { duration: 0.45, ease: EASE } }, -}; - -const secondaryCtaVariant = { - hidden: { opacity: 0, x: -14 }, - visible: { opacity: 1, x: 0, transition: { duration: 0.4, ease: EASE } }, -}; - -const logoReveal = { - hidden: { opacity: 0, scale: 0.88, y: 20 }, - visible: { opacity: 1, scale: 1, y: 0, transition: { duration: 0.75, ease: EASE, delay: 0.15 } }, -}; - const statStagger = { hidden: {}, visible: { transition: { staggerChildren: 0.08 } }, @@ -69,175 +53,102 @@ const statItem = { }; export function Hero() { - const reducedMotion = useReducedMotion(); - return ( -
- {/* ─── DECORATIONS (BEHIND CONTENT) ─── */} +
+
+ +
- {/* 1. Large pale lavender partial circle (top-left) */} - +
- - {/* 4. Dotted pattern (between left text and right collage) */} -
- - - - - - -
- - - {/* 6. Large partial purple circle (bottom-right corner) */} - - - {/* ─── TWO-COLUMN CONTENT GRID ─── */} -
- - {/* LEFT COLUMN: Editorial Typography & Copy */} - - {/* Badge */} - - Welcome to Nearle - - - {/* H1: line-by-line mask reveal */} - -
- - Everything Local. - -
-
- - Everything Near. - -
-
- - {/* Description */} - - Discover verified local stores, exclusive offers, fast delivery, and a better way to shop within your neighbourhood. - - - {/* CTAs: primary scales in, secondary slides from left */} -
- - - Explore Stores - - - - - Get the App - - -
-
- - {/* RIGHT COLUMN: Nearle brand logo composition */} -
- {/* Atmospheric glow — elliptical, not circular, fades naturally */} -
- - {/* Logo with slow float and grounding shadow */} - - Nearle – Your Neighbourhood Commerce Platform - - -
+ Welcome to Nearle + + {/* H1: line-by-line mask reveal */} + +
+ + Everything Local. + +
+
+ + Everything Near. + +
+
+ + {/* Description */} + + Discover verified local stores, exclusive offers, fast delivery, and a better way to shop within your neighbourhood. + +
+ +
{/* ─── BOTTOM PROOF STATS ROW ─── */}
- - {PROOF_ITEMS.map((item, idx) => ( - - {idx > 0 && ( -
- )} -
- -
-
-
- {item.label} -
-
- {item.text} -
-
- - ))} - +
+ +
+ {PROOF_ITEMS.map((item, idx) => ( + + +
+ +
+
+
+ {item.label} +
+
+ {item.text} +
+
+
+ {idx < PROOF_ITEMS.length - 1 && ( + + +
diff --git a/src/components/home/ServiceCategories.tsx b/src/components/home/ServiceCategories.tsx index 584e733..b13391f 100644 --- a/src/components/home/ServiceCategories.tsx +++ b/src/components/home/ServiceCategories.tsx @@ -18,7 +18,7 @@ const CATEGORIES = [ cta: "Shop Fresh", }, { - name: "Medicines & Pharmacy", + name: "Wellness", image: "/images/cat-health-wellness.png", tag: "Available Near You", tagStyle: "bg-primary text-white", diff --git a/src/components/ui/FeatureStatsRow.tsx b/src/components/ui/FeatureStatsRow.tsx index b4726f6..90845ca 100644 --- a/src/components/ui/FeatureStatsRow.tsx +++ b/src/components/ui/FeatureStatsRow.tsx @@ -1,5 +1,6 @@ "use client"; +import { Fragment } from "react"; import { motion } from "framer-motion"; import { MaterialIcon } from "./MaterialIcon"; import { fadeUp, staggerContainer, viewport } from "@/lib/animations"; @@ -17,57 +18,45 @@ type FeatureStatsRowProps = { export function FeatureStatsRow({ items, className = "" }: FeatureStatsRowProps) { return ( - -
- {items.map((item, index) => ( - -
- -
-
-

- {item.title} -

- {item.desc && ( -

- {item.desc} -

+
+ +
+ {items.map((item, index) => ( + + +
+ +
+
+

+ {item.title} +

+ {item.desc && ( +

+ {item.desc} +

+ )} +
+
+ {index < items.length - 1 && ( + - - ))} -
-
+ + ))} +
+ +
); }