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 (

{title}

{time}

{subtitle}

); }; export const TimelineScene: React.FC = () => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); const titleOpacity = interpolate(frame, [0, 20], [0, 1]); const titleY = interpolate(frame, [0, 20], [20, 0]); return (

Live Activity Feed

Real-time Project Pulse

Today
Yesterday
); };