VibeCoderzVibeCoderz
All Prompts
Animated Vertical Experience Timeline Section preview
timelinetailwindanimatedscrollportfolioresumeverticalinteractivejavascriptcomponent

Animated Vertical Experience Timeline Section

Анимированная вертикальная лента опыта на Tailwind. Демонстрирует историю работы или этапы с интерактивными карточками и прогресс-баром при скролле. Идеально для портфолио и резюме.

Prompt

<div class="max-w-6xl lg:px-8 mr-auto ml-auto pr-6 pl-6">
  <div class="mb-16 animate-fade-in-up">
    <h2 class="text-4xl sm:text-5xl font-semibold tracking-tight text-white mb-4">Experience</h2>
    <p class="text-xl text-gray-400">Companies I've worked with and roles I've taken on.</p>
  </div>

  <div class="relative">
    <!-- Static Timeline line -->
    <div class="absolute left-8 top-0 bottom-0 w-px bg-gradient-to-b from-gray-600/30 via-gray-600/20 to-gray-600/10"></div>
    
    <!-- Dynamic Progress line -->
    <div id="timeline-progress" class="absolute left-8 top-0 w-px bg-gradient-to-b from-blue-500 via-purple-500 to-indigo-500 transition-all duration-300 ease-out" style="height: 0%; filter: none;"></div>
    
    <div class="space-y-12" id="experience-container">
      <!-- Meta -->
      <div class="group relative animate-fade-in-up animation-delay-200 pl-20 space-y-16 experience-item">
        <!-- Timeline dot -->
        <div class="absolute left-6 top-8 h-4 w-4 rounded-full bg-blue-500 ring-4 ring-blue-500/20 group-hover:ring-8 transition-all duration-300 z-10" style="transform: scale(1); filter: none;"></div>
        
        <div class="p-8 rounded-3xl bg-gradient-to-br from-white/10 to-white/5 border border-white/10 hover:border-white/20 transition-all duration-300">
          <div class="flex flex-between gap-4 mb-6">
            <div class="flex items-center gap-4">
              <div class="h-12 w-12 rounded-xl bg-blue-500 flex items-center justify-center">
                <span class="text-white font-semibold text-lg">M</span>
              </div>
              <div>
                <h3 class="text-xl font-semibold text-white">Senior Product Designer</h3>
                <p class="text-blue-400 font-medium">Meta (Reality Labs)</p>
              </div>
            </div>
            <div class="text-right">
              <span class="text-sm font-medium text-gray-400">2021 - Present</span>
              <p class="text-xs text-gray-500">3 years</p>
            </div>
          </div>
          <p class="text-gray-400 leading-relaxed mb-4">
            Leading design for AR/VR social experiences and productivity tools. Shipped Horizon Workrooms 2.0, co-presence features, and spatial interaction patterns used by millions of Quest users.
          </p>
          <div class="flex flex-wrap gap-2">
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">VR Design</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Spatial UX</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Unity</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Design Systems</span>
          </div>
        </div>
      </div>

      <!-- Instagram -->
      <div class="group relative pl-20 animate-fade-in-up animation-delay-400 experience-item">
        <!-- Timeline dot -->
        <div class="absolute left-6 top-8 h-4 w-4 rounded-full bg-purple-500 ring-4 ring-purple-500/20 group-hover:ring-8 transition-all duration-300 z-10" style="transform: scale(1); filter: none;"></div>
        
        <div class="p-8 rounded-3xl bg-gradient-to-br from-white/10 to-white/5 border border-white/10 hover:border-white/20 transition-all duration-300">
          <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-6">
            <div class="flex items-center gap-4">
              <div class="h-12 w-12 rounded-xl bg-gradient-to-br from-purple-500 to-pink-500 flex items-center justify-center">
                <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-6 w-6 text-white">
                  <rect width="20" height="20" x="2" y="2" rx="5" ry="5" class=""></rect>
                  <path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" class=""></path>
                  <line x1="17.5" x2="17.51" y1="6.5" y2="6.5" class=""></line>
                </svg>
              </div>
              <div>
                <h3 class="text-xl font-semibold text-white">Product Designer</h3>
                <p class="text-purple-400 font-medium">Instagram</p>
              </div>
            </div>
            <div class="text-right">
              <span class="text-sm font-medium text-gray-400">2019 - 2021</span>
              <p class="text-xs text-gray-500">2 years</p>
            </div>
          </div>
          <p class="text-gray-400 leading-relaxed mb-4">
            Designed and shipped major improvements to Stories creation, Reels discovery, and creator monetization features. Led cross-functional teams and mentored junior designers.
          </p>
          <div class="flex flex-wrap gap-2">
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Mobile Design</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">A/B Testing</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">User Research</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Prototyping</span>
          </div>
        </div>
      </div>

      <!-- Stripe -->
      <div class="group relative animate-fade-in-up animation-delay-600 pl-20 experience-item">
        <!-- Timeline dot -->
        <div class="absolute left-6 top-8 h-4 w-4 rounded-full bg-indigo-500 ring-4 ring-indigo-500/20 group-hover:ring-8 transition-all duration-300 z-10" style="transform: scale(1); filter: none;"></div>
        
        <div class="p-8 rounded-3xl bg-gradient-to-br from-white/10 to-white/5 border border-white/10 hover:border-white/20 transition-all duration-300">
          <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-6">
            <div class="flex items-center gap-4">
              <div class="h-12 w-12 rounded-xl bg-indigo-500 flex items-center justify-center">
                <span class="text-white font-semibold text-lg">S</span>
              </div>
              <div class="">
                <h3 class="text-xl font-semibold text-white">Product Designer</h3>
                <p class="text-indigo-400 font-medium">Stripe</p>
              </div>
            </div>
            <div class="text-right">
              <span class="text-sm font-medium text-gray-400">2017 - 2019</span>
              <p class="text-xs text-gray-500">2 years</p>
            </div>
          </div>
          <p class="text-gray-400 leading-relaxed mb-4">
            Designed developer tools and merchant-facing products used by millions of businesses globally. Contributed to Stripe's design system and accessibility standards.
          </p>
          <div class="flex flex-wrap gap-2">
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Web Design</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">API Design</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Developer Tools</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">B2B</span>
          </div>
        </div>
      </div>

      <!-- Adobe -->
      <div class="group relative animate-fade-in-up animation-delay-600 pl-20 experience-item">
        <!-- Timeline dot -->
        <div class="absolute left-6 top-8 h-4 w-4 rounded-full bg-red-500 ring-4 ring-red-500/20 group-hover:ring-8 transition-all duration-300 z-10" style="transform: scale(1); filter: none;"></div>
        
        <div class="p-8 rounded-3xl bg-gradient-to-br from-white/10 to-white/5 border border-white/10 hover:border-white/20 transition-all duration-300">
          <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-6">
            <div class="flex items-center gap-4">
              <div class="h-12 w-12 rounded-xl bg-red-500 flex items-center justify-center">
                <span class="text-white font-semibold text-lg">A</span>
              </div>
              <div class="">
                <h3 class="text-xl font-semibold text-white">UX Designer</h3>
                <p class="text-red-400 font-medium">Adobe Creative Suite</p>
              </div>
            </div>
            <div class="text-right">
              <span class="text-sm font-medium text-gray-400">2015 - 2017</span>
              <p class="text-xs text-gray-500">2 years</p>
            </div>
          </div>
          <p class="text-gray-400 leading-relaxed mb-4">
            Created intuitive user experiences for creative software applications. Collaborated with engineering teams to improve workflow efficiency and user satisfaction across desktop applications.
          </p>
          <div class="flex flex-wrap gap-2">
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Creative Software</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">User Testing</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Wireframing</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Desktop UI</span>
          </div>
        </div>
      </div>

      <!-- Figma -->
      <div class="group relative animate-fade-in-up animation-delay-600 pl-20 experience-item">
        <!-- Timeline dot -->
        <div class="absolute left-6 top-8 h-4 w-4 rounded-full bg-emerald-500 ring-4 ring-emerald-500/20 group-hover:ring-8 transition-all duration-300 z-10" style="transform: scale(1); filter: none;"></div>
        
        <div class="p-8 rounded-3xl bg-gradient-to-br from-white/10 to-white/5 border border-white/10 hover:border-white/20 transition-all duration-300">
          <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-6">
            <div class="flex items-center gap-4">
              <div class="h-12 w-12 flex bg-emerald-500 rounded-xl items-center justify-center">
                <span class="text-white font-semibold text-lg">F</span>
              </div>
              <div class="">
                <h3 class="text-xl font-semibold text-white">Senior UI/UX Designer</h3>
                <p class="text-emerald-400 font-medium">Figma Design Studio</p>
              </div>
            </div>
            <div class="text-right">
              <span class="text-sm font-medium text-gray-400">2014 - 2016</span>
              <p class="text-xs text-gray-500">2 years</p>
            </div>
          </div>
          <p class="text-gray-400 leading-relaxed mb-4">
            Specialized in designing collaborative design tools and workflow interfaces. Built innovative features for real-time collaboration and helped establish design patterns that became industry standards.
          </p>
          <div class="flex flex-wrap gap-2">
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Collaboration Tools</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Interface Design</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Real-time Features</span>
            <span class="text-sm text-neutral-50 bg-neutral-50/10 rounded-full pt-1 pr-3 pb-1 pl-3">Design Systems</span>
          </div>
        </div>
      </div>
    </div>
  </div>

  <script>
    (function() {
      const timelineProgress = document.getElementById('timeline-progress');
      const experienceContainer = document.getElementById('experience-container');
      const experienceItems = document.querySelectorAll('.experience-item');
      
      if (!timelineProgress || !experienceContainer || experienceItems.length === 0) return;

      function updateTimelineProgress() {
        const containerRect = experienceContainer.getBoundingClientRect();
        const containerTop = containerRect.top + window.scrollY;
        const containerHeight = containerRect.height;
        const viewportHeight = window.innerHeight;
        const scrollTop = window.scrollY;
        
        // Calculate when the experience section starts to be visible
        const sectionStart = containerTop - viewportHeight + 200; // Start a bit before fully visible
        const sectionEnd = containerTop + containerHeight - 200;
        
        // Calculate progress based on scroll position
        let progress = 0;
        
        if (scrollTop >= sectionStart && scrollTop <= sectionEnd) {
          const scrollProgress = (scrollTop - sectionStart) / (sectionEnd - sectionStart);
          progress = Math.min(Math.max(scrollProgress, 0), 1);
        } else if (scrollTop > sectionEnd) {
          progress = 1;
        }
        
        // Update the timeline progress bar height
        const progressHeight = progress * 100;
        timelineProgress.style.height = `${progressHeight}%`;
        
        // Add glow effect when fully visible
        if (progress > 0.1) {
          timelineProgress.style.filter = 'drop-shadow(0 0 6px rgba(59, 130, 246, 0.5))';
        } else {
          timelineProgress.style.filter = 'none';
        }
        
        // Optional: Highlight current experience item
        experienceItems.forEach((item, index) => {
          const itemRect = item.getBoundingClientRect();
          const isInView = itemRect.top < viewportHeight * 0.7 && itemRect.bottom > viewportHeight * 0.3;
          
          const dot = item.querySelector('.absolute.left-6');
          if (dot) {
            if (isInView) {
              dot.style.transform = 'scale(1.2)';
              dot.style.filter = 'drop-shadow(0 0 8px currentColor)';
            } else {
              dot.style.transform = 'scale(1)';
              dot.style.filter = 'none';
            }
          }
        });
      }
      
      // Throttle scroll event for better performance
      let ticking = false;
      function handleScroll() {
        if (!ticking) {
          requestAnimationFrame(() => {
            updateTimelineProgress();
            ticking = false;
          });
          ticking = true;
        }
      }
      
      // Initialize and set up scroll listener
      window.addEventListener('scroll', handleScroll, { passive: true });
      window.addEventListener('resize', updateTimelineProgress, { passive: true });
      
      // Initial call
      updateTimelineProgress();
    })();
  </script>
</div>
All Prompts