Spaces:
Running
Running
Pulastya B
feat: Initial commit - Data Science Agent with React frontend and FastAPI backend
226ac39
| import React from "react"; | |
| import { motion } from "framer-motion"; | |
| import { ArrowRight } from "lucide-react"; | |
| import { cn } from "../lib/utils"; | |
| function FloatingPaths({ position }: { position: number }) { | |
| const paths = Array.from({ length: 36 }, (_, i) => ({ | |
| id: i, | |
| d: `M-${380 - i * 5 * position} -${189 + i * 6}C-${ | |
| 380 - i * 5 * position | |
| } -${189 + i * 6} -${312 - i * 5 * position} ${216 - i * 6} ${ | |
| 152 - i * 5 * position | |
| } ${343 - i * 6}C${616 - i * 5 * position} ${470 - i * 6} ${ | |
| 684 - i * 5 * position | |
| } ${875 - i * 6} ${684 - i * 5 * position} ${875 - i * 6}`, | |
| color: `rgba(99,102,241,${0.05 + i * 0.01})`, // Using indigo-500 tint | |
| width: 0.5 + i * 0.03, | |
| })); | |
| return ( | |
| <div className="absolute inset-0 pointer-events-none"> | |
| <svg | |
| className="w-full h-full text-indigo-500/20" | |
| viewBox="0 0 696 316" | |
| fill="none" | |
| > | |
| <title>Background Paths</title> | |
| {paths.map((path) => ( | |
| <motion.path | |
| key={path.id} | |
| d={path.d} | |
| stroke="currentColor" | |
| strokeWidth={path.width} | |
| strokeOpacity={0.1 + path.id * 0.02} | |
| initial={{ pathLength: 0.3, opacity: 0.4 }} | |
| animate={{ | |
| pathLength: 1, | |
| opacity: [0.2, 0.5, 0.2], | |
| pathOffset: [0, 1, 0], | |
| }} | |
| transition={{ | |
| duration: 15 + Math.random() * 10, | |
| repeat: Number.POSITIVE_INFINITY, | |
| ease: "linear", | |
| }} | |
| /> | |
| ))} | |
| </svg> | |
| </div> | |
| ); | |
| } | |
| export function BackgroundPaths({ | |
| title = "The Future is Autonomous", | |
| subtitle = "Scale your data engineering and predictive modeling beyond human limits.", | |
| }: { | |
| title?: string; | |
| subtitle?: string; | |
| }) { | |
| const words = title.split(" "); | |
| return ( | |
| <section className="relative min-h-[80vh] w-full flex items-center justify-center overflow-hidden bg-[#030303]"> | |
| <div className="absolute inset-0"> | |
| <FloatingPaths position={1} /> | |
| <FloatingPaths position={-1} /> | |
| </div> | |
| <div className="relative z-10 container mx-auto px-4 md:px-6 text-center"> | |
| <motion.div | |
| initial={{ opacity: 0 }} | |
| animate={{ opacity: 1 }} | |
| transition={{ duration: 2 }} | |
| className="max-w-4xl mx-auto" | |
| > | |
| <h2 className="text-5xl sm:text-6xl md:text-8xl font-extrabold mb-8 tracking-tighter"> | |
| {words.map((word, wordIndex) => ( | |
| <span | |
| key={wordIndex} | |
| className="inline-block mr-4 last:mr-0" | |
| > | |
| {word.split("").map((letter, letterIndex) => ( | |
| <motion.span | |
| key={`${wordIndex}-${letterIndex}`} | |
| initial={{ y: 50, opacity: 0 }} | |
| whileInView={{ y: 0, opacity: 1 }} | |
| viewport={{ once: true }} | |
| transition={{ | |
| delay: | |
| wordIndex * 0.1 + | |
| letterIndex * 0.02, | |
| type: "spring", | |
| stiffness: 150, | |
| damping: 25, | |
| }} | |
| className="inline-block text-transparent bg-clip-text | |
| bg-gradient-to-r from-white via-white/90 to-white/70" | |
| > | |
| {letter} | |
| </motion.span> | |
| ))} | |
| </span> | |
| ))} | |
| </h2> | |
| <motion.p | |
| initial={{ opacity: 0, y: 20 }} | |
| whileInView={{ opacity: 1, y: 0 }} | |
| viewport={{ once: true }} | |
| transition={{ delay: 0.5 }} | |
| className="text-white/40 text-xl font-medium mb-12 max-w-2xl mx-auto tracking-tight" | |
| > | |
| {subtitle} | |
| </motion.p> | |
| <motion.div | |
| initial={{ opacity: 0, scale: 0.9 }} | |
| whileInView={{ opacity: 1, scale: 1 }} | |
| viewport={{ once: true }} | |
| transition={{ delay: 0.8 }} | |
| className="inline-block group relative bg-gradient-to-b from-white/10 to-indigo-500/10 | |
| p-px rounded-2xl backdrop-blur-lg | |
| overflow-hidden shadow-lg hover:shadow-indigo-500/20 transition-all duration-300" | |
| > | |
| <button | |
| className="rounded-[1.15rem] px-10 py-5 text-lg font-bold backdrop-blur-md | |
| bg-white/95 hover:bg-white text-black transition-all duration-300 | |
| group-hover:-translate-y-0.5 border border-white/10 | |
| flex items-center gap-3" | |
| > | |
| <span className="opacity-90 group-hover:opacity-100 transition-opacity"> | |
| Deploy Your First Agent | |
| </span> | |
| <ArrowRight | |
| className="w-5 h-5 opacity-70 group-hover:opacity-100 group-hover:translate-x-1.5 | |
| transition-all duration-300" | |
| /> | |
| </button> | |
| </motion.div> | |
| </motion.div> | |
| </div> | |
| {/* Subtle glow effect at the bottom */} | |
| <div className="absolute bottom-0 left-1/2 -translate-x-1/2 w-full h-px bg-gradient-to-r from-transparent via-indigo-500/50 to-transparent shadow-[0_0_50px_2px_rgba(99,102,241,0.2)]" /> | |
| </section> | |
| ); | |
| } | |