// ===== Main sections: Nav, Hero, Ticker, Services, Clients, About, Contact, Footer ===== const { useState: useS, useEffect: useE, useRef: useR } = React; function Nav() { const [open, setOpen] = useS(false); const [megaOpen, setMegaOpen] = useS(false); const closeTimer = useR(null); const data = window.CTRLZ_SERVICES || []; const close = () => { setOpen(false); setMegaOpen(false); }; const onEnter = () => { clearTimeout(closeTimer.current); setMegaOpen(true); }; const onLeave = () => { closeTimer.current = setTimeout(() => setMegaOpen(false), 180); }; return ( ); } function Hero({ tweaks }) { const headlines = [ { a: "copy", b: "paste.", c: "undo." }, { a: "same-same,", b: "forever.", c: "undo." }, { a: "another", b: "template.", c: "undo." }, ]; const [hIdx, setHIdx] = useS(tweaks.hero || 0); useE(() => setHIdx(tweaks.hero || 0), [tweaks.hero]); const h = headlines[hIdx % headlines.length]; const [pressed, setPressed] = useS(false); const [zap, setZap] = useS(0); const pressKeys = () => { setPressed(true); setZap(z => z + 1); setTimeout(() => setPressed(false), 280); // cycle hero headline on click for extra fun setHIdx(i => (i + 1) % headlines.length); }; return (
Creative & digital studio · est. 2021

{h.a} {" "} {h.b}
{h.c}

In a world of copy & paste, we're the undo button. A creative & digital marketing studio that builds brands worth remembering — and campaigns that actually move numbers.

Influencer Performance Web CRM Photo & Video
See the services → Start a project →
); } function Ticker() { const items = ["REWRITE THE BRIEF", "UNDO THE BORING", "REDO THE RESULTS", "UNSEND THE MEDIOCRE", "RETRY WITH FEELING"]; const row = ( {items.map((t, i) => ( {t} ))} ); return ( ); } function Services() { const data = window.CTRLZ_SERVICES; const [open, setOpen] = useS("influencer"); return (
Ch. 02 — What we do

Five things.{" "} Done properly.

No bolted-on specialties, no "we also do". Just five disciplines we've been quietly winning at — and they work even better together.

{data.map((s) => { const isOpen = open === s.key; return (
setOpen(isOpen ? null : s.key)} data-interactive >
{s.num}
{s.name}
{s.tagline}
+
); })}
Full services breakdown → or keep scrolling — we've got receipts.
); } function Clients() { const clients = [ "BABALAS RESCUE", "VITALITY IV", "ROOIBAARD", "BUFFELSFONTEIN", "VITA UP", "CIT MOTO", "AUTOMOBILE ASSOCIATION OF SA", "TRIPLE E TRAINING", ]; return (
Ch. 03 — In good company

A few of the brands we've rewritten.

{clients.map((c, i) => (
{String(i + 1).padStart(2, '0')} {c}
))}

Proudly in good company — and making room for the next one.

); } function About() { return (
Ch. 04 — The studio

We're a small team of fixers,{" "} strategists, and people who get{" "} strangely obsessed with analytics dashboards.

+312%
Avg. ROAS lift
47
Brands rebuilt
11
Humans in the studio
0
Templates used, ever

Ctrl Z started because we got tired of watching good brands make forgettable work. Another "vibrant community". Another "synergy-driven solution". Another founder wondering why the agency invoice is so long and the results so short.

So we built a studio for the part that's missing — the undo. We fix the brief before it breaks the brand. We run media like operators, not spectators. We ship sites that don't need a CEO apology email.

If you're brave enough to press the button, we're here to help.

); } function Contact() { const services = ["Influencer", "Performance", "Web", "CRM", "Photo/Video"]; const [picks, setPicks] = useS(["Web"]); const [sent, setSent] = useS(false); const toggle = (s) => { setPicks(p => p.includes(s) ? p.filter(x => x !== s) : [...p, s]); }; return (
Ch. 05 — Say hi

Let's press the undo button.

{ e.preventDefault(); setSent(true); setTimeout(() => setSent(false), 3500); }}>
{services.map(s => ( ))}