"use client" import {useRef, useState, useEffect} from "react"; import Link from "next/link"; export default function About() { const timelineData = [ { date: "2018", title: "First Contact with Coding", content: "I discovered my passion for technology by experimenting with Scratch and creating some simple Games.", }, { date: "2022", title: "Exploring Web & Scripting", content: "Started creating small websites and got into HTML, CSS", }, { date: "2022", title: "Raspberry Pi & Python", content: "Created some simple Python scripts for my Raspberry Pi, experimenting with the Raspberry Pi OS", }, { date: "2024", title: "Full Stack & Beyond", content: "Ventured into backend (SQL, Python, Javascript, Java) and continued refining my frontend abilities.", }, ]; const skills = [ { name: "JavaScript", level: 80, waveSpeed: "2s", progression: [0, 30, 60, 80], }, { name: "Python", level: 75, waveSpeed: "2.5s", progression: [10, 25, 50, 75], }, { name: "Java", level: 50, waveSpeed: "3s", progression: [0, 0, 0, 60], }, { name: "SQL", level: 85, waveSpeed: "2.2s", progression: [0, 0, 0, 85], }, { name: "HTML & CSS", level: 70, waveSpeed: "2.7s", progression: [0, 30, 50, 80], }, ]; const getSkillLabel = (level) => { if (level < 25) return "Beginner"; if (level < 50) return "Intermediate"; if (level < 75) return "Advanced"; return "Expert"; }; const sectionRefs = useRef([]); const aboutMeRef = useRef(null); const buttonSectionRef = useRef(null); const scrollContainerRef = useRef(null); const [currentSection, setCurrentSection] = useState(0); const [timelineFinished, setTimelineFinished] = useState(false); const [showScrollPrompt, setShowScrollPrompt] = useState(false); useEffect(() => { setCurrentSection(0); setTimelineFinished(false); setTimeout(() => { aboutMeRef.current?.scrollIntoView({behavior: "smooth", block: "start"}); }, 100); }, []); useEffect(() => { let scrollListener; if (timelineFinished) { setShowScrollPrompt(true); scrollListener = () => { setShowScrollPrompt(false); window.removeEventListener("scroll", scrollListener); }; window.addEventListener("scroll", scrollListener); } return () => { if (scrollListener) { window.removeEventListener("scroll", scrollListener); } }; }, [timelineFinished]); const handleButtonClick = (direction) => { setCurrentSection((prev) => { const newSection = Math.max(0, Math.min(prev + direction, timelineData.length - 1)); setTimelineFinished(newSection === timelineData.length - 1); sectionRefs.current[newSection]?.scrollIntoView({behavior: "smooth", inline: "start"}); return newSection; }); }; useEffect(() => { const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { const index = sectionRefs.current.findIndex((el) => el === entry.target); if (entry.isIntersecting && index !== -1) { setCurrentSection(index); } if ( entry.isIntersecting && index === timelineData.length - 1 && entry.intersectionRatio >= 0.8 ) { setTimelineFinished(true); } }); }, {threshold: 0.6} ); sectionRefs.current.forEach((el) => { if (el) observer.observe(el); }); return () => observer.disconnect(); }, [timelineData.length]); return ( // Ändern Sie den äußeren Container-Style
{/* About Me Section */}

About Me

I’m a passionate developer always excited about new challenges. Scroll down to learn more about me!

{/* Timeline Section */}
{/* Navigation buttons and timeline content here */}
{timelineData.map((item, index) => { const adjustedSkills = skills.map((s) => { const stepLevel = s.progression?.[index] ?? 0; return { ...s, level: Math.floor((s.level * stepLevel) / 100), }; }); return (
(sectionRefs.current[index] = el)} style={{ flex: "0 0 100%", scrollSnapAlign: "center", display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", padding: "2rem", boxSizing: "border-box", }} >

{item.title}

{item.date}

{item.content}

{adjustedSkills.filter((s) => s.level > 0).map((skill, sIndex) => (

{skill.name}

{getSkillLabel(skill.level)}
))}
); })}
{currentSection > 0 && ( )} {currentSection < timelineData.length - 1 && ( )}
{timelineFinished && showScrollPrompt && (
⬇ Scroll down to continue ⬇
)} {/* FINAL BUTTON SECTION - MOVED OUTSIDE */} {timelineFinished && ( // Fügen Sie dem Button-Section einen z-Index hinzu
)}
) }