import { interpolate, useCurrentFrame, useVideoConfig, AbsoluteFill, Sequence, Img, staticFile, spring } from 'remotion';
import React from 'react';
import { loadFont } from '@remotion/google-fonts/inter';
import { Background } from './components/Background';
import { TerminalScene } from './components/TerminalScene';
import { TimelineScene } from './components/TimelineScene';
loadFont();
const COLORS = {
textPrimary: '#FFFFFF',
textSecondary: '#B8B8B8',
accentGreen: '#7CB97A',
accentTeal: '#5BA8A0',
accentAmber: '#D4A574',
};
const Logo: React.FC<{ scale?: number }> = ({ scale = 1 }) => {
const frame = useCurrentFrame();
const { fps } = useVideoConfig();
const dots = [
{ color: COLORS.accentGreen, delay: 0 },
{ color: COLORS.accentTeal, delay: 5 },
{ color: COLORS.accentAmber, delay: 10 },
{ color: COLORS.accentTeal, delay: 15 },
{ color: COLORS.accentGreen, delay: 20 },
{ color: COLORS.accentAmber, delay: 25 },
{ color: COLORS.accentGreen, delay: 30 },
{ color: COLORS.accentTeal, delay: 35 },
{ color: COLORS.accentAmber, delay: 40 },
];
return (
{dots.map((dot, i) => {
const spr = spring({
frame: frame - dot.delay,
fps,
config: { damping: 10 }
});
const s = interpolate(spr, [0, 1], [0, 1]);
const opacity = interpolate(spr, [0, 1], [0, 1]);
return (
);
})}
);
};
const GlassCard: React.FC<{ children: React.ReactNode; className?: string }> = ({ children, className }) => {
return (
{children}
);
};
const TitleScene: React.FC = () => {
const frame = useCurrentFrame();
const opacity = interpolate(frame, [0, 20], [0, 1]);
const y = interpolate(frame, [0, 20], [30, 0]);
const blur = interpolate(frame, [0, 20], [10, 0]);
return (
Beadboard
Agent-Driven Project Orchestration
);
};
const ShowcaseScene: React.FC<{ src: string; title: string; subtitle: string }> = ({ src, title, subtitle }) => {
const frame = useCurrentFrame();
const { fps } = useVideoConfig();
const spr = spring({
frame,
fps,
config: { damping: 14, mass: 0.8 },
});
const opacity = interpolate(frame, [0, 15], [0, 1]);
const scale = interpolate(spr, [0, 1], [0.92, 1]);
const y = interpolate(spr, [0, 1], [60, 0]);
// Continuous floating animation
const floatY = Math.sin(frame / 40) * 8;
return (
})
{/* Shine effect */}
);
};
const OutroScene: React.FC = () => {
const frame = useCurrentFrame();
const opacity = interpolate(frame, [0, 20], [0, 1]);
const scale = interpolate(frame, [0, 100], [1, 1.1]);
return (
Build Faster.
Deploy with Confidence.
);
}
export const Main: React.FC = () => {
return (
);
};