// scenes.jsx — Terra video scenes // Palette: deep charcoal bg + acid-lime accent + bone white const TERRA = { bg: '#0b0d0a', bgAlt: '#111411', fg: '#ecece4', dim: '#8a8d82', line: 'rgba(236,236,228,0.14)', lime: '#d4ff3a', limeDark: '#a8cc2d', rust: '#ff5a1f', }; const SANS = "'Helvetica Neue', Helvetica, Arial, sans-serif"; const MONO = "'JetBrains Mono', ui-monospace, SFMono-Regular, monospace"; // ───────────────────────── Chrome: HUD overlay ───────────────────────── function HUD({ sceneLabel, sceneNum, totalScenes }) { const time = useTime(); return (
{/* Top-left logo */}
TERRA.
{/* Top-right scene label */}
{String(sceneNum).padStart(2, '0')} / {String(totalScenes).padStart(2, '0')} {sceneLabel}
{/* Bottom-left timecode */}
● REC T+{time.toFixed(2).padStart(5, '0')}s
{/* Bottom-right tagline */}
real people · real results · no bs
{/* Corner ticks */} {[ { left: 24, top: 24, bw: '2px 0 0 2px' }, { right: 24, top: 24, bw: '2px 2px 0 0' }, { left: 24, bottom: 24, bw: '0 0 2px 2px' }, { right: 24, bottom: 24, bw: '0 2px 2px 0' }, ].map((s, i) => (
))}
); } // ───────────────────────── Scene 1: Cold Open ───────────────────────── // 0.0 → 2.8s function SceneColdOpen({ start, end }) { return ( {({ localTime, duration }) => { const progress = localTime / duration; // Logo reveal const logoP = clamp((localTime - 0.4) / 0.9, 0, 1); const logoEased = Easing.easeOutExpo(logoP); // Subtitle reveal const subP = clamp((localTime - 1.6) / 0.7, 0, 1); // Exit const exitP = clamp((localTime - 3.5) / 0.5, 0, 1); const exitY = Easing.easeInCubic(exitP) * -30; const exitOp = 1 - exitP; // Background lines drift const lineOffset = localTime * 20; return (
{/* Diagonal stripe field */}
{/* Scanning line */}
{/* Main stack */}
{/* Eyebrow */}
— A DIGITAL GROWTH AGENCY —
{/* Wordmark — masked reveal */}
TERRA.
{/* Lime underline */}
{/* Subtitle */}
Your long-term growth partner.
); }} ); } // ───────────────────────── Scene 2: Manifesto ───────────────────────── // 2.8 → 6.6s — "Real People. Real Results. No BS." function SceneManifesto({ start, end }) { return ( {({ localTime, duration }) => { const words = [ { text: 'REAL', sub: 'PEOPLE.', t: 0.2, accent: false }, { text: 'REAL', sub: 'RESULTS.', t: 1.5, accent: false }, { text: 'NO', sub: 'BS.', t: 2.8, accent: true }, ]; const exitP = clamp((localTime - (duration - 0.55)) / 0.5, 0, 1); const exitOp = 1 - exitP; return (
{/* Vertical guide lines */}
{words.map((w, i) => { const wp = clamp((localTime - w.t) / 0.35, 0, 1); const eased = Easing.easeOutExpo(wp); const slideX = (1 - eased) * -80; return (
0{i + 1}
{w.text}
{w.sub}
); })} {/* Underline + caption */}
We don't win unless you do.
); }} ); } // ───────────────────────── Scene 3: Stats Counter ───────────────────── // 6.6 → 10.8s function Counter({ from, to, suffix = '', prefix = '', duration, t, fixed = 0 }) { const p = clamp(t / duration, 0, 1); const eased = Easing.easeOutExpo(p); const v = from + (to - from) * eased; const display = fixed > 0 ? v.toFixed(fixed) : Math.round(v).toString(); return `${prefix}${display}${suffix}`; } function SceneStats({ start, end }) { return ( {({ localTime, duration }) => { const stats = [ { label: 'CLIENTS SERVED', from: 0, to: 150, suffix: '+', countDur: 1.9, startAt: 0.4 }, { label: 'AVG. ROI INCREASE', from: 0, to: 3.2, suffix: 'x', fixed: 1, countDur: 1.9, startAt: 0.8 }, { label: 'AI SUPPORT', from: 0, to: 24, suffix: '/7', countDur: 1.9, startAt: 1.2 }, { label: 'CLIENT RETENTION', from: 0, to: 98, suffix: '%', countDur: 1.9, startAt: 1.6 }, ]; const headerP = clamp(localTime / 0.7, 0, 1); const exitP = clamp((localTime - (duration - 0.6)) / 0.5, 0, 1); const globalOp = 1 - exitP; return (
{/* Header */}
THE NUMBERS — RECEIPTS, NOT PROMISES
{/* Stats grid */}
{stats.map((s, i) => { const localT = Math.max(0, localTime - s.startAt); const appearP = clamp((localTime - (s.startAt - 0.1)) / 0.3, 0, 1); return (
0 ? `1px solid ${TERRA.bg}` : 'none', opacity: appearP, transform: `translateY(${(1 - appearP) * 20}px)`, }}>
0{i + 1} / 04
{Counter({ from: s.from, to: s.to, suffix: s.suffix, duration: s.countDur, t: localT, fixed: s.fixed || 0, })}
{s.label}
); })}
{/* Bar visualizer */}
{Array.from({ length: 40 }, (_, i) => { const phase = (localTime * 2 + i * 0.15) % (Math.PI * 2); const h = 20 + Math.abs(Math.sin(phase)) * 20; const op = clamp((localTime - 0.4) / 0.8, 0, 1); return (
); })}
); }} ); } // ───────────────────────── Scene 4: Client Results Ticker ───────────── // 10.8 → 15.6s function SceneResults({ start, end }) { return ( {({ localTime, duration }) => { const results = [ { metric: '$127K', label: 'TRACKED REVENUE', client: 'SUMMIT ROOFING', detail: 'Cold account → 3.8x ROAS in 90 days' }, { metric: '+340%', label: 'ORGANIC ENQUIRIES', client: 'LUXE SKIN CLINIC', detail: 'Booked 6 weeks out in 90 days' }, { metric: '4.1x', label: 'RETURN ON AD SPEND', client: 'CLEARPATH LAW', detail: '4x consultations, same budget' }, { metric: '−61%', label: 'COST PER LEAD', client: 'LOANBRIDGE FINANCIAL', detail: 'Half the cost, twice the quality' }, { metric: '#1', label: '14 LOCAL KEYWORDS', client: 'NESTFINDER REALTY', detail: 'Organic > paid in 4 months' }, { metric: '0', label: 'MISSED CALLS — EVER', client: 'PRESTIGE HOME SVCS', detail: '15 lost calls/day → 0', hold: true }, ]; // Each card is cardDur, except the last card which holds longer. const cardDur = 1.15; const lastCardBonus = 0.9; // extra hold on the final "0 missed calls" const totalCards = results.length; const regularSpan = (totalCards - 1) * cardDur; let currentIdx, cardLocal, effectiveDur; if (localTime < regularSpan) { currentIdx = Math.floor(localTime / cardDur); cardLocal = localTime - currentIdx * cardDur; effectiveDur = cardDur; } else { currentIdx = totalCards - 1; cardLocal = localTime - regularSpan; effectiveDur = cardDur + lastCardBonus; } currentIdx = clamp(currentIdx, 0, totalCards - 1); const cardP = clamp(cardLocal / effectiveDur, 0, 1); const r = results[currentIdx]; // Pulse on the "0" final card to make it noticeable const isLast = currentIdx === totalCards - 1; const pulse = isLast ? (1 + Math.sin(cardLocal * 5) * 0.04) : 1; const headerP = clamp(localTime / 0.5, 0, 1); const exitP = clamp((localTime - (duration - 0.5)) / 0.5, 0, 1); const globalOp = 1 - exitP; return (
{/* Header */}
PROVEN RESULTS — REAL CLIENTS, REAL NUMBERS
{/* Big metric card */}
{/* Left: huge metric */}
CASE #{String(currentIdx + 1).padStart(2, '0')} / 0{results.length}{isLast ? ' · FINAL' : ''}
{r.metric}
{r.label}
{/* Right: client detail */}
CLIENT
{r.client}
{r.detail}
{/* Progress pips */}
{results.map((_, i) => (
))}
); }} ); } // ───────────────────────── Scene 5: CTA Payoff ───────────────────────── // 15.6 → 20.0s function SceneCTA({ start, end }) { return ( {({ localTime, duration }) => { const p1 = clamp(localTime / 0.7, 0, 1); const p2 = clamp((localTime - 0.7) / 0.8, 0, 1); const p3 = clamp((localTime - 1.8) / 0.7, 0, 1); const p4 = clamp((localTime - 2.8) / 0.7, 0, 1); const p5 = clamp((localTime - 3.9) / 0.6, 0, 1); // Pulse on CTA button const pulse = 1 + Math.sin(localTime * 4) * 0.02; return (
{/* Gradient glow */}
{/* Grid */}
{/* Eyebrow */}
→ READY TO GROW?
{/* Headline */}
Let's find out
if we fit.
{/* Subtitle */}
Free strategy call. No commitment. No pressure.
{/* CTA row */}
BOOK A FREE CALL
DMITRIDEFREITAS.COM
BASED IN BARBADOS
{/* Final sign-off logo */}
TERRA.
— WE DON'T WIN UNLESS YOU DO
); }} ); } Object.assign(window, { TERRA, SANS, MONO, HUD, SceneColdOpen, SceneManifesto, SceneStats, SceneResults, SceneCTA, });