update SEO

This commit is contained in:
2026-07-01 17:05:32 +05:30
parent 208f6258ce
commit f37e2392f3
45 changed files with 227 additions and 567 deletions

View File

@@ -3,7 +3,7 @@
import Image from "next/image";
import { motion } from "framer-motion";
import { GlassInfoCard } from "../ui/GlassInfoCard";
import { scaleIn, staggerContainer, viewport } from "@/lib/animations";
import { scaleIn, viewport } from "@/lib/animations";
import type { Variants } from "framer-motion";
type GlassCardItem = {
@@ -134,6 +134,7 @@ export function HeroVisualCollage({
className="object-cover"
sizes="(max-width: 640px) 180px, 220px"
priority
fetchPriority="high"
/>
</div>
) : (
@@ -145,6 +146,7 @@ export function HeroVisualCollage({
height={160}
className="object-contain max-h-[140px] w-auto motion-safe:animate-[pulse_6s_infinite]"
priority
fetchPriority="high"
/>
</div>
)}

View File

@@ -2,11 +2,9 @@
import Link from "next/link";
import Image from "next/image";
import React from "react";
import { motion } from "framer-motion";
import { FaFacebookF, FaInstagram, FaLinkedinIn } from "react-icons/fa";
import { MaterialIcon } from "@/components/ui/MaterialIcon";
import { fadeUp, fadeIn, staggerContainer, staggerSlow, viewport } from "@/lib/animations";
import { fadeUp, fadeIn, staggerSlow, viewport } from "@/lib/animations";
const EASE = [0.22, 1, 0.36, 1] as [number, number, number, number];
@@ -31,6 +29,30 @@ const LEGAL = [
const socialButtonClass =
"flex h-10 w-10 items-center justify-center rounded-full border border-white/10 bg-white/5 text-white transition-[background-color] duration-300 xl:h-[54px] xl:w-[54px]";
function FacebookIcon({ size = 20 }: { size?: number }) {
return (
<svg width={size} height={size} viewBox="0 0 320 512" aria-hidden="true" fill="currentColor">
<path d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0C152.13 0 104.2 44.38 104.2 124.72v70.62H22.89V288h81.31v224h100.25V288z" />
</svg>
);
}
function InstagramIcon({ size = 21 }: { size?: number }) {
return (
<svg width={size} height={size} viewBox="0 0 448 512" aria-hidden="true" fill="currentColor">
<path d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9S160.5 370.8 224.1 370.8 339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9S352.3 35.1 316.4 33.4c-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1S3.2 127.5 1.5 163.4c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.5 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2s34.5-58 36.2-93.9c2.1-37 2.1-147.8 0-184.8z" />
</svg>
);
}
function LinkedInIcon({ size = 20 }: { size?: number }) {
return (
<svg width={size} height={size} viewBox="0 0 448 512" aria-hidden="true" fill="currentColor">
<path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z" />
</svg>
);
}
const linkColumnVariant = {
hidden: { opacity: 0, y: 20 },
visible: {
@@ -128,7 +150,7 @@ export function PremiumFooter() {
whileTap={{ scale: 0.9 }}
transition={{ type: "spring", stiffness: 400, damping: 17 }}
>
<FaFacebookF size={20} />
<FacebookIcon size={20} />
</motion.a>
<motion.a
@@ -141,7 +163,7 @@ export function PremiumFooter() {
whileTap={{ scale: 0.9 }}
transition={{ type: "spring", stiffness: 400, damping: 17 }}
>
<FaInstagram size={21} />
<InstagramIcon size={21} />
</motion.a>
<motion.a
@@ -154,32 +176,32 @@ export function PremiumFooter() {
whileTap={{ scale: 0.9 }}
transition={{ type: "spring", stiffness: 400, damping: 17 }}
>
<FaLinkedinIn size={20} />
<LinkedInIcon size={20} />
</motion.a>
</div>
</motion.div>
{/* Company links */}
<motion.div variants={linkColumnVariant} className="flex flex-col">
<h5 className="mb-5 text-xs font-extrabold uppercase tracking-wider text-white/40 md:text-sm xl:mb-7 xl:text-[17px]">
<div className="mb-5 text-xs font-extrabold uppercase tracking-wider text-white/40 md:text-sm xl:mb-7 xl:text-[17px]">
Company
</h5>
</div>
<FooterLinkList links={COMPANY} />
</motion.div>
{/* Nearle links */}
<motion.div variants={linkColumnVariant} className="flex flex-col">
<h5 className="mb-5 text-xs font-extrabold uppercase tracking-wider text-white/40 md:text-sm xl:mb-7 xl:text-[17px]">
<div className="mb-5 text-xs font-extrabold uppercase tracking-wider text-white/40 md:text-sm xl:mb-7 xl:text-[17px]">
Nearle
</h5>
</div>
<FooterLinkList links={PARTNERSHIPS} />
</motion.div>
{/* Support links */}
<motion.div variants={linkColumnVariant} className="flex flex-col">
<h5 className="mb-5 text-xs font-extrabold uppercase tracking-wider text-white/40 md:text-sm xl:mb-7 xl:text-[17px]">
<div className="mb-5 text-xs font-extrabold uppercase tracking-wider text-white/40 md:text-sm xl:mb-7 xl:text-[17px]">
Support
</h5>
</div>
<FooterLinkList links={LEGAL} />
</motion.div>
</motion.div>
@@ -197,9 +219,9 @@ export function PremiumFooter() {
</div>
<div className="text-left">
<h6 className="text-sm font-black text-white md:text-base xl:text-lg">
<div className="text-sm font-black text-white md:text-base xl:text-lg">
Nearle
</h6>
</div>
<p className="mt-0.5 text-xs leading-normal text-white/60 md:text-sm xl:mt-1 xl:text-base">
424, Diwan Bahadur Rd, Opp. Sri Krishna Sweets, R.S. Puram,
Coimbatore, TN 641002

View File

@@ -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);