feat: Redesign the landing page's "How It Works" section with a new grid layout, updated icons, and improved styling, while removing a redundant GSAP reveal animation.

This commit is contained in:
Yusuf İpek
2026-02-26 17:33:15 +03:00
parent 53f7c326df
commit 3aedc46351
+35 -32
View File
@@ -23,7 +23,10 @@ import {
ArrowRight, ArrowRight,
XCircle, XCircle,
ArrowDown, ArrowDown,
CheckCircle CheckCircle,
Upload,
Share2,
Check
} from 'lucide-react'; } from 'lucide-react';
@@ -98,18 +101,6 @@ export function LandingPage({ isLoggedIn }: LandingPageProps) {
ease: 'power4.out', ease: 'power4.out',
}); });
gsap.from('[data-reveal]', {
y: 30,
opacity: 0,
duration: 0.9,
stagger: 0.1,
ease: 'power3.out',
scrollTrigger: {
trigger: '[data-reveal]',
start: 'top 85%',
},
});
// Voice Notes Waveform Animation // Voice Notes Waveform Animation
const waveformBars = gsap.utils.toArray<HTMLElement>('.voice-bar'); const waveformBars = gsap.utils.toArray<HTMLElement>('.voice-bar');
waveformBars.forEach((bar, index) => { waveformBars.forEach((bar, index) => {
@@ -266,7 +257,7 @@ export function LandingPage({ isLoggedIn }: LandingPageProps) {
{/* 2) PROBLEM BLOCK */} {/* 2) PROBLEM BLOCK */}
<section className="border-y border-border bg-card/10 px-4 py-16 sm:px-6 lg:px-8"> <section className="border-y border-border bg-card/10 px-4 py-16 sm:px-6 lg:px-8">
<div className="mx-auto w-full max-w-[1200px]"> <div className="mx-auto w-full max-w-[1200px]">
<div data-reveal className="mx-auto max-w-4xl"> <div className="mx-auto max-w-4xl">
<h2 className="text-3xl font-semibold tracking-[-0.02em] md:text-5xl">Feedback chaos looks like this:</h2> <h2 className="text-3xl font-semibold tracking-[-0.02em] md:text-5xl">Feedback chaos looks like this:</h2>
<ul className="mt-8 space-y-4 text-base text-muted-foreground md:text-lg"> <ul className="mt-8 space-y-4 text-base text-muted-foreground md:text-lg">
<li className="flex items-start gap-3"> <li className="flex items-start gap-3">
@@ -296,29 +287,41 @@ export function LandingPage({ isLoggedIn }: LandingPageProps) {
</section> </section>
{/* 3) HOW IT WORKS */} {/* 3) HOW IT WORKS */}
<section className="border-b border-border bg-background px-4 py-16 sm:px-6 lg:px-8"> <section className="border-b border-border bg-background px-4 py-20 sm:px-6 lg:px-8">
<div className="mx-auto w-full max-w-[1200px]"> <div className="mx-auto w-full max-w-[1200px]">
<div data-reveal className="mb-10 text-center"> <div className="mb-16 text-center">
<h2 className="text-3xl font-semibold tracking-[-0.02em] md:text-5xl">From upload to approval - in one flow.</h2> <h2 className="text-3xl font-semibold tracking-[-0.02em] md:text-5xl">From upload to approval in one flow.</h2>
</div> </div>
<div className="flex flex-col md:flex-row items-center gap-4 relative">
{['Upload a cut', 'Share a review link', 'Get timestamped feedback', 'Mark approved and move on'].map((step, idx, arr) => ( <div className="grid gap-4 md:grid-cols-4 relative">
<div key={step} className="contents"> {[
<div data-reveal className="flex-1 w-full border border-border bg-card/20 p-6 text-center text-sm font-medium text-foreground md:text-base relative z-10 transition-colors hover:border-primary/30"> { label: 'Upload a cut', icon: Upload },
<div className="mb-4 flex h-8 w-8 mx-auto items-center justify-center bg-secondary text-muted-foreground font-mono text-xs"> { label: 'Share a review link', icon: Share2 },
{idx + 1} { label: 'Get timestamped feedback', icon: MessageSquare },
{ label: 'Mark approved and move on', icon: Check }
].map((step, idx, arr) => (
<div key={step.label} className="group relative flex flex-col items-center">
<div className="flex flex-col items-center justify-center w-full min-h-[100px] md:aspect-[4/3] border border-border bg-card/20 px-4 py-6 md:p-6 text-center relative z-10 transition-all duration-300 group-hover:border-primary/40 group-hover:bg-card/40">
<div className="mb-4 flex h-8 w-8 md:h-10 md:w-10 items-center justify-center bg-secondary/50 text-primary border border-border/50 transition-colors group-hover:bg-primary/10">
<step.icon className="h-4 w-4 md:h-5 md:w-5" />
</div>
<p className="text-sm font-medium text-foreground md:text-base leading-tight">
{step.label}
</p>
<div className="absolute top-3 right-3 font-mono text-[10px] text-muted-foreground/30">
0{idx + 1}
</div> </div>
{step}
</div> </div>
{idx < arr.length - 1 && ( {idx < arr.length - 1 && (
<> <div className="hidden md:flex absolute top-1/2 -right-4 -translate-y-1/2 z-20 items-center justify-center text-muted-foreground/20">
<div className="hidden md:block text-muted-foreground/30 flex-shrink-0"> <MoveRight className="h-5 w-5" />
<MoveRight className="h-6 w-6" /> </div>
</div> )}
<div className="block md:hidden text-muted-foreground/30 flex-shrink-0 py-2"> {idx < arr.length - 1 && (
<ArrowDown className="h-6 w-6" /> <div className="md:hidden flex py-4 text-muted-foreground/20">
</div> <ArrowDown className="h-5 w-5" />
</> </div>
)} )}
</div> </div>
))} ))}