import { interpolate, useCurrentFrame, useVideoConfig, AbsoluteFill, Sequence, spring } from 'remotion'; import React from 'react'; const COLORS = { bgBase: '#2D2D2D', cardBg: '#363636', accentGreen: '#7CB97A', accentAmber: '#D4A574', accentTeal: '#5BA8A0', textPrimary: '#FFFFFF', textSecondary: '#B8B8B8', border: 'rgba(255, 255, 255, 0.08)', }; const TimelineCard: React.FC<{ title: string; subtitle: string; time: string; type: 'commit' | 'issue' | 'alert'; index: number; }> = ({ title, subtitle, time, type, index }) => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); const delay = index * 5; const spr = spring({ frame: frame - delay, fps, config: { damping: 14, mass: 0.8 }, }); const y = interpolate(spr, [0, 1], [50, 0]); const opacity = interpolate(spr, [0, 1], [0, 1]); let iconColor = COLORS.textSecondary; if (type === 'commit') iconColor = COLORS.accentTeal; if (type === 'issue') iconColor = COLORS.accentGreen; if (type === 'alert') iconColor = COLORS.accentAmber; return (
{subtitle}
Real-time Project Pulse