/* * HERO SECTION — selimaj.dev * Design: Glassmorphic Terminal * Full-viewport dark hero with animated background image, typewriter effect, and glass CTA */ import { useEffect, useState } from "react"; const HERO_BG = "https://d2xsxph8kpxj0f.cloudfront.net/310519663439135967/RkRL4wd7YzNoLyaN7suWbR/hero-bg-G3393XyTzqxu3D4dR63od8.webp"; const typewriterPhrases = [ "Software Developer.", "Entrepreneur.", "SaaS Builder.", "Systems Programmer.", "Open Source Contributor.", ]; function useTypewriter(phrases: string[], speed = 60, pause = 1800) { const [display, setDisplay] = useState(""); const [phraseIdx, setPhraseIdx] = useState(0); const [charIdx, setCharIdx] = useState(0); const [deleting, setDeleting] = useState(false); useEffect(() => { const current = phrases[phraseIdx]; let timeout: ReturnType; if (!deleting && charIdx < current.length) { timeout = setTimeout(() => setCharIdx((c) => c + 1), speed); } else if (!deleting && charIdx === current.length) { timeout = setTimeout(() => setDeleting(true), pause); } else if (deleting && charIdx > 0) { timeout = setTimeout(() => setCharIdx((c) => c - 1), speed / 2); } else if (deleting && charIdx === 0) { setDeleting(false); setPhraseIdx((i) => (i + 1) % phrases.length); } setDisplay(current.slice(0, charIdx)); return () => clearTimeout(timeout); }, [charIdx, deleting, phraseIdx, phrases, speed, pause]); return display; } export default function HeroSection() { const typed = useTypewriter(typewriterPhrases); return (
{/* Background image */}
{/* Gradient overlays */}
{/* Animated glow orb */}
{/* Content */}
{/* Terminal label */}
> klesti@selimaj.dev ~ $
{/* Main heading */}

Klesti
Selimaj

{/* Typewriter subtitle */}
{typed} |
{/* Description */}

16 years old · 6 years of experience · Albania
Passionate about low-level systems, hacking, UI/UX, and making cool tools.

{/* CTA Buttons */}
{/* Stats row */}
{[ { value: "6+", label: "Years Experience" }, { value: "97+", label: "Repositories" }, { value: "2,670+", label: "Contributions / Year" }, { value: "#2", label: "National GitHub user" }, ].map((stat) => (
{stat.value}
{stat.label}
))}
{/* Scroll indicator */}
scroll
); }