// home.jsx — Home page. The cinematic centerpiece.
// ─── Real brand logos — full color, recognizable ──────────────────────────
const TOOL_ICONS = {
meta:
,
google:
,
whatsapp:
,
instagram:
,
youtube:
,
pinterest:
,
hubspot:
,
klaviyo:
,
chatgpt:
,
zapier:
,
n8n:
,
slack:
,
notion:
,
make:
,
claude:
,
openai:
,
perplexity:
,
airtable:
,
gsheets:
,
shopify:
};
// Pick which tools appear in the orbit (and on which ring)
const ORBIT_INNER = ["meta", "google", "whatsapp", "instagram", "youtube", "pinterest"];
const ORBIT_OUTER = ["hubspot", "klaviyo", "chatgpt", "zapier", "n8n", "slack", "notion", "shopify"];
// ─── Constellation tools — exactly matching the user's reference image
const CHIP_INNER = [
{ key: "n8n", label: "n8n" },
{ key: "zapier", label: "Zapier" },
{ key: "notion", label: "Notion" },
{ key: "perplexity", label: "Perplexity" }];
const CHIP_OUTER = [
{ key: "slack", label: "Slack" },
{ key: "gsheets", label: "Google Sheets" },
{ key: "airtable", label: "Airtable" },
{ key: "openai", label: "OpenAI" },
{ key: "claude", label: "Claude" },
{ key: "make", label: "Make" }];
function SystemDiagram() {
const innerR = 150;
const outerR = 248;
const size = 640;
const c = size / 2;
// Single low-rate counter — no per-frame React re-renders.
const [count, setCount] = useState(0);
useEffect(() => {
const id = setInterval(() => setCount((n) => n + Math.floor(2 + Math.random() * 6)), 380);
return () => clearInterval(id);
}, []);
// Beam targets — six fixed positions on the inner ring
const beams = useMemo(() =>
Array.from({ length: 6 }).map((_, i) => {
const a = i / 6 * Math.PI * 2;
return { x: c + Math.cos(a) * innerR, y: c + Math.sin(a) * innerR, i };
}),
[]);
return (
{/* Hub glow */}
{/* Orbit rings (concentric, circular) */}
{/* Status satellites traveling along each ring — pure SMIL */}
{Array.from({ length: 3 }).map((_, i) =>
)}
{Array.from({ length: 4 }).map((_, i) =>
)}
{/* Beams from hub to six positions on the inner ring */}
{beams.map(({ x, y, i }) =>
)}
{/* Inner orbit — rotating group, items counter-rotate to stay upright */}
{ORBIT_INNER.map((key, i) => {
const a = i / ORBIT_INNER.length * Math.PI * 2;
const x = c + Math.cos(a) * innerR;
const y = c + Math.sin(a) * innerR;
return (
{TOOL_ICONS[key]}
);
})}
{/* Outer orbit — counter-rotation */}
{ORBIT_OUTER.map((key, i) => {
const a = i / ORBIT_OUTER.length * Math.PI * 2 + Math.PI / 8;
const x = c + Math.cos(a) * outerR;
const y = c + Math.sin(a) * outerR;
return (
{TOOL_ICONS[key]}
);
})}
{/* Central hub — large, dramatic, holographic */}
DJ-OS · v4
AI Agents
● ACTIVE
{/* Corner telemetry */}
SYS · 05.2026
● LIVE
14 · INTEGRATIONS
EVT · {String(count).padStart(6, "0")}
LAT · 12ms
UPTIME · 99.98%
{[...ORBIT_INNER, ...ORBIT_OUTER, ...ORBIT_INNER].map((k, i) =>
{k.charAt(0).toUpperCase() + k.slice(1)}
)}
);
}
// ─── Hero variants ─────────────────────────────────────────────────────────
// Page-wide ambient background — aurora mesh + cursor spotlight + drifting dust.
// Designed to feel like a premium AI / SaaS landing page; stays subtle so
// content reads cleanly.
function HomeBackground() {
const spotRef = useRef(null);
useEffect(() => {
let raf = 0, tx = 50, ty = 30, x = 50, y = 30;
const onMove = (e) => {
tx = (e.clientX / window.innerWidth) * 100;
ty = (e.clientY / window.innerHeight) * 100;
};
const loop = () => {
x += (tx - x) * 0.08;
y += (ty - y) * 0.08;
if (spotRef.current) {
spotRef.current.style.setProperty("--mx", x + "%");
spotRef.current.style.setProperty("--my", y + "%");
}
raf = requestAnimationFrame(loop);
};
raf = requestAnimationFrame(loop);
window.addEventListener("pointermove", onMove);
return () => { cancelAnimationFrame(raf); window.removeEventListener("pointermove", onMove); };
}, []);
// Fixed-seed dust particles (no per-frame React work)
const dust = useMemo(() =>
Array.from({ length: 28 }).map((_, i) => ({
key: i,
x: (i * 13 + 7) % 100,
y: (i * 17 + 23) % 100,
d: 18 + ((i * 7) % 18),
delay: -(i * 1.3) % 18,
size: 1 + ((i * 3) % 3),
o: 0.4 + ((i * 11) % 5) / 10,
})), []);
return (
);
}
// Ambient AI background — animated grid + drifting orbs + rising particles
function HeroFX() {
// Fixed seeds so SSR-equivalent first render matches; no per-frame React work.
const particles = useMemo(() =>
Array.from({ length: 14 }).map((_, i) => ({
key: i,
left: `${(i * 7.3 + 3) % 100}%`,
dur: 9 + i * 3 % 10,
delay: i * 1.7 % 12,
size: 2 + i * 5 % 4
})), []);
return (
);
}
// Headline passthrough — no animation wrapper, just renders children.
function AnimatedHeadline({ children }) {
return {children} ;
}
// Floating AI status chips around the hero — premium SaaS feel
function HeroFloaters() {
const items = [
{ x: "8%", y: "12%", label: "voice.agent", status: "Live · 12 calls", dur: 7 },
{ x: "82%", y: "20%", label: "lead.gen", status: "+4 qualified", dur: 9 },
{ x: "6%", y: "62%", label: "whatsapp.auto", status: "Broadcast · 1,240", dur: 11 },
{ x: "84%", y: "70%", label: "ai.seo", status: "AI Overview · pos. 1", dur: 8 },
];
return (
{items.map((it, i) => (
{it.label}
{it.status}
))}
);
}
// Animated violet dot-wave field — waving grid of dots behind the hero
function HeroDotWave() {
const cols = 36, rows = 12;
const cellW = 100 / cols; // % units
const cellH = 100 / rows;
return (
{Array.from({ length: rows }).map((_, r) =>
Array.from({ length: cols }).map((_, c) => {
const x = (c + 0.5) * (1440 / cols);
const y = (r + 0.5) * (480 / rows);
// Sinusoidal wave per-column gives a rolling "wave" look
const phase = (c / cols + r / rows) * 6.28;
const delay = ((c * 0.08) + (r * 0.12)) % 4;
const dotOpacity = 0.18 + (1 - r / rows) * 0.35;
return (
);
})
)}
);
}
function HeroCentered() {
return (
Now taking 3 new partners for Q3 2026
Digital Jaao · Jaipur, India
AI-powered growth systems
for modern brands.
We design and operate the engine — AI agents, automation, performance media, and content — that turns your brand into a compounding revenue system.
Book a 1-on-1 consult
See case studies →
);
}
function HeroSplit() {
return (
Now taking 3 new partners for Q3 2026
Digital Jaao · Jaipur, India
AI-powered growth systemsfor modern brands.
We design and operate the engine — AI agents, automation, performance media, content — that turns your brand into a compounding revenue system.
Book a 1-on-1
See case studies →
);
}
function HeroMarquee() {
return (
AI-powered growth systems
We design and operate the engine — AI agents, automation, performance media, and content — that turns your brand into a compounding revenue system.
Book a 1-on-1 consult
See case studies →
);
}
// ─── Trust strip ──────────────────────────────────────────────────────────
function TrustStrip() {
return (
Trusted by 240+ brands across 20 niches
);
}
// ─── Stats bar ────────────────────────────────────────────────────────────
function StatsBar() {
return (
{dj.stats.map((s, i) =>
{s.label}
)}
);
}
// ─── Services preview ────────────────────────────────────────────────────
function ServicesPreview() {
return (
One team. Four systems. All operated like a product.}
intro="Most agencies sell hours. We ship engines — AI agents, automation, performance media, and content — designed to compound revenue over quarters, not days." />
{dj.serviceGroups.map((g, i) =>
0{i + 1}
→
{g.label}
{g.tagline}
{g.items.slice(0, 4).map((it) =>
{it.name}
)}
{g.items.length > 4 && + {g.items.length - 4} more }
)}
);
}
// ─── Featured case studies ────────────────────────────────────────────────
function FeaturedCases() {
const featured = dj.caseStudies.slice(0, 3);
return (
Real systems. Real numbers. }
intro="A small selection of recent work. Click any to read the full story." />
{featured.map((c, i) =>
{c.niche}{c.region ? ` · ${c.region}` : ""}
{c.logo ?
:
{c.brand.split(" ").map((w) => w[0]).join("")}
}
{c.brand}
{c.goal}
{c.stats.map((s) =>
{s.v}
{s.k}
)}
Read the case study →
)}
See all case studies
);
}
// ─── Process ──────────────────────────────────────────────────────────────
function ProcessSection() {
return (
A method that compounds. }
intro="Every engagement runs the same four-stage rhythm. Predictable, transparent, measurable." />
{dj.process.map((p, i) =>
)}
);
}
// ─── Client reels ────────────────────────────────────────────────────────
function ClientReels() {
return (
Hear it from the founders. }
intro="Short, honest videos from clients we've worked with across India and beyond." />
{[0, 1, 2, 3].map((i) => {
const t = dj.testimonials[i];
return (
▶
"{t.quote.slice(0, 72)}{t.quote.length > 72 ? "…" : ""}"
{t.who}
);
})}
All client feedback
);
}
// ─── Certifications ──────────────────────────────────────────────────────
function CertStrip() {
return (
Certified & partnered
{dj.certifications.map((c) =>
{c}
)}
);
}
// ─── FAQ ─────────────────────────────────────────────────────────────────
function FAQSection() {
const [open, setOpen] = useState(0);
return (
The things you'll probably ask. } />
{dj.faq.map((f, i) =>
setOpen(open === i ? -1 : i)}>
{f.q}
{open === i ? "−" : "+"}
)}
);
}
// ─── Bento portfolio (editorial mixed-size grid) ───────────────────────────
function BentoPortfolio() {
const items = dj.portfolio.slice(0, 8);
const pattern = ["w", "s", "s", "t", "s", "w", "s", "s"];
return (
(0{Math.min(items.length, 9)}) selected work
A few projects we're proud of.
View portfolio
{items.map((p, i) => {
const span = pattern[i] || "s";
const target = p.caseId ? `case/${p.caseId}` : "portfolio";
const inner =
{p.logo ?
:
{p.brand.split(" ").map((w) => w[0]).slice(0, 2).join("")}
}
{p.niche}{p.tag ? " · " + p.tag.split("·")[0].trim() : ""}
{p.brand}
;
return (
{inner}
);
})}
);
}
// ─── Page ────────────────────────────────────────────────────────────────
function HomePage({ heroVariant = "centered" }) {
const Hero = heroVariant === "split" ? HeroSplit : heroVariant === "marquee" ? HeroMarquee : HeroCentered;
return (
);
}
Object.assign(window, { HomePage, BentoPortfolio });