/* global React */ const { useState: alUseState, useRef: alUseRef, useEffect: alUseEffect } = React; /* ---------- SPOTLIGHT MANIFESTO ---------- */ /* A dark slab where the cursor is a flashlight revealing hidden copy. */ function Spotlight() { const ref = alUseRef(null); const [pos, setPos] = alUseState({ x: -1000, y: -1000, has: false }); alUseEffect(() => { const el = ref.current; if (!el) return; const onMove = (e) => { const r = el.getBoundingClientRect(); setPos({ x: e.clientX - r.left, y: e.clientY - r.top, has: true }); }; const onLeave = () => setPos((p) => ({ ...p, has: false })); const onTouch = (e) => { const t = e.touches[0] || e.changedTouches[0]; if (!t) return; const r = el.getBoundingClientRect(); setPos({ x: t.clientX - r.left, y: t.clientY - r.top, has: true }); }; el.addEventListener("mousemove", onMove); el.addEventListener("mouseleave", onLeave); el.addEventListener("touchstart", onTouch); el.addEventListener("touchmove", onTouch); return () => { el.removeEventListener("mousemove", onMove); el.removeEventListener("mouseleave", onLeave); el.removeEventListener("touchstart", onTouch); el.removeEventListener("touchmove", onTouch); }; }, []); const maskStyle = pos.has ? { WebkitMaskImage: `radial-gradient(circle 240px at ${pos.x}px ${pos.y}px, #000 0%, #000 30%, transparent 75%)`, maskImage: `radial-gradient(circle 240px at ${pos.x}px ${pos.y}px, #000 0%, #000 30%, transparent 75%)` } : { WebkitMaskImage: "radial-gradient(circle 0px at 50% 50%, #000 0%, transparent 75%)", maskImage: "radial-gradient(circle 0px at 50% 50%, #000 0%, transparent 75%)" }; return (
{/* hidden layer — only visible where the cursor is */}

The things most studios won't tell you.

You'll see two options. Always. The safe one and the loud one. We'll lobby for the loud one.

We will roast your old website. Kindly. In writing. With timestamps.

We won't take projects where the answer is already in the brief. That's not design — that's typing.

Half our work never ships. Some ideas die for a reason. We're okay with that.

We answer our own emails. There is no junior intern with your strategy deck.

If we say yes, you are the only client on our table that month. We work in seasons, not sprints.

↳ keep moving the light — the studio
{/* the ghost layer underneath — what you see when not pointing */}
Move your cursor · reveal

The things
most studios
won't tell you.

↳ point the light. read what we whisper.

{/* the cursor halo */} {pos.has && (
)}
); } /* ---------- STUDIO PULSE — live floating status pill ---------- */ function StudioPulse() { const slides = [ (time) => <> Live in BLR · {time} IST, () => <> Now playing · Sade — Smooth Operator, () => <> This week · Shipping a brand for a Mumbai fintech, () => <> Studio temp · 28°C · the AC is losing, () => <> Open slots · 2 left for Q3 2026, () => <> Currently sketching · over too much filter coffee, ]; const [i, setI] = alUseState(0); const [now, setNow] = alUseState(""); const [open, setOpen] = alUseState(true); alUseEffect(() => { const fmt = () => { const d = new Date(); const blrOffsetMs = 5.5 * 60 * 60 * 1000; const local = new Date(d.getTime() + (d.getTimezoneOffset() * 60000) + blrOffsetMs); const hh = String(local.getHours()).padStart(2, "0"); const mm = String(local.getMinutes()).padStart(2, "0"); const ss = String(local.getSeconds()).padStart(2, "0"); setNow(`${hh}:${mm}:${ss}`); }; fmt(); const t = setInterval(fmt, 1000); return () => clearInterval(t); }, []); alUseEffect(() => { const id = setInterval(() => setI((x) => (x + 1) % slides.length), 3800); return () => clearInterval(id); }, []); if (!open) { return ( ); } return (
REC
{slides.map((build, idx) => (
{build(now)}
))}
); } Object.assign(window, { Spotlight, StudioPulse });