'use client'; import { motion, useScroll, useTransform } from 'framer-motion'; import React, { useEffect, useRef, useState } from 'react'; interface TimelineEntry { title: string; content: React.ReactNode; } export const Timeline = ({ data }: { data: TimelineEntry[] }) => { const ref = useRef(null); const containerRef = useRef(null); const [height, setHeight] = useState(0); useEffect(() => { if (ref.current) { const rect = ref.current.getBoundingClientRect(); setHeight(rect.height); } }, [ref]); const { scrollYProgress } = useScroll({ target: containerRef, offset: ['start 10%', 'end 50%'], }); const heightTransform = useTransform(scrollYProgress, [0, 1], [0, height]); const opacityTransform = useTransform(scrollYProgress, [0, 0.1], [0, 1]); return (

Changelog from my journey

I've been working on Aceternity for the past 2 years. Here's a timeline of my journey.

{data.map((item, index) => (

{item.title}

{item.title}

{item.content}{' '}
))}
); };