// 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 */}
{/* 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,
});