diff --git a/app/hackathons/page.tsx b/app/hackathons/page.tsx index aee8a10..4a7c32a 100644 --- a/app/hackathons/page.tsx +++ b/app/hackathons/page.tsx @@ -3,18 +3,12 @@ import { useState, useEffect, useRef, Suspense, useCallback } from 'react' import dynamic from 'next/dynamic' import { - Shield, ChevronDown, ArrowRight, Users, - Trophy, - Star, - Terminal, Clock, MapPin, - Cpu, - Sparkles, Eye, Target, AlertTriangle, @@ -46,23 +40,6 @@ function useInView(threshold = 0.15) { return { ref, visible } } -function Counter({ target, suffix = '' }: { target: number; suffix?: string }) { - const [count, setCount] = useState(0) - const { ref, visible } = useInView(0.3) - useEffect(() => { - if (!visible) return - let start = 0 - const step = (ts: number) => { - if (!start) start = ts - const p = Math.min((ts - start) / 1200, 1) - const eased = 1 - Math.pow(1 - p, 3) // ease-out cubic - setCount(Math.floor(eased * target)) - if (p < 1) requestAnimationFrame(step) - } - requestAnimationFrame(step) - }, [visible, target]) - return }>{count}{suffix} -} function useMouseSpotlight() { const ref = useRef(null) @@ -89,24 +66,6 @@ function NoiseOverlay() { ) } -/* ─── Dot grid (Linear-inspired) ─── */ - -function DotGrid({ cols = 16, rows = 5 }: { cols?: number; rows?: number }) { - return ( -
- {Array.from({ length: cols * rows }, (_, i) => ( -
- ))} -
- ) -} /* ─── Nav ─── */ @@ -174,33 +133,6 @@ function Hero() { ) } -/* ─── Stats ─── */ - -function Stats() { - return ( -
- {/* Dot grid background */} -
- -
- -
- {[ - { value: 48, suffix: 'h', label: 'of hacking' }, - { value: 5, suffix: '', label: 'tracks' }, - { value: 100, suffix: '%', label: 'open source' }, - ].map((stat) => ( -
-
- -
-
{stat.label}
-
- ))} -
-
- ) -} /* ─── Notify Button ─── */ @@ -637,17 +569,6 @@ function TrackCard({ track, index }: { track: typeof tracks[0]; index: number })
{/* Content */}
-
-
- -
-
- 48h - Teams of 2–3 - Montreal -
-
-

{track.title}

@@ -708,95 +629,6 @@ function Tracks() { ) } -/* ─── How It Works ─── */ - -const steps = [ - { icon: Sparkles, title: 'Form a team', sub: 'Groups of 2–3' }, - { icon: Terminal, title: 'Get set up', sub: 'Docs & infra provided' }, - { icon: Cpu, title: 'Hack for 48h', sub: 'Collect achievements' }, - { icon: Trophy, title: 'Present & win', sub: 'Top teams demo' }, -] - -function HowItWorks() { - const { ref, visible } = useInView() - - return ( -
-
-

- How it works. -

- -
- {/* Animated connector line */} -
-
-
- - {steps.map((step, i) => ( -
-
- -
-

{step.title}

-

{step.sub}

-
- ))} -
-
-
- ) -} - -/* ─── Prizes ─── */ - -function Prizes() { - const { ref, visible } = useInView() - - const items = [ - { icon: Crown, title: 'Hall of Fame', sub: 'Featured on greywall.io permanently' }, - { icon: Star, title: 'Contributor credit', sub: 'Added as a contributor in the GitHub README' }, - ] - - return ( -
- {/* Background dot grid */} -
- -
-

- What you win. -

-
- {items.map((item, i) => ( -
-
- -
-

{item.title}

-

{item.sub}

-
- ))} -
-
-
- - ) -} /* ─── Location ─── */