import React from 'react'; import { AbsoluteFill, Sequence, interpolate, spring, useCurrentFrame } from 'remotion'; import { palette } from './contract'; const clamp = { extrapolateLeft: 'clamp' as const, extrapolateRight: 'clamp' as const }; const font: React.CSSProperties = { fontFamily: 'Archivo, sans-serif' }; const LogoMark: React.FC<{ size?: number }> = ({ size = 52 }) => ( ); const Backdrop: React.FC<{ frame: number }> = ({ frame }) => { const drift = interpolate(frame, [0, 359], [0, 28], clamp); return (
); }; const Opening: React.FC = () => { const f = useCurrentFrame(); const reveal = spring({ frame: f, fps: 30, durationInFrames: 26, config: { damping: 200 } }); const float = Math.sin((f / 90) * Math.PI) * 10; return (
Relay
Make room for focused work
{[0, 1, 2].map((item) =>
)}
); }; type CalendarCardProps = { left: string; top: number; title: string; detail: string; focused?: boolean; focusMix?: number; blue?: boolean }; const CalendarCard: React.FC = ({ left, top, title, detail, focused = false, focusMix = 0, blue = false }) => (
{title}
{detail}
); const ProgressCard: React.FC<{ opacity: number }> = ({ opacity }) => (
Progress12 / 16
Planned
Done
); const FeatureShowcase: React.FC = () => { const f = useCurrentFrame(); const enter = spring({ frame: f, fps: 30, durationInFrames: 30, config: { damping: 200 } }); const collaboration = interpolate(f, [0, 8, 47, 63], [1, 1, 0, 0], clamp); const focusMix = interpolate(f, [46, 63, 99, 117], [0, 1, 1, 0], clamp); const progressMix = interpolate(f, [106, 123, 180], [0, 1, 1], clamp); const titleOne = interpolate(f, [0, 7, 49, 62], [0, 1, 1, 0], clamp); const titleTwo = interpolate(f, [53, 66, 108, 122], [0, 1, 1, 0], clamp); const titleThree = interpolate(f, [113, 126, 180], [0, 1, 1], clamp); const labelStyle = (opacity: number): React.CSSProperties => ({ position: 'absolute', left: 0, top: 0, width: 440, opacity, transform: `translateY(${(1 - opacity) * 16}px)`, fontSize: 56, lineHeight: 1.08, fontWeight: 600, letterSpacing: '-0.055em' }); return (
Relay
Plan together
Protect focus
time
See progress
Relay
JM AK RL
Share week
WORKSPACE
{['Week', 'Inbox', 'Projects', 'People'].map((item, index) =>
{item}
)}
YOUR SPACE
Product
Design
Team week
October 14 – 18
Today
Week⌄
{['MON 14', 'TUE 15', 'WED 16', 'THU 17', 'FRI 18'].map((day, i) =>
{day}
)}
9 AM11 AM1 PM3 PM5 PM
JM is planning
); }; const Closing: React.FC = () => { const f = useCurrentFrame(); const reveal = spring({ frame: f, fps: 30, durationInFrames: 24, config: { damping: 200 } }); const opacity = interpolate(f, [0, 9, 22], [0, 1, 1], clamp); return (
Start your next week
with Relay
); }; export const BenchmarkVideo: React.FC = () => { const frame = useCurrentFrame(); return ( ); };