// ===========================================================================
// PLAIN TEXT JS SOURCE FILE — iam/marketing v5 home (r14)
// ===========================================================================
//
// This file contains JavaScript and JSX source code.
// It is loaded as a remote script by the front page HTML.
// Do not edit directly — edit home.jsx in the iam-marketing-wp-theme repo
// and re-upload via the deploy pipeline.
//
// ===========================================================================
// D4-prod · Home page
// Operator Console direction · production hi-fi
// ── Editable copy loader ─────────────────────────────────────────
// Strings come from copy.js (window.HOME_COPY). If a key is missing,
// the `??` fallback uses the literal default so the page never breaks.
const __C = (typeof window !== 'undefined' && window.HOME_COPY) || {};
const HERO = __C.hero || {};
const PROBLEM = __C.problem || {};
const DIVIDER = __C.divider || {};
const GLOBAL = __C.global || {};
// ── useIsMobile · CSS-viewport detection via matchMedia (works in real browsers + preview emulation) ─
function useIsMobile(breakpoint = 900) {
const query = `(max-width: ${breakpoint - 1}px)`;
const [isMobile, setIsMobile] = React.useState(() => {
if (typeof window === 'undefined' || !window.matchMedia) return false;
return window.matchMedia(query).matches;
});
React.useEffect(() => {
if (!window.matchMedia) return;
const mql = window.matchMedia(query);
const onChange = (e) => setIsMobile(e.matches);
// Modern (Safari 14+, all evergreens):
if (mql.addEventListener) mql.addEventListener('change', onChange);
else mql.addListener(onChange); // Safari ≤13 fallback
// Set initial state in case it changed since render
setIsMobile(mql.matches);
return () => {
if (mql.removeEventListener) mql.removeEventListener('change', onChange);
else mql.removeListener(onChange);
};
}, [query]);
return isMobile;
}
// ── ScrollRail · fixed right-edge progress tracker ────────────
// Per spec — 10 sections. Filtered at mount to only those actually present in DOM.
const SCROLL_RAIL_SECTIONS = [
['problem', '01 / PROBLEM'],
['backend', '01.5 / BACKEND'],
['mechanism', '02 / MECHANISM'],
['engine', '03 · ENGINE'],
['who', '04 / WHO'],
['receipts', '05 / RECEIPTS'],
['diff', '06 / DIFF'],
['process', '08 / PROCESS'],
['command-center', '09 / COMMAND_CENTER'],
['room-01', '10 / ROOM_01'],
];
const ScrollRail = () => {
const [activeIdx, setActiveIdx] = React.useState(0);
const [pct, setPct] = React.useState(0);
const [items, setItems] = React.useState([]);
const rafRef = React.useRef(null);
// Resolve only sections that are actually mounted in the DOM
React.useEffect(() => {
if (typeof window === 'undefined') return;
const present = SCROLL_RAIL_SECTIONS.filter(([id]) => document.getElementById(id));
setItems(present);
}, []);
React.useEffect(() => {
if (typeof window === 'undefined' || !items.length) return;
let ticking = false;
const onScroll = () => {
if (ticking) return;
ticking = true;
rafRef.current = requestAnimationFrame(() => {
const max = document.documentElement.scrollHeight - window.innerHeight;
const ratio = max > 0 ? Math.min(1, Math.max(0, window.scrollY / max)) : 0;
setPct(Math.round(ratio * 100));
ticking = false;
});
};
onScroll();
window.addEventListener('scroll', onScroll, { passive: true });
window.addEventListener('resize', onScroll, { passive: true });
const observed = items
.map(([id]) => document.getElementById(id))
.filter(Boolean);
const visibility = new Map();
const obs = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
visibility.set(entry.target.id, entry.intersectionRatio);
});
let bestId = null;
let bestRatio = 0;
visibility.forEach((ratio, id) => {
if (ratio > bestRatio) { bestRatio = ratio; bestId = id; }
});
if (bestId) {
const idx = items.findIndex(([id]) => id === bestId);
if (idx >= 0) setActiveIdx(idx);
}
}, { threshold: [0, 0.25, 0.5, 0.75, 1] });
observed.forEach((el) => obs.observe(el));
return () => {
window.removeEventListener('scroll', onScroll);
window.removeEventListener('resize', onScroll);
if (rafRef.current) cancelAnimationFrame(rafRef.current);
obs.disconnect();
};
}, [items]);
const handleJump = (id) => {
const el = document.getElementById(id);
if (!el) return;
const top = el.getBoundingClientRect().top + window.scrollY - 60;
window.scrollTo({ top, behavior: 'smooth' });
};
if (!items.length) return null;
return (
<>
// SECTION
{items.map(([id, label], i) => {
const top = items.length > 1 ? (i / (items.length - 1)) * 100 : 0;
const active = i === activeIdx;
return (
handleJump(id)}
className={`scroll-rail-row ${active ? 'is-active' : ''}`}
aria-label={`Jump to ${label}`}
style={{
position: 'absolute', left: 0, top: `${top}%`,
transform: 'translateY(-50%)',
display: 'flex', alignItems: 'center', gap: 10, flexDirection: 'row',
background: 'transparent', border: 'none', padding: 0,
cursor: 'pointer', pointerEvents: 'auto',
}}
>
{label}
);
})}
// SCROLL · {String(pct).padStart(2, '0')}%
>
);
};
const HomePage = ({ lang = 'EN' }) => {
const mobile = useIsMobile();
return (
{/* Mobile-only press feedback for magnetic CTAs (no cursor → :active fallback) */}
{!mobile && }
);
};
// ── HERO ── VSL-first vertical-axis · centered focus ───────────
const HomeHero = ({ mobile }) => {
const dashboardRef = React.useRef(null);
const heroLang = 'EN';
const metrics = [
['CONVERSIONS', '12,842', '+32.4%', 'metric-a'],
['ROAS', '6.72x', '+18.7%', 'metric-b'],
['COST PER ACQUISITION', '$23.18', '-14.3%', 'metric-c'],
];
const campaigns = [
['Prospecting | US', '7.34x', '$1,246,231'],
['Retargeting | All', '6.21x', '$982,115'],
['Lookalike | 1%', '5.18x', '$752,841'],
['Email Promotion', '8.11x', '$612,503'],
];
React.useEffect(() => {
const root = dashboardRef.current;
if (!root) return;
const cards = Array.from(root.querySelectorAll('.iam-tilt-card'));
let raf = 0;
let active = null;
const resetCard = (card) => {
card.style.setProperty('--rx', '0deg');
card.style.setProperty('--ry', '0deg');
};
const onMove = (event) => {
const card = event.currentTarget;
active = { card, x: event.clientX, y: event.clientY };
if (raf) return;
raf = requestAnimationFrame(() => {
if (!active) { raf = 0; return; }
const rect = active.card.getBoundingClientRect();
const px = (active.x - rect.left) / rect.width - 0.5;
const py = (active.y - rect.top) / rect.height - 0.5;
active.card.style.setProperty('--ry', `${px * 8}deg`);
active.card.style.setProperty('--rx', `${py * -7}deg`);
raf = 0;
});
};
const onScroll = () => {
const rect = root.getBoundingClientRect();
const viewport = window.innerHeight || 1;
const progress = Math.max(-1, Math.min(1, (viewport * 0.5 - rect.top) / viewport));
cards.forEach((card, i) => {
const speed = Number(card.dataset.speed || 12);
card.style.setProperty('--py', `${progress * speed}px`);
});
};
cards.forEach((card) => {
card.addEventListener('pointermove', onMove);
card.addEventListener('pointerleave', () => resetCard(card));
});
onScroll();
window.addEventListener('scroll', onScroll, { passive: true });
window.addEventListener('resize', onScroll, { passive: true });
return () => {
if (raf) cancelAnimationFrame(raf);
cards.forEach((card) => {
card.removeEventListener('pointermove', onMove);
resetCard(card);
});
window.removeEventListener('scroll', onScroll);
window.removeEventListener('resize', onScroll);
};
}, []);
return (
{Array.from({ length: 18 }).map((_, i) => )}
Performance Marketing. AI Systems. Growth.
Scale With Marketing That Actually Moves Revenue
We build high-performance campaigns, conversion systems, and automated growth engines for brands that are ready to scale.
{['Paid Ads', 'CRO', 'Email', 'Automation'].map((x) => // {x} )}
REVENUE PERFORMANCE
$4,392,712 ▲ 28.6%
{[0,1,2,3,4].map(i => )}
{metrics.map(([label, value, delta, cls], i) => (
))}
TOP CAMPAIGNS
{campaigns.map(([name, roas, revenue]) =>
{name} {roas} {revenue}
)}
{heroLang === 'ES' ? 'EMBUDO DE CONVERSION' : 'CONVERSION FUNNEL'}
{heroLang === 'ES' ? 'Visitantes' : 'Visitors'} 342,142 {heroLang === 'ES' ? 'Vistas de Landing' : 'Landing Page Views'} 78,931 {heroLang === 'ES' ? 'Compras' : 'Purchases'} 12,842 3.75%
);
};
const HomeMarquee = () => (
);
// ── PROBLEM ────────────────────────────────────────────────────
const HomeProblem = ({ mobile }) => (
{/* H1 — order 1 on mobile, left column row 1 on desktop */}
You spend on ads.
They land here.
{/* Descriptive paragraphs + bullets — order 3 on mobile, in-flow on desktop */}
Most "growth" agencies just buy more clicks. Then dump traffic onto a checkout that breaks every objection in the book — pop-ups, broken trust, unclear pricing, slow buttons, no proof.
The CAC goes up. The LTV goes down. Your customer never gets to the buy button.
{[
['→', 'CAC ↑ +38% YoY · because the page leaks'],
['→', 'LTV ↓ −22% · no backend, one-and-done buyers'],
['→', 'ROAS 3.2× → 1.4× · same spend, less revenue'],
['→', 'Team churns · no system to inherit'],
].map(([a, t], i) => (
{a}
{t}
))}
Book a call to fix the leaks
{/* Beginner dropshipping mobile store — believable but flawed · order 2 on mobile (right after H1) */}
{/* Premium angled-floating product-shot phone treatment */}
{/* Ambient chartreuse halo behind the phone */}
{/* Soft floor reflection — mirrored fade beneath the phone */}
{/* Titanium frame — outer ring */}
{/* Inner bezel — black */}
{/* Screen */}
{/* Status bar */}
9:41
{/* Signal */}
5G
{/* Battery */}
{/* Dynamic Island */}
{/* Safari URL bar */}
🔒
thebestgadget.myshopify.com
↻
{/* Site nav */}
☰
BESTGADGET
🛒1
{/* Hero */}
-70% OFF
FREE SHIPPING*
only 3 left!
{/* Product info */}
HOT TRENDING ★ NEW
2024 NEW Premium Smart Multi-Function Gadget Pro™ (Original)
$29.99
$99.99
SAVE 70%
★★★★★ (2 reviews)
{[
{ l: '✓ SECURE', c: '#22c55e' },
{ l: '🚚 FAST', c: '#3b82f6' },
{ l: '↩ 30-DAY', c: '#a855f7' },
{ l: '⭐ #1 USA', c: '#f59e0b' },
].map((b, i) => (
{b.l}
))}
ADD TO CART →
🔥 17 people viewing this · order soon!
{/* Home indicator */}
{/* Screen reflection — subtle highlight */}
{/* Side buttons — left silence + volume */}
{/* Right side: power */}
{/* Floating objection popups — overlap the browser */}
{[
{ txt: '✕ "is this even real?"', top: '8%', left: '-4%', rot: -3, c: D4P.danger },
{ txt: '✕ "what does it actually do?"', top: '24%', right: '-6%', rot: 4, c: D4P.warm },
{ txt: '✕ "why is shipping more than the product?"', top: '46%', left: '-8%', rot: -2, c: D4P.danger },
{ txt: '✕ "no reviews · no proof"', top: '62%', right: '-4%', rot: 3, c: D4P.warm },
{ txt: '✕ "site looks like 2009"', top: '78%', left: '4%', rot: -4, c: D4P.danger },
{ txt: '✕ "i\'ll think about it" → never returns', top: '92%', right: '8%', rot: 2, c: D4P.danger },
].map((p, i) => (
{p.txt}
))}
{/* Mouse cursor leaving */}
→ tab closed
👋
{/* Caption */}
// 1 in 100 actually buys · 99 bounced
// we fix the page · then we buy the ads
);
// ── BACKEND RECOVERY ───────────────────────────────────────────
const HomeBackend = ({ mobile }) => {
const proSystems = [
{ name: 'Klaviyo · Lifecycle Flows', value: '+$8,400/mo', on: true },
{ name: 'Post-Purchase Upsell', value: '+$5,200/mo', on: true },
{ name: 'Cart-Recovery Downsell', value: '+$3,600/mo', on: true },
{ name: 'AI Agent · CX Recovery', value: '+$4,100/mo', on: true },
{ name: 'Browse-Abandonment', value: '+$2,800/mo', on: true },
{ name: 'RFM Win-Back · 60d', value: '+$3,200/mo', on: true },
{ name: 'Subscribe-Save Replen.', value: '+$2,700/mo', on: true },
];
const noneSystems = [
'Klaviyo · Lifecycle Flows',
'Post-Purchase Upsell',
'Cart-Recovery Downsell',
'AI Agent · CX Recovery',
'Browse-Abandonment',
'RFM Win-Back · 60d',
'Subscribe-Save Replen.',
];
return (
{/* Centered headline + sub */}
Most traffic walks out with their wallet.
We fix that.
{/* TWO VISUAL DASHBOARDS — pro vs none — center overlay text */}
{/* ── LEFT · PRO BUSINESS ────────────────────────────────── */}
// PRO BUSINESS
Full stack.
// 7 systems · synced · 24/7
LIVE
{/* monthly net */}
// MO. EXTRA GENERATED
▲ +12.4% MoM
+$30,000
// per $100K rev · without spending more on ads
{/* system rows */}
{proSystems.map((s, i) => (
{s.name}
{s.value}
))}
{/* ── RIGHT · NO SYSTEM ──────────────────────────────────── */}
// JUST ADS
One channel.
// 0 systems · disconnected · leaking
OFFLINE
{/* monthly leak */}
// MO. NET · LEAKING
▼ −12.4% MoM
−$30,000
// per $100K rev · walked out · never came back
{/* missing rows */}
{noneSystems.map((s, i) => (
{s}
OFF
))}
{/* CENTER OVERLAY — "WITH OUR SYSTEM" / "NO SYSTEM" */}
{!mobile && (
// WITH OUR SYSTEM
+$30K/mo
// NO SYSTEM
−$30K/mo
)}
{/* footer line — same store same traffic */}
Same store. Same traffic.
$60K/month difference.
);
};
// ── INCOME FOUNTAIN · interactive Canvas 2D particle system ────
// Each stream is a labeled nozzle at the top. Particles fall under gravity
// into a pool at the bottom. Hover a stream to highlight, click to toggle.
// IntersectionObserver pauses rAF when off-screen. Reduced-motion renders
// a single static frame. Falls back to nothing on canvas-failed browsers.
const IncomeFountain = ({ streams, mobile }) => {
const canvasRef = React.useRef(null);
const containerRef = React.useRef(null);
const stateRef = React.useRef({
particles: [],
nozzles: [],
active: streams.map(() => true),
hovered: -1,
poolFill: 0, // visual fill height target
paused: false,
rafId: 0,
lastEmit: 0,
});
const [hoveredIdx, setHoveredIdx] = React.useState(-1);
const [activeMap, setActiveMap] = React.useState(streams.map(() => true));
React.useEffect(() => {
const canvas = canvasRef.current;
const container = containerRef.current;
if (!canvas || !container) return;
const ctx = canvas.getContext('2d');
if (!ctx) return;
const reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
const dpr = Math.min(window.devicePixelRatio || 1, 2);
const H = mobile ? 360 : 460;
const resize = () => {
const w = container.clientWidth;
canvas.width = w * dpr;
canvas.height = H * dpr;
canvas.style.width = w + 'px';
canvas.style.height = H + 'px';
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
// recompute nozzle positions
const n = streams.length;
stateRef.current.nozzles = streams.map((s, i) => ({
x: (w * (i + 0.5)) / n,
y: 70,
idx: i,
}));
};
resize();
window.addEventListener('resize', resize);
// Pause when off-screen
const obs = new IntersectionObserver(
([entry]) => { stateRef.current.paused = !entry.isIntersecting; },
{ threshold: 0 }
);
obs.observe(container);
// Hover + click
const hitTest = (mx, my) => {
for (let i = 0; i < stateRef.current.nozzles.length; i++) {
const n = stateRef.current.nozzles[i];
if (Math.abs(mx - n.x) < 28 && Math.abs(my - n.y) < 22) return i;
}
return -1;
};
const onMove = (e) => {
const r = canvas.getBoundingClientRect();
const hit = hitTest(e.clientX - r.left, e.clientY - r.top);
if (hit !== stateRef.current.hovered) {
stateRef.current.hovered = hit;
setHoveredIdx(hit);
canvas.style.cursor = hit >= 0 ? 'pointer' : 'default';
}
};
const onLeave = () => {
stateRef.current.hovered = -1;
setHoveredIdx(-1);
canvas.style.cursor = 'default';
};
const onClick = () => {
const i = stateRef.current.hovered;
if (i < 0) return;
const next = [...stateRef.current.active];
next[i] = !next[i];
stateRef.current.active = next;
setActiveMap(next);
};
canvas.addEventListener('mousemove', onMove);
canvas.addEventListener('mouseleave', onLeave);
canvas.addEventListener('click', onClick);
// Static render for reduced-motion users
const drawFrame = (animate) => {
const w = canvas.clientWidth;
const poolY = H - 90;
ctx.clearRect(0, 0, w, H);
// Pool basin border
ctx.strokeStyle = 'rgba(197,216,109,0.28)';
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(40, poolY);
ctx.lineTo(w - 40, poolY);
ctx.stroke();
// Pool fill — height proportional to count of active streams
const activeCount = stateRef.current.active.filter(Boolean).length;
const targetFill = (activeCount / streams.length) * 78;
stateRef.current.poolFill += (targetFill - stateRef.current.poolFill) * 0.06;
const fillH = stateRef.current.poolFill;
const grad = ctx.createLinearGradient(0, poolY, 0, poolY + 80);
grad.addColorStop(0, 'rgba(197,216,109,0.32)');
grad.addColorStop(1, 'rgba(197,216,109,0.08)');
ctx.fillStyle = grad;
ctx.fillRect(40, poolY + (80 - fillH), w - 80, fillH);
ctx.strokeStyle = 'rgba(197,216,109,0.18)';
ctx.strokeRect(40, poolY, w - 80, 80);
// Nozzles + labels
const ns = stateRef.current.nozzles;
for (let i = 0; i < ns.length; i++) {
const n = ns[i];
const isActive = stateRef.current.active[i];
const isHovered = stateRef.current.hovered === i;
// Nozzle box
ctx.fillStyle = isActive
? (isHovered ? '#D9EE7A' : '#C5D86D')
: 'rgba(197,216,109,0.18)';
ctx.fillRect(n.x - 16, n.y - 6, 32, 12);
if (isActive) {
ctx.fillStyle = 'rgba(197,216,109,0.25)';
ctx.fillRect(n.x - 18, n.y + 6, 36, 4); // drip lip
}
// Connector line down to nozzle
ctx.strokeStyle = isActive ? 'rgba(197,216,109,0.4)' : 'rgba(197,216,109,0.1)';
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(n.x, 0);
ctx.lineTo(n.x, n.y - 6);
ctx.stroke();
// Label below
ctx.fillStyle = isActive
? (isHovered ? '#F2EFE6' : 'rgba(242,239,230,0.78)')
: 'rgba(242,239,230,0.35)';
ctx.font = `${mobile ? 8 : 9}px JetBrains Mono, monospace`;
ctx.textAlign = 'center';
const short = streams[i].name.split(' ')[0].replace('·', '');
ctx.fillText(short, n.x, n.y + 26);
ctx.fillStyle = isActive ? '#C5D86D' : 'rgba(197,216,109,0.3)';
ctx.font = `${mobile ? 8 : 9}px JetBrains Mono, monospace`;
ctx.fillText(`+${(streams[i].recover / 1000).toFixed(1)}K`, n.x, n.y + 40);
}
// Particles
const ps = stateRef.current.particles;
for (let p of ps) {
const opacity = Math.min(1, p.life / 80);
ctx.fillStyle = `rgba(197,216,109,${opacity * 0.85})`;
ctx.beginPath();
ctx.arc(p.x, p.y, 1.5, 0, Math.PI * 2);
ctx.fill();
}
// Pool surface ripple line
ctx.strokeStyle = 'rgba(197,216,109,0.6)';
ctx.lineWidth = 1;
ctx.beginPath();
const rippleY = poolY + (80 - fillH);
ctx.moveTo(40, rippleY);
ctx.lineTo(w - 40, rippleY);
ctx.stroke();
};
if (reduced) {
drawFrame(false);
return () => {
obs.disconnect();
canvas.removeEventListener('mousemove', onMove);
canvas.removeEventListener('mouseleave', onLeave);
canvas.removeEventListener('click', onClick);
window.removeEventListener('resize', resize);
};
}
// Animation loop
const tick = () => {
if (!stateRef.current.paused) {
const w = canvas.clientWidth;
const poolY = H - 90;
const now = performance.now();
// Emit one particle per active stream — desktop ~55ms · mobile ~110ms (50% density for 60fps)
if (now - stateRef.current.lastEmit > (mobile ? 110 : 55)) {
stateRef.current.lastEmit = now;
const ns = stateRef.current.nozzles;
for (let i = 0; i < ns.length; i++) {
if (!stateRef.current.active[i]) continue;
stateRef.current.particles.push({
x: ns[i].x + (Math.random() - 0.5) * 4,
y: ns[i].y + 8,
vx: (Math.random() - 0.5) * 0.8,
vy: 1.4 + Math.random() * 0.6,
life: 220,
});
}
}
// Update particles
const survivors = [];
for (let p of stateRef.current.particles) {
p.vy += 0.15;
p.x += p.vx;
p.y += p.vy;
p.life--;
// Drip into pool — slight bounce stop
if (p.y > poolY + (80 - stateRef.current.poolFill) - 2) continue;
if (p.life > 0) survivors.push(p);
}
stateRef.current.particles = survivors;
drawFrame(true);
}
stateRef.current.rafId = requestAnimationFrame(tick);
};
stateRef.current.rafId = requestAnimationFrame(tick);
return () => {
cancelAnimationFrame(stateRef.current.rafId);
obs.disconnect();
canvas.removeEventListener('mousemove', onMove);
canvas.removeEventListener('mouseleave', onLeave);
canvas.removeEventListener('click', onClick);
window.removeEventListener('resize', resize);
};
}, [mobile, streams]);
// Total = sum of active stream values
const totalActive = streams.reduce((sum, s, i) => sum + (activeMap[i] ? s.recover : 0), 0);
const activeCount = activeMap.filter(Boolean).length;
return (
{/* Header strip — top of canvas */}
// {activeCount} STREAM{activeCount === 1 ? '' : 'S'} · LIVE
// click a nozzle to toggle
{/* Total counter — bottom right */}
// EXTRA / MO
+${totalActive.toLocaleString()}
{/* Hover tooltip — bottom left */}
{hoveredIdx >= 0 && (
// {streams[hoveredIdx].name}
+${streams[hoveredIdx].recover.toLocaleString()}/mo
// {activeMap[hoveredIdx] ? 'flowing — click to shut off' : 'shut off — click to restart'}
)}
);
};
// ── DIVIDER · MULTI-INCOME ──────────────────────────────────────
const HomeMultiBanner = ({ mobile }) => {
// Each "string" = a backend system that catches lost revenue
const strings = [
{ name: 'KLAVIYO · LIFECYCLE', recover: 8400, pct: 8.4 },
{ name: 'POST-PURCHASE UPSELL', recover: 5200, pct: 5.2 },
{ name: 'CART-RECOVERY DOWNSELL', recover: 3600, pct: 3.6 },
{ name: 'AI AGENT · CX RECOVERY', recover: 4100, pct: 4.1 },
{ name: 'BROWSE-ABANDONMENT', recover: 2800, pct: 2.8 },
{ name: 'RFM WIN-BACK · 60d', recover: 3200, pct: 3.2 },
{ name: 'SUBSCRIBE-SAVE REPLEN.', recover: 2700, pct: 2.7 },
];
const total = strings.reduce((a, s) => a + s.recover, 0);
return (
{/* Header */}
{DIVIDER.eyebrow || '// AXIOM · 002 · DIVERSIFY OR DIE'}
{DIVIDER.line1 || 'Multiple streams'} {DIVIDER.line1Italic || 'of income'}
{DIVIDER.line2 || 'is'} {DIVIDER.line2Italic || 'how you win.'}
{DIVIDER.body || '// every system catches revenue the next one missed · stacked, they compound'}
{/* ──── REVENUE TOWERS · ONE STREAM vs. SEVEN ──── */}
{/* Shared input rail — same traffic feeds both towers */}
{DIVIDER.inputBarLabel || '// SAME INPUT · SAME STORE · SAME AD SPEND'}
{DIVIDER.inputBarTraffic || '$100,000'}{DIVIDER.inputBarSub || '/MO TRAFFIC'}
{/* ──── INCOME FOUNTAIN · Canvas particle system · interactive ──── */}
{/* Verdict strip — locks the message */}
{DIVIDER.verdictTag || '// VERDICT'}
{DIVIDER.verdictLead || 'One stream is a gamble.'}{' '}
{DIVIDER.verdictItalic || 'Seven stacked is an engine.'}
// ${(strings.reduce((a, s) => a + s.recover, 0) * 12).toLocaleString()}/yr extra
);
};
// ── ENGINE — two pipelines ──────────────────────────────────────
const HomeEngine = ({ mobile }) => (
One Business is Rich.
The other is dry.
// same product · same market · same ad spend · different wiring · different result
{/* Dramatic centerpiece — letters fall in, point to each pipe */}
{/* LEFT — OUR WAY → green/rich */}
// OUR WAY
{Array.from('rich.').map((ch, i) => (
{ch}
))}
→ many tributaries · one home base
{/* CENTER — divider arrows · desktop only (mobile arrows pointed at whitespace) */}
{!mobile && (
{/* curve to rich (down-left) */}
{/* curve to dry (down-right) */}
{/* center divider */}
VS
)}
{/* mobile: tiny VS pip between rich/dry headers */}
{mobile && (
VS
)}
{/* RIGHT — YOUR AGENCY → red/dry */}
// YOUR AGENCY
{Array.from('dry.').map((ch, i) => (
{ch}
))}
→ one pipe · cracked hub · leaking
{/* RICH */}
// HOME_BASE_A · OUR CLIENTS
{[
{ x: 30, y: 30, label: 'PAID ADS' },
{ x: 30, y: 90, label: 'EMAIL · 5 FLOWS' },
{ x: 30, y: 150, label: 'SMS' },
{ x: 30, y: 210, label: 'ORGANIC' },
{ x: 30, y: 270, label: 'REFERRAL' },
{ x: 460, y: 30, label: 'POST-PURCHASE', right: true },
{ x: 460, y: 110, label: 'WIN-BACK', right: true },
{ x: 460, y: 220, label: 'LTV LIFT', right: true },
].map((s, i) => (
{s.label}
))}
HOME BASE
$$$
{[['8', 'sources'], ['5', 'backend flows'], ['+38%', 'LTV']].map(([v, l]) => (
))}
{/* DRY */}
// HOME_BASE_B · MOST AGENCIES
PAID ADS
// only source
{[{ x: 30, y: 30, l: 'EMAIL · ✕' }, { x: 30, y: 90, l: 'SMS · ✕' }, { x: 30, y: 230, l: 'BACKEND · ✕' }, { x: 30, y: 290, l: 'POST-PURCHASE · ✕' }].map((s, i) => (
{s.l}
))}
HOME BASE
$
{[{ x: 290, y: 110 }, { x: 305, y: 160 }, { x: 290, y: 210 }].map((p, i) => (
leak →
))}
{[['1', 'source'], ['0', 'backend flows'], ['−40%', 'LTV']].map(([v, l]) => (
))}
);
// ── EDITORIAL BREAK — holographic $120M counter ───────────────
// Pinterest-derived move: oversized animated counter with holographic shimmer + scan lines.
const EditorialBreak = ({ mobile }) => {
const counterRef = React.useRef(null);
const sectionRef = React.useRef(null);
React.useEffect(() => {
const target = 120000000;
const duration = 2800;
let raf = null;
const easeOutExpo = (t) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t));
const fmt = (n) => '$' + Math.floor(n).toLocaleString('en-US');
const run = () => {
if (!counterRef.current) return;
if (raf) cancelAnimationFrame(raf);
const start = performance.now();
const tick = (now) => {
const p = Math.min((now - start) / duration, 1);
counterRef.current.textContent = fmt(easeOutExpo(p) * target);
if (p < 1) raf = requestAnimationFrame(tick);
else counterRef.current.textContent = fmt(target);
};
raf = requestAnimationFrame(tick);
};
const obs = new IntersectionObserver((entries) => {
entries.forEach((e) => { if (e.isIntersecting && e.intersectionRatio > 0.5) run(); });
}, { threshold: 0.5 });
if (counterRef.current) obs.observe(counterRef.current);
return () => { if (raf) cancelAnimationFrame(raf); obs.disconnect(); };
}, []);
return (
{/* corner terminal labels */}
[ ENGINE_V1 · LIVE ]
● ROOM_01 LIVE_
// REVENUE.SH
// COUNTER.JS · ACTIVE
$0
[
GENERATED FOR OUR CLIENTS
·
$40M IN AD SPEND
·
10 YEARS
]
// REAL REVENUE · REAL BRANDS · REAL RESULTS
);
};
// ── MECHANISM — V12 engine ─────────────────────────────────────
const HomeMechanism = ({ mobile }) => (
12 cylinders.
One engine.
// 12 cylinders firing · revenue at every stroke · v12 power
{/* ENGINE — center on desktop spanning all 3 rows; top spanning both cols on mobile */}
{/* CSS fallback — sits behind the real image so loading state isn't black */}
{/* Real V12 photo — WP Media absolute URL */}
{/* Brand-grade overlay — chartreuse cast + vignette */}
{/* Animated smoke wisps */}
{[80, 180, 280, 380, 500].map((cx, i) => (
{[0, 0.9, 1.8].map(d => (
))}
))}
{/* HUD corner brackets */}
{[
{ top: 8, left: 8, borders: { borderTop: `1px solid ${D4P.accent}`, borderLeft: `1px solid ${D4P.accent}` } },
{ top: 8, right: 8, borders: { borderTop: `1px solid ${D4P.accent}`, borderRight: `1px solid ${D4P.accent}` } },
{ bottom: 8, left: 8, borders: { borderBottom: `1px solid ${D4P.accent}`, borderLeft: `1px solid ${D4P.accent}` } },
{ bottom: 8, right: 8, borders: { borderBottom: `1px solid ${D4P.accent}`, borderRight: `1px solid ${D4P.accent}` } },
].map((c, i) => (
))}
{/* Mono labels */}
+ V12 · ENGINE_v1
RPM 8,400
TORQUE 94%
STATUS · NOMINAL
{/* center reticle */}
{/* firing-order strip */}
// FIRING ORDER · 1-12-5-8-3-10-6-7-2-11-4-9
{/* FOUR FRAMEWORK BOXES · ONE IN EACH CORNER OF THE ENGINE */}
{[
{ n: '01', title: 'WEBSITE · CRO', color: D4P.bone, items: ['Conversion Rate Optimization', 'Landing Pages', 'Trust + Speed'], dCol: 1, dRow: 1, mIdx: 0, align: 'left' },
{ n: '02', title: 'EMAIL · SMS', color: D4P.accent, items: ['Automations', 'Flows', 'Campaigns'], dCol: 3, dRow: 1, mIdx: 1, align: 'right' },
{ n: '03', title: 'UPSELLS · AI', color: D4P.warm, items: ['Post-Purchase Upsells', 'AI Agents', 'AI Workflows'], dCol: 1, dRow: 3, mIdx: 2, align: 'left' },
{ n: '04', title: 'PAID · ORGANIC', color: D4P.cool, items: ['Paid Social', 'Organic Social', 'Content + Ads'], dCol: 3, dRow: 3, mIdx: 3, align: 'right' },
].map(b => (
{/* number + status pip */}
{b.n}
{/* title */}
{b.title}.
{/* 3 framework items */}
{b.items.map((item, i) => (
+
{item}
))}
))}
);
// ── WHO ─────────────────────────────────────────────────────────
const HomeWho = ({ mobile }) => (
The team in
Room_01.
We're not a deck-and-deliver agency. Every operator on this team has built and broken their own businesses. We've been in your seat.
14 yrs $1.5B moved 65k operators
{[
['M.F.', 'Founder · Operator', '8 exits', '$420M moved'],
['A.S.', 'CRO · Backend', '5 flows', '+38% LTV avg'],
['J.R.', 'Media Buyer', '$80M ad spend', '3.4× ROAS'],
['L.K.', 'Systems · AI', '14 stacks', '10× cadence'],
].map(([n, role, m1, m2]) => (
{/* Avatar placeholder */}
))}
);
// ── RECEIPTS ────────────────────────────────────────────────────
const HomeReceipts = ({ mobile }) => (
Numbers,
not adjectives.
{[
{ client: 'Stayfull', cat: 'DTC · Wellness', from: '$1.8K/mo', to: '$100K/mo', mult: '55×', days: '90 days', href: '/en/case-studies/stayfull/' },
{ client: 'Mortero', cat: 'CPG · Beverage', from: '$0/mo', to: '$800K/mo', mult: '∞', days: '70 days', href: '/en/case-studies/mortero/' },
{ client: 'Promoted to Mom', cat: 'Course · Coaching', from: '$8K/mo', to: '$80K/mo', mult: '10×', days: '12 mo', href: '/en/case-studies/promoted-to-mom/' },
].map((c) => (
{ e.currentTarget.style.borderColor = D4P.accent; e.currentTarget.style.transform = 'translateY(-4px)'; }}
onMouseLeave={e => { e.currentTarget.style.borderColor = D4P.hair018; e.currentTarget.style.transform = 'translateY(0)'; }}>
// {c.client.toUpperCase()}
{c.cat}
{c.from}
→
{c.to}
{c.mult}
· {c.days}
./read-case ▸
))}
);
// ── MobileDiffStack · IO-driven side-entry for §6 on mobile ───────
// Alternating left/right translateX(±60%) + opacity 0 → in-view.
// 80ms stagger · 600ms ease-out · respects prefers-reduced-motion.
const MobileDiffStack = ({ blades, usLabel = '// US' }) => {
const wrapRef = React.useRef(null);
React.useEffect(() => {
const el = wrapRef.current;
if (!el) return;
const reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (reduced) { el.classList.add('is-in'); return; }
const io = new IntersectionObserver((entries) => {
entries.forEach((e) => {
if (e.isIntersecting) {
el.classList.add('is-in');
io.disconnect();
}
});
}, { threshold: 0.15, rootMargin: '0px 0px -10% 0px' });
io.observe(el);
return () => io.disconnect();
}, []);
return (
{blades.map((b, i) => {
const fromLeft = (i % 2 === 0);
return (
{b.axis}
{usLabel}
{b.us}
{b.usProof}
);
})}
);
};
// ── DIFF — SCROLL ROLODEX · WHY US → WHY NOT THEM ───────────────
// Each card has ONE rotation axis (X) driven by its own flip value.
// No nested 3D, no transform-style chains fighting backface-visibility.
// Bulletproof in Chrome / Safari / Firefox.
const HomeDiff = ({ mobile }) => {
const sectionRef = React.useRef(null);
const pinRef = React.useRef(null);
const [progress, setProgress] = React.useState(0);
React.useEffect(() => {
if (mobile) return;
const reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (reduced) { setProgress(1.0); return; }
if (!window.gsap || !window.ScrollTrigger) {
// GSAP not loaded yet — fall back to no-op (section will still render statically)
console.warn('[HomeDiff] GSAP/ScrollTrigger not loaded');
return;
}
const gsap = window.gsap;
const ScrollTrigger = window.ScrollTrigger;
gsap.registerPlugin(ScrollTrigger);
const trigger = ScrollTrigger.create({
trigger: sectionRef.current,
start: 'top top',
end: '+=180%', // 180vh of scroll runway — unfurl + brief hold, no flip
pin: pinRef.current, // GSAP transforms the inner stage to keep it fixed
pinSpacing: true,
scrub: 1, // smooth-scrub: 1s catch-up
invalidateOnRefresh: true, // recompute pin offsets when Lenis attaches / fonts settle
onUpdate: (self) => setProgress(self.progress),
// markers: true, // uncomment for dev debug
});
// Defensive refreshes: positions can be wrong if Lenis attaches AFTER this effect,
// or if web fonts / images shift layout after initial mount.
const r1 = setTimeout(() => ScrollTrigger.refresh(), 350);
const r2 = setTimeout(() => ScrollTrigger.refresh(), 1200);
const onLoad = () => ScrollTrigger.refresh();
window.addEventListener('load', onLoad);
return () => {
clearTimeout(r1);
clearTimeout(r2);
window.removeEventListener('load', onLoad);
trigger.kill();
ScrollTrigger.refresh();
};
}, [mobile]);
// Six parallel axes — US verbatim from Manny, THEM verbatim from Manny's comment 7
const blades = [
{ axis: 'SCALE',
us: 'Scale Beyond Your Current Ceiling.',
usProof: 'Predictable growth engineered for scale.',
them: "They've Only Managed $50/Day Ad Accounts.",
themProof: '$50/day campaigns · forever' },
{ axis: 'CONVERSION',
us: 'Turn Traffic Into A Money Machine.',
usProof: 'More conversion. More retention. More profit.',
them: 'They Think Ads Are The Business.',
themProof: 'Spend more · lose more · repeat' },
{ axis: 'PLATEAU',
us: 'Escape The $100K Plateau.',
usProof: 'Systems built for serious growth.',
them: 'They Learn Ecommerce On YouTube.',
themProof: 'Course-watcher · template-collector' },
{ axis: 'BRAND',
us: 'Build A Brand People Obsess Over.',
usProof: 'Authority creates unstoppable demand.',
them: "They've Never Built A Real Brand.",
themProof: 'Logo wall · empty equity' },
{ axis: 'INFRA',
us: 'Scale Without Chaos.',
usProof: 'Real infrastructure behind the growth.',
them: 'They Run On Tabs And Vibes.',
themProof: 'Spreadsheets · prayer · panic' },
{ axis: 'CATEGORY',
us: 'From Growing Brand To Category Leader.',
usProof: 'Built to dominate, not compete.',
them: 'They Chase The Algorithm, Not The Market.',
themProof: 'Trends today · gone tomorrow' },
];
// PHASE MAP across the 180vh scroll
// 0.00–0.70 unfurl · cards fly in from alternating sides, chartreuse only
// 0.70–1.00 hold · full chartreuse stack legible · ambient scan
const unfurl = Math.min(1, progress / 0.70);
// ease-out-quart for entrance, ease-out-back for rotation overshoot
const easeOutQuart = (t) => 1 - Math.pow(1 - t, 4);
const easeOutBack = (t) => { const c1 = 1.70158; const c3 = c1 + 1; return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2); };
return (
{/* Headline — single static WHY US block */}
// 06 · WHY US
The receipts
the room asks for.
{/* Milestone slab — editorial · asymmetric · hero + 2 supporting */}
{/* eyebrow bar */}
// MILESTONE_06 · SINCE 2015
// ME + MY PARTNERS · OPERATORS, NOT CONSULTANTS
{/* asymmetric 3-up — hero $120M+ on the left, supporting stats stacked-equal on the right */}
{/* HERO · $120M+ generated for clients */}
// CLIENT REVENUE
$120M+
generated for clients
{/* live pulse dot */}
{/* SUPPORTING · 10 yrs */}
// TIME IN THE ROOM
10 yrs
in ecom · hands-on
{/* SUPPORTING · $40M+ ad spend */}
// AD SPEND
$40M+
managed across portfolios
{/* Mobile: clean US-only stack with IO-driven side-entry · alternating ±60% translateX · 80ms stagger */}
{mobile && (
)}
{/* Desktop: GSAP ScrollTrigger pin · 400vh scroll runway · scrub 1 */}
{!mobile && (
{/* Ambient layer · subtle continuous motion to fill scroll holds */}
{/* big phase chip — WHY US */}
WHY US
// scroll · {Math.round(progress * 100)}%
// AXES
{String(Math.min(blades.length, Math.ceil(unfurl * blades.length))).padStart(2, '0')} / {String(blades.length).padStart(2, '0')}
{/* Card stack — Z-axis cascade · each card has its own rotateX flip */}
{blades.map((b, i) => {
const total = blades.length;
// SIDE-ENTRY FLOW · cards fly in from alternating sides and converge to center
// each card enters at progress (i * 0.06) and finishes at (0.55 + i * 0.06) within the unfurl phase (0-0.70)
const startProg = i * 0.06;
const endProg = 0.55 + i * 0.06;
const enterRaw = Math.min(1, Math.max(0, (progress - startProg) / Math.max(0.0001, (endProg - startProg))));
const enter = easeOutQuart(enterRaw);
const enterRot = easeOutBack(enterRaw);
// vertical fan — center anchor, even spacing (resting position)
const yRest = (i - (total - 1) / 2) * 110;
// horizontal entry: even-indexed cards from LEFT, odd from RIGHT
const fromLeft = (i % 2 === 0);
const sideSign = fromLeft ? -1 : 1;
const xStart = sideSign * 1200; // far off-stage
const x = xStart * (1 - enter);
// rotateY: -25deg from left, +25deg from right, easing to 0 with overshoot
const ryStart = sideSign * -25;
const rotY = ryStart * (1 - enterRot);
// depth · slight z-stagger so cards feel layered
const z = (i - (total - 1) / 2) * -8;
const scale = 0.88 + 0.12 * enter;
const opacity = enter;
const cardW = 560;
const cardH = 132;
return (
{/* US face (chartreuse) */}
{b.axis} · US
{String(i + 1).padStart(2, '0')} / {String(total).padStart(2, '0')}
{b.us}
{b.usProof}
);
})}
{/* Floor reflection */}
{/* Bottom legend */}
// SIX AXES · WHY US
Six axes. Six receipts. One engine, on the record.
)}
);
};
// ── PROCESS ─────────────────────────────────────────────────────
// 4-layer service stack visualised as a puzzle assembly: stage 0 (raw) → stage 4 (polished)
const HomeProcess = ({ mobile }) => {
// A single stage panel — a stylised storefront card whose fidelity grows left→right.
const StagePanel = ({ stage, mobile }) => {
// border, glow & opacity scale with stage
const isRaw = stage === 0;
const isFinal = stage === 4;
const borderColor =
isRaw ? 'rgba(242,239,230,0.18)' :
isFinal ? D4P.accent :
`rgba(197,216,109,${0.18 + stage * 0.14})`;
const bg =
isRaw ? 'rgba(15,15,17,0.45)' :
stage === 1 ? D4P.surface :
stage === 2 ? D4P.surface :
stage === 3 ? D4P.surface :
D4P.surface;
const glow =
isRaw ? 'none' :
isFinal ? `0 0 0 1px ${D4P.accent}, 0 18px 40px -18px rgba(197,216,109,0.55), 0 0 60px -8px rgba(197,216,109,0.35)` :
`0 ${4 + stage * 4}px ${16 + stage * 6}px -10px rgba(0,0,0,0.55), 0 0 ${20 + stage * 10}px -16px rgba(197,216,109,${0.10 + stage * 0.05})`;
return (
{/* mock browser chrome */}
{isRaw ? 'untitled.store/v0' : isFinal ? 'yourbrand.com' : 'yourbrand.com'}
{/* hero / headline area */}
= 1 ? D4P.bone : 'rgba(242,239,230,0.16)'),
marginBottom: 5,
borderRadius: 1,
}} />
{/* CTA button — appears at stage 1 */}
{stage >= 1 && (
SHOP NOW
)}
{/* heatmap overlay — stage 3+ */}
{stage >= 3 && (
)}
{/* tiny climbing chart — stage 2+ */}
{stage >= 2 && (
= 2 && stage < 4 ? 26 : 30, left: 10, width: 60, height: 14, opacity: 0.85 }}>
)}
{/* upsell chip — stage 3+ */}
{stage >= 3 && (
+UPSELL
)}
{/* backend pills — stage 2+ */}
{stage >= 2 && stage < 4 && (
{['KLAVIYO', 'SMS', 'FLOWS'].map(p => (
{p}
))}
)}
{/* ad campaign badges — stage 4 */}
{stage >= 4 && (
AD CAMPAIGNS
{['M', 'G', 'T'].map(c => (
{c}
))}
)}
{/* stage label */}
STAGE {stage}
);
};
const stageCaptions = ['raw', '+ CRO', '+ backend', '+ apps', '+ ads'];
// ── Puzzle piece path generator ─────────────────────────────
// Returns SVG path d-string for a single piece of size s, with
// each side flagged: +1 = tab (out), -1 = blank (in), 0 = flat edge.
const puzzlePath = (s, top, right, bottom, left) => {
const k = s * 0.18; // knob protrusion
const w = s * 0.18; // half-width of knob neck
const c = s * 0.10; // bezier control offset for round knob
// top edge: left → right
const topEdge = top === 0
? `L ${s} 0`
: `L ${s/2 - w} 0
C ${s/2 - w + c} ${-top * c}, ${s/2 - w - c} ${-top * (k - c)}, ${s/2} ${-top * k}
C ${s/2 + w + c} ${-top * (k - c)}, ${s/2 + w - c} ${-top * c}, ${s/2 + w} 0
L ${s} 0`;
// right edge: top → bottom
const rightEdge = right === 0
? `L ${s} ${s}`
: `L ${s} ${s/2 - w}
C ${s + right * c} ${s/2 - w + c}, ${s + right * (k - c)} ${s/2 - w - c}, ${s + right * k} ${s/2}
C ${s + right * (k - c)} ${s/2 + w + c}, ${s + right * c} ${s/2 + w - c}, ${s} ${s/2 + w}
L ${s} ${s}`;
// bottom edge: right → left
const bottomEdge = bottom === 0
? `L 0 ${s}`
: `L ${s/2 + w} ${s}
C ${s/2 + w - c} ${s + bottom * c}, ${s/2 + w + c} ${s + bottom * (k - c)}, ${s/2} ${s + bottom * k}
C ${s/2 - w - c} ${s + bottom * (k - c)}, ${s/2 - w + c} ${s + bottom * c}, ${s/2 - w} ${s}
L 0 ${s}`;
// left edge: bottom → top
const leftEdge = left === 0
? `Z`
: `L 0 ${s/2 + w}
C ${-left * c} ${s/2 + w - c}, ${-left * (k - c)} ${s/2 + w + c}, ${-left * k} ${s/2}
C ${-left * (k - c)} ${s/2 - w - c}, ${-left * c} ${s/2 - w + c}, 0 ${s/2 - w}
Z`;
return `M 0 0 ${topEdge} ${rightEdge} ${bottomEdge} ${leftEdge}`;
};
// Deterministic tab/blank map for 4x4 grid.
// Each interior edge has one tab, one blank — chosen by parity of (c,r).
// edges[c][r] = { top, right, bottom, left }
const buildEdges = () => {
const grid = [];
for (let c = 0; c < 4; c++) {
grid[c] = [];
for (let r = 0; r < 4; r++) {
// outer edges flat
const top = r === 0 ? 0 : -grid[c][r - 1].bottom; // mirror of above piece's bottom
const left = c === 0 ? 0 : -grid[c - 1][r].right; // mirror of left piece's right
// pick this piece's right & bottom: alternate tab/blank by parity
const right = c === 3 ? 0 : ((c + r) % 2 === 0 ? 1 : -1);
const bottom = r === 3 ? 0 : ((c * 3 + r) % 2 === 0 ? -1 : 1);
grid[c][r] = { top, right, bottom, left };
}
}
return grid;
};
const puzzleEdges = buildEdges();
// Group classification — which quadrant a piece belongs to.
// top-right (A · raw): cols 2-3, rows 0-1
// bottom-right (B · CRO): cols 2-3, rows 2-3
// bottom-left (C · BACKEND): cols 0-1, rows 2-3
// top-left (D · APPS+ADS): cols 0-1, rows 0-1
const groupOf = (c, r) => {
if (c >= 2 && r <= 1) return 'A';
if (c >= 2 && r >= 2) return 'B';
if (c <= 1 && r >= 2) return 'C';
return 'D';
};
const groupStyles = {
A: { stroke: 'rgba(242,239,230,0.32)', strokeDasharray: '3 3', fill: 'rgba(242,239,230,0.08)', label: '', labelColor: 'rgba(242,239,230,0.32)' },
B: { stroke: `${D4P.accent}4D`, strokeDasharray: '0', fill: D4P.surface, label: 'CRO', labelColor: `${D4P.accent}88` },
C: { stroke: `${D4P.accent}80`, strokeDasharray: '0', fill: 'rgba(197,216,109,0.06)', label: 'FLOWS',labelColor: `${D4P.accent}AA` },
D: { stroke: D4P.accent, strokeDasharray: '0', fill: 'rgba(197,216,109,0.12)', label: 'ADS', labelColor: D4P.accent },
};
const groupDelay = { A: 0, B: 220, C: 440, D: 660 };
// Per-piece words. Indexed by [c][r] (4×4). Each piece "says something".
// Quadrant A (top-right c=2-3, r=0-1): raw store failures
// Quadrant B (bottom-right c=2-3, r=2-3): + CRO
// Quadrant C (bottom-left c=0-1, r=2-3): + BACKEND
// Quadrant D (top-left c=0-1, r=0-1): + APPS + ADS
const pieceWords = {
// Quadrant D — top-left
'0-0': 'META', '1-0': 'AI',
'0-1': 'HEATMAPS', '1-1': 'UPSELL',
// Quadrant A — top-right
'2-0': 'BOUNCE', '3-0': 'LEAK',
'2-1': 'CHURN', '3-1': 'STALL',
// Quadrant C — bottom-left
'0-2': 'KLAVIYO', '1-2': 'SMS',
'0-3': 'FLOWS', '1-3': 'EMAIL',
// Quadrant B — bottom-right
'2-2': 'PAGES', '3-2': 'SPEED',
'2-3': 'CHECKOUT', '3-3': 'COPY',
};
// Terminal-log order: A (failures) first → B → C → D (shipped). Matches snap stagger.
const terminalSequence = React.useMemo(() => {
const order = [];
const groupsOrder = ['A', 'B', 'C', 'D'];
groupsOrder.forEach(g => {
for (let c = 0; c < 4; c++) {
for (let r = 0; r < 4; r++) {
if (groupOf(c, r) === g) {
const within = (c % 2) * 60 + (r % 2) * 100;
order.push({
key: `${c}-${r}`,
word: pieceWords[`${c}-${r}`],
group: g,
t: groupDelay[g] + within,
});
}
}
}
});
return order.sort((a, b) => a.t - b.t);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
// IntersectionObserver to trigger snap → connect → morph chain
const puzzleRef = React.useRef(null);
const wrapperRef = React.useRef(null);
const [logCount, setLogCount] = React.useState(0);
React.useEffect(() => {
if (!puzzleRef.current) return;
const node = puzzleRef.current;
const wrap = wrapperRef.current;
const reduced = typeof window !== 'undefined' && window.matchMedia
? window.matchMedia('(prefers-reduced-motion: reduce)').matches
: false;
const timers = [];
const io = new IntersectionObserver((entries) => {
entries.forEach(e => {
if (e.isIntersecting) {
node.classList.add('hp-pz-snap');
if (reduced) {
// Skip the show — go straight to morphed end-state
node.classList.add('is-connected');
node.classList.add('is-morphed');
if (wrap) { wrap.classList.add('is-connected'); wrap.classList.add('is-morphed'); }
setLogCount(terminalSequence.length);
} else {
// Stream terminal log lines as pieces snap in
terminalSequence.forEach((s, i) => {
timers.push(setTimeout(() => setLogCount(i + 1), s.t + 520));
});
// After all pieces have snapped (last delay ≈ 860ms + 620ms transition), connect
const lastSnap = terminalSequence[terminalSequence.length - 1].t + 620;
timers.push(setTimeout(() => {
node.classList.add('is-connected');
if (wrap) wrap.classList.add('is-connected');
}, lastSnap + 200));
// Hold the connected state, then morph into SUCCESS
timers.push(setTimeout(() => {
node.classList.add('is-morphed');
if (wrap) wrap.classList.add('is-morphed');
}, lastSnap + 200 + 1500));
}
io.disconnect();
}
});
}, { threshold: 0.25 });
io.observe(node);
return () => { io.disconnect(); timers.forEach(t => clearTimeout(t)); };
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const layers = [
{
n: '01', title: 'Conversion Rate Optimization',
desc: "Your store has to actually convert. We rebuild what's killing your CVR — page speed, layout, copy, checkout.",
proof: '+1.8% AVG CVR LIFT',
tags: ['pages', 'speed', 'checkout'],
},
{
n: '02', title: 'Backend Systems',
desc: 'Email, SMS, Klaviyo, every automation that pulls revenue out of traffic you already paid for.',
proof: 'BEATS 40% OF AGENCIES',
tags: ['klaviyo', 'sms', 'flows'],
},
{
n: '03', title: 'Apps + Optimization',
desc: 'Upsells, downsells, heat maps, the decision tools that compound every visit.',
proof: '+22% AOV AVG',
tags: ['upsells', 'heatmaps', 'apps'],
},
{
n: '04', title: 'Paid + Organic + AI',
desc: 'Meta, Google, TikTok, organic, and the AI agents that read the data and call the next move.',
proof: '$40M IN AD SPEND TRACKED',
tags: ['meta', 'google', 'tiktok'],
},
];
return (
{/* PART 1 — Header strip */}
// THE 4-LAYER STACK · WHAT WE BUILD INTO YOUR BUSINESS
All areas of the business
maximised and fully functioning.
// raw store → conversion → backend → expansion → demand · the same playbook on every account
{/* PART 1b — Puzzle hero · the visual argument */}
{(() => {
const pieceSize = mobile ? 56 : 80;
const pad = pieceSize * 0.35; // padding for tabs
const gridPx = pieceSize * 4;
const svgSize = gridPx + pad * 2;
return (
{/* radial chartreuse glow */}
{/* overline label */}
// THE 16-PIECE BUSINESS · ASSEMBLED · ALWAYS ASSEMBLING
{/* assembled wrap — puzzle + terminal log share state via .is-connected / .is-morphed */}
{/* puzzle stage */}
{puzzleEdges.map((col, c) =>
col.map((edges, r) => {
const g = groupOf(c, r);
const gs = groupStyles[g];
// stagger inside each group: A=0..200, B=220..420, C=440..640, D=660..860
const within = (c % 2) * 60 + (r % 2) * 100;
const delay = groupDelay[g] + within;
// entrance offset varies by group quadrant
const ox = c >= 2 ? 60 : -60;
const oy = r >= 2 ? 40 : -40;
const or = ((c + r) % 2 === 0) ? 8 : -8;
const d = puzzlePath(pieceSize, edges.top, edges.right, edges.bottom, edges.left);
const word = pieceWords[`${c}-${r}`];
const wordColor = g === 'D' ? D4P.accent : D4P.bone;
return (
{word}
);
})
)}
{/* SUCCESS overlay — fades in over the morphed puzzle */}
SUCCESS
{/* Terminal log — desktop only, streams as pieces snap */}
{!mobile && (
// system.log
{terminalSequence.map((s, i) => {
const shipped = s.group === 'D';
const on = i < logCount;
return (
[OK]
{s.word}
{shipped
? {'✓'} shipped
: {'✗'} resolved }
);
})}
SYSTEM ASSEMBLED.
SUCCESS.
)}
{/* loose floating pieces — still being assembled */}
);
})()}
{/* PART 1c — The argument */}
// THE ARGUMENT
The only way to win is to{' '}
build a real business.
// not a campaign. not a hack. not one channel. the whole machine.
{/* PART 2b — 4 layer cards · 2-col zig-zag */}
{layers.map((l, i) => {
const isOdd = i % 2 === 0; // i=0 (01) odd row → copy left, visual right
const copyEl = (
{l.n}
// LAYER {l.n}
{l.title}
{l.desc}
● {l.proof}
{l.tags.map(t => (
{t}
))}
);
// Visual per layer
let visualEl = null;
if (i === 0) {
// 01 CRO — 3 stat tiles with sparklines, staggered
const tiles = [
{ v: '+1.8%', l: 'AVG CVR', off: 0, pts: '0,18 12,15 24,16 36,11 48,9 60,5 64,3' },
{ v: '−47%', l: 'BOUNCE', off: 12, pts: '0,4 12,7 24,6 36,11 48,14 60,18 64,20' },
{ v: '+22s', l: 'TIME ON PAGE', off: 0, pts: '0,18 12,16 24,12 36,11 48,7 60,4 64,2' },
];
visualEl = (
{tiles.map((t, ti) => (
{t.v}
{t.l}
{!mobile && (
)}
))}
);
} else if (i === 1) {
// 02 Backend — 3 horizontal pill nodes with traveling dots
const nodes = ['KLAVIYO', 'SMS', 'AUTOMATIONS'];
visualEl = (
{nodes.map((n, ni) => (
{n}
{ni < nodes.length - 1 && (
)}
))}
);
} else if (i === 2) {
// 03 Apps — 3x3 mini grid, 3 activated
const labels = ['', '', '', 'HOTJAR', '', 'REBUY', '', 'KLAVIYO\nREVIEWS', ''];
const active = new Set([3, 5, 7]);
visualEl = (
{labels.map((label, gi) => {
const on = active.has(gi);
return (
{label}
);
})}
);
} else {
// 04 Paid+AI — radial spoke graphic
const outer = [
{ l: 'META', x: 200, y: 30 },
{ l: 'GOOGLE', x: 290, y: 110 },
{ l: 'TIKTOK', x: 200, y: 190 },
{ l: 'ORGANIC',x: 110, y: 110 },
];
visualEl = (
{/* spoke lines */}
{outer.map(o => (
))}
{/* outer nodes */}
{outer.map(o => (
{o.l}
))}
{/* center rotating ring */}
STRATEGY
ENGINE
);
}
return (
{isOdd ? (
<>
{copyEl}
{visualEl}
>
) : (
<>
{visualEl}
{copyEl}
>
)}
);
})}
{/* PART 3 — Bottom summary */}
// you don't have to hire 4 agencies. you hire one.
From raw store to running operation — in one pass.
);
};
// ── AI OPERATION CENTER ─────────────────────────────────────────
// Command-center layout · 8 specialist agents flanking a pulsing core
const HomeAIControl = ({ mobile }) => {
const agentsLeft = [
{ id: '01', name: 'Store Builder', task: 'Deploys Shopify stores, product pages, landing pages, and bundles.' },
{ id: '02', name: 'Creative Engine', task: 'Generates ads, copy, UGC scripts, hooks, angles, and branded creatives.' },
{ id: '03', name: 'Ad Operator', task: 'Launches Meta and TikTok campaigns, scales winners, pauses losers.' },
{ id: '04', name: 'Revenue Optimizer', task: 'Improves AOV with upsells, bundles, post purchase offers, and pricing tests.' },
];
const agentsRight = [
{ id: '05', name: 'Retention System', task: 'Creates email, SMS, cart recovery, winback, churn, and loyalty flows.' },
{ id: '06', name: 'Profit Analyst', task: 'Tracks MER, ROAS, CAC, LTV, contribution margin, and daily profit.' },
{ id: '07', name: 'Product Forecaster', task: 'Predicts best selling SKUs, inventory shortages, and products to push harder.' },
{ id: '08', name: 'Market Scanner', task: 'Analyzes competitors, trends, creators, reviews, and customer insights.' },
];
const bottomBoxes = [
{ title: 'Build faster.', body: 'Launch stores, product pages, landing pages, offers, bundles, campaigns, emails, and SMS without waiting on a slow team.' },
{ title: 'Spend smarter.', body: 'Detect losing ads before they waste budget, scale winning campaigns automatically, and monitor the numbers that actually matter.' },
{ title: 'Operate sharper.', body: 'Get daily executive reports, growth action plans, product insights, customer trends, and inventory forecasts without digging through dashboards.' },
];
const renderAgent = (a, i, side) => (
AGENT {a.id}
Active
{a.name}
{a.task}
);
return (
{/* TOP · centered hero · eyebrow + headline + subhead + CTA */}
// Scale Up Marketing AI Growth Infrastructure
We deploy real AI agents for you —and let you keep them.
Custom AI systems for your store, ads, creatives, email, SMS, reporting, and customer data — built once, yours forever. A full team that gets sharper every day.
Book a Call ▸
{/* GRID · 4 left agents · center panel · 4 right agents */}
{agentsLeft.map((a, i) => renderAgent(a, i, 'left'))}
// COMMAND CENTER LIVE
8 OPERATORS ONLINE
One command center for growth.
Your store, ads, email, SMS, creators, reporting, products, and customer behavior connected into one intelligent system that knows what to build, what to test, what to scale, and what to kill.
ROAS Monitoring
MER Live
CAC Control
{agentsRight.map((a, i) => renderAgent(a, i, 'right'))}
{/* STAT STRIP */}
Connected Sources
Shopify · Meta · Klaviyo · TikTok
{/* BOTTOM · 3 outcome boxes */}
{bottomBoxes.map((b, i) => (
))}
{/* FINAL CTA */}
);
};
// ── CALENDAR ────────────────────────────────────────────────────
const HomeCalendar = ({ mobile }) => {
// §10 ROOM_01 · Calendly automation booking
return (
Reserve
your meeting.
// we map your engine on the wall
30 minutes. Operator on the call. We diagnose, we reframe, we map your engine on the wall, then we tell you yes or no.
{[['00:00 — 07:30', 'Diagnose'], ['07:30 — 17:00', 'Reframe'], ['17:00 — 25:00', 'Map'], ['25:00 — 30:00', 'Hire / no-hire']].map(([t, p]) => (
{t}
{p}.
))}
{/* GHL · live calendar iframe */}
);
};
// ── CTA · v5 kinetic mask reveal ────────────────────────────────
// Words enter via clip-mask + Y-translate, line-by-line. Triggered once on
// viewport entry. Reduced-motion fallback: full-opacity static.
const HomeCTA = ({ mobile }) => {
const ref = React.useRef(null);
const [played, setPlayed] = React.useState(false);
React.useEffect(() => {
const el = ref.current;
if (!el) return;
const reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (reduced) { setPlayed(true); return; }
const obs = new IntersectionObserver(([e]) => {
if (e.isIntersecting) { setPlayed(true); obs.disconnect(); }
}, { threshold: 0.35 });
obs.observe(el);
return () => obs.disconnect();
}, []);
return (
// END · ROOM_01 THE LAST PAGE BEFORE THE CALL
Stop settling.
Start excelling.
// 30 minutes. One operator. We diagnose your engine, then we tell you yes or no.
);
};
window.HomePage = HomePage;