diff --git a/cshare-app/src/pages/LandingPage.jsx b/cshare-app/src/pages/LandingPage.jsx new file mode 100644 index 0000000..0da6f75 --- /dev/null +++ b/cshare-app/src/pages/LandingPage.jsx @@ -0,0 +1,366 @@ +import { useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { ShieldIcon, ZapIcon, GlobeIcon, ArrowDownIcon, EyeIcon, LinkIcon, ClockIcon, ChartIcon, CheckIcon, CopyIcon } from '../components/Icons'; +import Footer from '../components/Footer'; +import { useScrollReveal } from '../hooks/useScrollReveal'; + +const DEMO_FILES = [ + { id: 'a', name: 'app-prototype-v2.fig', type: 'FILE', color: '#5E9EFF', size: '15.0 MB', initProgress: 100, initLink: 'cshare.app/preview/x7k2m' }, + { id: 'b', name: 'Q4-report.pdf', type: 'PDF', color: '#E84848', size: '2.4 MB', initProgress: 62 }, + { id: 'c', name: 'brand-assets.zip', type: 'ZIP', color: '#4A90FF', size: '52.0 MB', initProgress: 21 }, +]; + +function HeroPreview() { + const [files, setFiles] = useState(() => + DEMO_FILES.map((f) => ({ ...f, progress: f.initProgress, link: f.initLink || null })) + ); + + useEffect(() => { + const id = setInterval(() => { + setFiles((prev) => + prev.map((f) => { + if (f.progress >= 100) return f; + const np = Math.min(100, f.progress + Math.random() * 8 + 3); + return { + ...f, + progress: np, + link: np >= 100 + ? `cshare.app/preview/${Math.random().toString(36).slice(2, 7)}` + : f.link, + }; + }) + ); + }, 380); + return () => clearInterval(id); + }, []); + + const doneCount = files.filter((f) => f.progress >= 100).length; + + return ( +
+ Upload, share, and track your files with links that expire. + No sign-up walls, no bloated UIs, no files living forever on someone else's server. +
+ ++ Every decision made to reduce friction and keep your files under your control. +
+{feature.desc}
++ From file to shared link in under five seconds. +
+{step.desc}
++ No sign-up required. Upload your first file and see how simple file sharing should be. +
+ +