landing page changes

This commit is contained in:
codebox283 2025-02-25 10:28:46 +05:30
parent bce89e7fd8
commit e50c0ad513
4 changed files with 219 additions and 82 deletions

View File

@ -3,24 +3,55 @@
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { Marquee } from "@/components/ui/marquee"; import { Marquee } from "@/components/ui/marquee";
const images = [ const supportedBy = [
"https://www.zarla.com/images/starbucks-logo-2400x2400-20220513.png?crop=1:1,smart&width=150&dpr=2", { name: "Microsoft", logo: "https://upload.wikimedia.org/wikipedia/commons/4/44/Microsoft_logo.svg" },
"https://www.zarla.com/images/apple-logo-2400x2400-20220512-3.png?crop=1:1,smart&width=150&dpr=2", { name: "NVIDIA", logo: "https://www.nvidia.com/content/dam/en-zz/Solutions/about-nvidia/logo-and-brand/02-nvidia-logo-color-grn-500x200-4c25-p@2x.png" },
"https://www.zarla.com/images/google-logo-2400x2400-20220519.png?crop=1:1,smart&width=150&dpr=2", { name: "Google for Startups", logo: "https://media.licdn.com/dms/image/v2/C560BAQFlPW0-1gr2pQ/company-logo_200_200/company-logo_200_200/0/1630602785941/launchpad_program_logo?e=2147483647&v=beta&t=Ppi0tawv2zHK00xSgrnOG7jNpmf7vejp37sMZDYEb5U" },
"https://www.zarla.com/images/mercedes-benz-logo-2400x2400-20220513-2.png?crop=1:1,smart&width=150&dpr=2", ];
"https://www.zarla.com/images/walmart-logo-2400x2400-20223105.png?crop=1:1,smart&width=150&dpr=2",
"https://www.zarla.com/images/pepsi-logo-2400x2400-20220513-1.png?crop=1:1,smart&width=150&dpr=2", const partners = [
"https://hoonartek.com/wp-content/uploads/2025/01/Hoonartek-V25.svg",
"https://rpatech.b-cdn.net/wp-content/uploads/2025/01/colored.png",
"https://www.open-infotech.com/content/images/2024/08/Group-26082-1.svg",
"https://thecompetenza.com/wp-content/uploads/2023/04/comppp111.png",
"https://www.tftus.com/wp-content/uploads/2021/01/logo-1.png",
"https://everydayseries.ai/wp-content/uploads/2024/03/GIF-From-Online-1-300x169.gif",
];
const customers = [
"https://everydayseries.ai/wp-content/uploads/2024/03/trippyone-350x138.jpeg",
"https://everydayseries.ai/wp-content/uploads/2024/03/inxtinct-350x230.png",
"https://everydayseries.ai/wp-content/uploads/2024/03/qurious_tech_logo.jpeg",
"https://everydayseries.ai/wp-content/uploads/2024/03/moodit-icon-350x102.png",
"https://everydayseries.ai/wp-content/uploads/2024/03/CE-full-for-web.png",
"https://everydayseries.ai/wp-content/uploads/2024/03/logo_transparent-e1710074057580-350x230.png",
]; ];
export function Partners() { export function Partners() {
return ( return (
<div className="h-screen flex flex-col items-center justify-center space-y-10"> <div className="h-screen max-w-7xl mx-auto flex flex-col items-center justify-center space-y-10 ">
// Supported By
<div className="flex flex-col items-center space-y-6 mb-20">
<h1 className="text-white text-4xl">Supported By</h1>
<div className="flex space-x-10 items-center">
{supportedBy.map((support, index) => (
<div key={index} className="flex flex-col items-center">
<div className="overflow-hidden rounded-md" ><img src={support.logo} alt={support.name} className="h-32 w-32 object-cover"/></div>
<p className="text-gray-400 mt-2">{support.name}</p>
</div>
))}
</div>
</div>
// Partners
<div className="flex flex-col items-center justify-center space-y-6"> <div className="flex flex-col items-center justify-center space-y-6">
<h1 className="text-white text-4xl">Partners</h1> <h1 className="text-white text-4xl">Partners</h1>
<p className="text-gray-400">Following are the partners for Advanced Nonlinear Technologies</p>
<div className="relative flex h-[200px] w-full flex-col items-center justify-center overflow-hidden rounded-lg bg-transparent"> <div className="relative flex h-[200px] w-full flex-col items-center justify-center overflow-hidden rounded-lg bg-transparent">
<Marquee pauseOnHover className="[--duration:20s]"> <Marquee pauseOnHover className="[--duration:20s]">
<div className="flex space-x-6"> <div className="flex space-x-6">
{images.map((img, index) => ( {partners.map((img, index) => (
<img <img
key={index} key={index}
src={img} src={img}
@ -35,12 +66,14 @@ export function Partners() {
</div> </div>
</div> </div>
// Customers
<div className="flex flex-col items-center justify-center space-y-6"> <div className="flex flex-col items-center justify-center space-y-6">
<h1 className="text-white text-4xl">Customers</h1> <h1 className="text-white text-4xl">Customers</h1>
<p className="text-gray-400">Our customers are our strengths and we provide AI solutions through our platform to them</p>
<div className="relative flex h-[200px] w-full flex-col items-center justify-center overflow-hidden rounded-lg bg-transparent md:shadow-xl"> <div className="relative flex h-[200px] w-full flex-col items-center justify-center overflow-hidden rounded-lg bg-transparent md:shadow-xl">
<Marquee reverse pauseOnHover className="[--duration:20s]"> <Marquee reverse pauseOnHover className="[--duration:20s]">
<div className="flex space-x-6"> <div className="flex space-x-6">
{images.map((img, index) => ( {customers.map((img, index) => (
<img <img
key={index} key={index}
src={img} src={img}

View File

@ -1,6 +1,6 @@
"use client"; "use client";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import React, { useState } from "react"; import React, { useState, useEffect } from "react";
import { BentoGrid, BentoGridItem } from "../ui/bento-grid"; import { BentoGrid, BentoGridItem } from "../ui/bento-grid";
import { import {
IconBoxAlignRightFilled, IconBoxAlignRightFilled,
@ -57,6 +57,25 @@ export function BentoFeatures() {
const SkeletonOne = () => { const SkeletonOne = () => {
const [isHovered, setIsHovered] = useState(false); const [isHovered, setIsHovered] = useState(false);
const [animationState, setAnimationState] = useState('idle');
// Control animation cycle
useEffect(() => {
if (isHovered) {
const animationSequence = async () => {
setAnimationState('drag');
setTimeout(() => setAnimationState('drop'), 1500);
setTimeout(() => setAnimationState('complete'), 2000);
setTimeout(() => setAnimationState('drag'), 3500);
};
animationSequence();
const interval = setInterval(animationSequence, 4000);
return () => clearInterval(interval);
} else {
setAnimationState('idle');
}
}, [isHovered]);
return ( return (
<motion.div <motion.div
@ -88,16 +107,74 @@ const SkeletonOne = () => {
</motion.span> </motion.span>
</motion.p> </motion.p>
</div> </div>
<motion.img
src="https://images.unsplash.com/photo-1603201667230-bd139210db18?q=80&w=1788&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" {/* Drag and drop animation container */}
className="p-4 rounded-xl" <div className="relative p-6 h-64 flex items-center justify-center">
{/* Drop zone */}
<motion.div
className="absolute w-36 h-36 rounded-lg border-2 border-dashed border-indigo-400/50 flex items-center justify-center"
style={{ right: '20%', bottom: '20%' }}
animate={{ animate={{
scale: isHovered ? 1.05 : 1, borderColor: animationState === 'drag' ? 'rgba(129, 140, 248, 0.8)' : 'rgba(129, 140, 248, 0.5)',
rotate: isHovered ? 1 : 0 scale: animationState === 'drag' ? 1.05 : 1,
backgroundColor: animationState === 'complete' ? 'rgba(129, 140, 248, 0.15)' : 'rgba(129, 140, 248, 0.05)'
}} }}
transition={{ type: "spring", stiffness: 300 }} >
alt="Feature preview" <motion.div
/> className="text-indigo-300 text-sm font-medium"
animate={{ opacity: animationState === 'complete' ? 0 : 0.8 }}
>
Drop here
</motion.div>
</motion.div>
{/* File being dragged */}
<motion.div
className="absolute flex flex-col items-center justify-center gap-1"
style={{ left: '20%', top: '20%' }}
animate={{
x: animationState === 'idle' ? 0 : animationState === 'drag' ? 100 : animationState === 'drop' || animationState === 'complete' ? 130 : 0,
y: animationState === 'idle' ? 0 : animationState === 'drag' ? 80 : animationState === 'drop' || animationState === 'complete' ? 100 : 0,
opacity: animationState === 'complete' ? 0 : 1,
scale: animationState === 'drag' ? 1.1 : animationState === 'drop' ? 0.95 : 1,
rotate: animationState === 'drag' ? 2 : 0,
}}
transition={{
type: animationState === 'drop' ? 'spring' : 'tween',
stiffness: 200,
damping: 15
}}
>
{/* File icon */}
<div className="w-16 h-20 bg-gradient-to-br from-indigo-500 to-purple-500 rounded-lg shadow-lg flex flex-col overflow-hidden">
<div className="h-3 w-full bg-white/20"></div>
<div className="flex-1 flex items-center justify-center text-white font-bold text-xs">
WORKFLOW
</div>
</div>
<motion.div
className="text-indigo-200 text-xs"
animate={{ opacity: animationState === 'idle' ? 1 : 0 }}
>
Drag me
</motion.div>
</motion.div>
{/* Success checkmark that appears after drop */}
<motion.div
className="absolute text-green-400 text-2xl"
style={{ right: '20%', bottom: '20%' }}
animate={{
opacity: animationState === 'complete' ? 1 : 0,
scale: animationState === 'complete' ? [0, 1.2, 1] : 0,
}}
transition={{ duration: 0.3 }}
>
<svg xmlns="http://www.w3.org/2000/svg" className="h-10 w-10" viewBox="0 0 20 20" fill="currentColor">
<path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clipRule="evenodd" />
</svg>
</motion.div>
</div>
</motion.div> </motion.div>
); );
}; };
@ -176,7 +253,7 @@ const SkeletonThree = () => {
className="flex flex-col space-y-4" className="flex flex-col space-y-4"
animate={{ y: isHovered ? -10 : 0 }} animate={{ y: isHovered ? -10 : 0 }}
> >
<div className="flex items-center justify-between"> {/* <div className="flex items-center justify-between">
<div className="h-8 w-24 bg-purple-500/30 rounded-full" /> <div className="h-8 w-24 bg-purple-500/30 rounded-full" />
<motion.div <motion.div
className="text-2xl font-bold text-green-400" className="text-2xl font-bold text-green-400"
@ -184,15 +261,40 @@ const SkeletonThree = () => {
> >
$0 $0
</motion.div> </motion.div>
</div> </div> */}
{/* Graph container */}
<motion.div <motion.div
className="h-16 w-full bg-gradient-to-r from-purple-500/20 to-blue-500/20 rounded-xl" className="h-20 w-full bg-gradient-to-r from-purple-500/20 to-blue-500/20 rounded-xl relative overflow-hidden"
animate={{ animate={{
scale: isHovered ? 1.02 : 1, scale: isHovered ? 1.02 : 1,
backgroundColor: isHovered ? "rgba(139, 92, 246, 0.3)" : "rgba(139, 92, 246, 0.2)" backgroundColor: isHovered ? "rgba(139, 92, 246, 0.3)" : "rgba(139, 92, 246, 0.2)"
}} }}
>
{/* Growing graph line */}
<motion.div
className="absolute bottom-0 left-0 w-full h-full"
initial={{ opacity: 0.7 }}
animate={{ opacity: isHovered ? 1 : 0.7 }}
>
<svg width="100%" height="100%" viewBox="0 0 100 50" preserveAspectRatio="none">
<motion.path
d="M0,50 L0,35 C10,40 20,20 30,25 C40,30 50,10 60,15 C70,20 80,5 90,10 L100,5 L100,50 Z"
fill="rgba(52, 211, 153, 0.2)"
stroke="rgba(52, 211, 153, 0.8)"
strokeWidth="2"
initial={{ pathLength: 0.3, y: 20 }}
animate={{
pathLength: isHovered ? 1 : 0.3,
y: isHovered ? 0 : 20
}}
transition={{ duration: 1.5 }}
/> />
<div className="flex justify-between items-center"> </svg>
</motion.div>
</motion.div>
{/* <div className="flex justify-between items-center">
<div className="h-6 w-16 bg-purple-500/30 rounded-full" /> <div className="h-6 w-16 bg-purple-500/30 rounded-full" />
<motion.div <motion.div
className="text-xl font-bold text-green-400" className="text-xl font-bold text-green-400"
@ -200,7 +302,7 @@ const SkeletonThree = () => {
> >
$499 $499
</motion.div> </motion.div>
</div> </div> */}
</motion.div> </motion.div>
</div> </div>
</motion.div> </motion.div>

View File

@ -73,8 +73,11 @@ const HeroCarousel = () => {
{slides.map((slide, index) => ( {slides.map((slide, index) => (
<div <div
key={index} key={index}
className={`absolute inset-0 h-full w-full transition-all duration-700 ${ className={`absolute inset-0 h-full w-full transition-all duration-700 ${currentSlide === index
currentSlide === index ? 'opacity-100' : 'opacity-0' ? 'translate-x-0 opacity-100' // Show current slide
: currentSlide > index
? '-translate-x-full opacity-0' // Slide left for previous slides
: 'translate-x-full opacity-0' // Slide right for next slides
}`} }`}
> >
{/* Background Image */} {/* Background Image */}
@ -129,8 +132,7 @@ const HeroCarousel = () => {
<button <button
key={index} key={index}
onClick={() => setCurrentSlide(index)} onClick={() => setCurrentSlide(index)}
className={`h-2 rounded-full transition-all ${ className={`h-2 rounded-full transition-all ${currentSlide === index ? 'w-8 bg-white' : 'w-2 bg-white/50'
currentSlide === index ? 'w-8 bg-white' : 'w-2 bg-white/50'
}`} }`}
/> />
))} ))}

View File

@ -5,7 +5,7 @@ import { motion } from 'framer-motion';
const companyLinks = [ const companyLinks = [
{ text: "About", url: "/about" }, { text: "About", url: "/about" },
{ text: "Careers", url: "/careers" }, { text: "Careers", url: "/careers" },
{ text: "Blog", url: "/blog" }, { text: "Blogs", url: "/blogs" },
{ text: "Status", url: "/status" }, { text: "Status", url: "/status" },
{ text: "Privacy", url: "/privacy" }, { text: "Privacy", url: "/privacy" },
{ text: "Partner with us", url: "/partner" } { text: "Partner with us", url: "/partner" }
@ -26,7 +26,7 @@ const communityLinks = [
const learnLinks = [ const learnLinks = [
{ text: "Webinars", url: "/webinars" }, { text: "Webinars", url: "/webinars" },
{ text: "Leadership", url: "/leadership" }, { text: "Leadership", url: "/leadership" },
{ text: "Demos", url: "/demos" }, { text: "Demo", url: "/demo" },
{ text: "Videos", url: "/videos" }, { text: "Videos", url: "/videos" },
{ text: "Guides", url: "/guides" }, { text: "Guides", url: "/guides" },
{ text: "Articles", url: "/articles" }, { text: "Articles", url: "/articles" },