import Navbar from '../components/Navbar' import AnimatedBackground from '../components/AnimatedBackground' import { motion } from 'framer-motion' import { useMemo, useRef } from 'react' import { Link } from 'react-router-dom' import { AcademicCapIcon, BriefcaseIcon, CommandLineIcon, DocumentTextIcon, SparklesIcon, ChatBubbleLeftRightIcon, ArrowRightIcon, GlobeAltIcon, PresentationChartBarIcon, } from '@heroicons/react/24/outline' import Footer from '../components/Footer' import TestimonialsCarousel from '../components/TestimonialsCarousel' import { useTheme } from '../theme/ThemeContext' const fadeUp = (d=0) => ({ initial:{opacity:0,y:24}, whileInView:{opacity:1,y:0}, viewport:{once:true, amount:.3}, transition:{duration:.6, delay:d} }) const containerStagger = { hidden: { opacity: 0 }, show: { opacity: 1, transition: { staggerChildren: 0.08 } } } const itemMotion = { hidden: { opacity: 0, y: 18, scale: .98 }, show: { opacity: 1, y: 0, scale: 1, transition: { duration: .5 } } } export default function Landing(){ const { theme } = useTheme() || { theme: { imagery: 'abstract', anim: 'medium', parallax: 'medium' } } const animScale = theme.anim === 'strong' ? 1.06 : theme.anim === 'medium' ? 1.02 : 1.005 const isTouch = typeof window !== 'undefined' && matchMedia('(pointer:coarse)').matches const baseParallax = theme.parallax === 'strong' ? 8 : theme.parallax === 'medium' ? 6 : 3 const parallaxFactor = isTouch ? Math.max(2, baseParallax - 4) : baseParallax const images = useMemo(() => { const sets = { abstract: { hero: 'https://images.unsplash.com/photo-1557683316-973673baf926?q=80&w=1600&auto=format&fit=crop', jobs: 'https://images.unsplash.com/photo-1553877522-43269d4ea984?q=80&w=1600&auto=format&fit=crop', roadmaps: 'https://images.unsplash.com/photo-1522071820081-009f0129c71c?q=80&w=1600&auto=format&fit=crop', resume: 'https://images.unsplash.com/photo-1515378791036-0648a3ef77b2?q=80&w=1600&auto=format&fit=crop', mock: 'https://images.unsplash.com/photo-1522202176988-66273c2fd55f?q=80&w=1600&auto=format&fit=crop', insights: 'https://images.unsplash.com/photo-1516321497487-e288fb19713f?q=80&w=1600&auto=format&fit=crop', }, illustrations: { hero: 'https://images.unsplash.com/photo-1542751371-adc38448a05e?q=80&w=1600&auto=format&fit=crop', jobs: 'https://images.unsplash.com/photo-1611162618479-7d7a39e9be50?q=80&w=1600&auto=format&fit=crop', roadmaps: 'https://images.unsplash.com/photo-1545239351-1141bd82e8a6?q=80&w=1600&auto=format&fit=crop', resume: 'https://images.unsplash.com/photo-1557682250-33bd709cbe85?q=80&w=1600&auto=format&fit=crop', mock: 'https://images.unsplash.com/photo-1516557070061-c3d1653fa646?q=80&w=1600&auto=format&fit=crop', insights: 'https://images.unsplash.com/photo-1520975922203-b5a9cb27689a?q=80&w=1600&auto=format&fit=crop', }, photos: { hero: 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?q=80&w=1600&auto=format&fit=crop', jobs: 'https://images.unsplash.com/photo-1497493292307-31c376b6e479?q=80&w=1600&auto=format&fit=crop', roadmaps: 'https://images.unsplash.com/photo-1496307042754-b4aa456c4a2d?q=80&w=1600&auto=format&fit=crop', resume: 'https://images.unsplash.com/photo-1529101091764-c3526daf38fe?q=80&w=1600&auto=format&fit=crop', mock: 'https://images.unsplash.com/photo-1521737604893-d14cc237f11d?q=80&w=1600&auto=format&fit=crop', insights: 'https://images.unsplash.com/photo-1534759846116-5791a4b5528c?q=80&w=1600&auto=format&fit=crop', } } return sets[theme.imagery] || sets.abstract }, [theme.imagery]) const heroTiltRef = useRef(null) const onHeroMouseMove = (e) => { const el = heroTiltRef.current if(!el) return const rect = el.getBoundingClientRect() const x = e.clientX - rect.left const y = e.clientY - rect.top const rx = ((y / rect.height) - 0.5) * (-parallaxFactor) // tilt X const ry = ((x / rect.width) - 0.5) * parallaxFactor // tilt Y el.style.transform = `perspective(800px) rotateX(${rx}deg) rotateY(${ry}deg) translateZ(0)` } const onHeroMouseLeave = () => { const el = heroTiltRef.current if(!el) return el.style.transform = 'perspective(800px) rotateX(0deg) rotateY(0deg) translateZ(0)' } return (
One place to discover jobs & internships, follow curated roadmaps, build resumes & cover letters, practice mock interviews, and ace placements — all in one powerful platform.
Explore in-demand roles by your interests, compare salary bands (min/median/max), and reveal your personal skill gaps so you can upskill with confidence.
Sign in with Google and start exploring jobs, roadmaps, and more — it’s free.
We've built the most comprehensive career platform to help you succeed at every step of your professional journey.
{feature.desc}