// (Reveal + TiltCard + Footer live in shell.jsx) // ═══════════════════════════════════════════════════════════════ // HIGHLIGHTS — bento grid of why-Digitacurve // ═══════════════════════════════════════════════════════════════ function Highlights({ accent }) { return (
Highlights

A studio built for the second decade of the internet.

We pair strategy with craft — brand systems, growth engines and digital products, shipped by a tight team that gives a damn.

{/* Bento */}
); } function BentoCard({ title, sub, children, big, accent }) { return (

{title}

{sub}

{children}
); } function Counters({ accent }) { const stats = [ { n: "+183%", l: "Avg. growth YoY" }, { n: "8.4x", l: "ROAS, paid social" }, { n: "142", l: "Brands shipped" }, { n: "4.96", l: "Studio rating" } ]; return (
{stats.map(s => (
{s.n}
{s.l}
))}
); } function ShippingRing({ accent }) { return (
4.2d
avg. ship cycle
); } function SeniorVisual() { const people = [ { i: "MR", c1: "#7e5cff", c2: "#43e8ff" }, { i: "JK", c1: "#ff6b9d", c2: "#ffd66e" }, { i: "AT", c1: "#b5fd5b", c2: "#46e0a3" }, { i: "SP", c1: "#ff8a5c", c2: "#ff5cc8" }, { i: "LD", c1: "#6ee7ff", c2: "#a78bfa" } ]; return (
{people.map((p,i) => (
{p.i}
))}
+9
); } function PriceVisual() { return (
Brand sprint$24k
Site, full build$48k
Growth retainer$12k/mo
); } function TimezoneVisual({ accent }) { const cities = [ { c: "SYD", t: "14:22" }, { c: "BLR", t: "09:52" }, { c: "NYC", t: "23:22" } ]; return (
{cities.map(c => (
{c.c}
{c.t}
))}
); } // ═══════════════════════════════════════════════════════════════ // SERVICES (amenities mapped) // ═══════════════════════════════════════════════════════════════ function Services({ accent }) { const items = [ { icon: , title: "Brand identity", blurb: "Strategy, naming, visual systems, voice — the foundations that make every other dollar work harder.", bullets: ["Positioning & narrative", "Logo & wordmark", "Type system & motion", "Brand guidelines"] }, { icon: , title: "Digital product", blurb: "Marketing sites, e-commerce and tooling, designed and engineered in the same room.", bullets: ["Webflow & Next.js", "Headless commerce", "Design systems", "CMS & integrations"] }, { icon: , title: "Growth marketing", blurb: "Paid, SEO, lifecycle and content — operated as one system, measured against revenue.", bullets: ["Paid social & search", "SEO & content engines", "Lifecycle / CRM", "Analytics & attribution"] }, { icon: , title: "Content & film", blurb: "Editorial, photography, motion design and 3D — production in-house, on-brand, on-time.", bullets: ["Brand films & ads", "Photography & CGI", "Editorial & social", "Motion / 3D"] }, { icon: , title: "Engineering", blurb: "Modern stacks for fast, accessible, search-friendly sites and lightweight web apps.", bullets: ["Next.js & TypeScript", "Performance & SEO", "Shopify & Sanity", "AI integrations"] }, { icon: , title: "AI workflows", blurb: "Practical AI — for content, ops, support and personalisation. Less theatre, more leverage.", bullets: ["Content automations", "Chat & search", "RAG & private models", "Custom internal tools"] }, ]; return (
Capabilities

Six teams. One integrated studio that ships end to end.

{items.map((it, i) => (
{it.icon}
0{i+1}

{it.title}

    {it.bullets.map(b => (
  • {b}
  • ))}
))}
); } // ═══════════════════════════════════════════════════════════════ // GALLERY — selected work, 3D tilt cards // ═══════════════════════════════════════════════════════════════ function Gallery({ accent }) { const [filter, setFilter] = useState("All"); const filters = ["All", "Brand", "Site", "Campaign", "Product"]; const projects = [ { tag: "Brand", name: "Halocene", sub: "Audio hardware rebrand", year: "2026", color: "#FF7A4D", color2: "#C13B3B", shape: "wave" }, { tag: "Site", name: "MeinHaus", sub: "Service-provider directory", year: "2025", color: "#3E60FF", color2: "#7B57FF", shape: "stack" }, { tag: "Campaign", name: "Wikistrings", sub: "Guitar-string review platform", year: "2025", color: "#1F1F1F", color2: "#3a3a3a", shape: "type" }, { tag: "Product", name: "AMPS", sub: "Entrepreneurship education", year: "2024", color: "#B5FD5B", color2: "#46E0A3", shape: "grid" }, { tag: "Brand", name: "Northvane", sub: "Boutique architecture firm", year: "2024", color: "#0F1417", color2: "#243038", shape: "orb" }, { tag: "Campaign", name: "Verdant Co.", sub: "DTC skincare launch", year: "2023", color: "#E7DCC2", color2: "#A28D62", shape: "leaf" } ]; const visible = filter === "All" ? projects : projects.filter(p => p.tag === filter); return ( ); } function ProjectCard({ p, accent }) { return ( {/* gradient overlay */}
{/* meta */}
{p.tag} {p.year}

{p.name}

{p.sub}

); } function ProjectArt({ p }) { // Custom abstract artwork per project const bg = `linear-gradient(135deg, ${p.color} 0%, ${p.color2} 100%)`; if (p.shape === "wave") return (
{Array.from({ length: 14 }).map((_, i) => ( ))}
); if (p.shape === "stack") return (
{Array.from({ length: 5 }).map((_, i) => (
))}
); if (p.shape === "type") return (
W
tone of voice
); if (p.shape === "grid") return (
AMPS.
); if (p.shape === "orb") return (
); // leaf return (
{Array.from({ length: 18 }).map((_, i) => { const cx = (i * 51) % 400, cy = (i * 73) % 300; return ; })}
); } // ═══════════════════════════════════════════════════════════════ // PROCESS // ═══════════════════════════════════════════════════════════════ function Process({ accent }) { const steps = [ { n: "01", t: "Listen", d: "We start with a long, honest conversation. Goals, constraints, the awkward stuff. One week, no slides." }, { n: "02", t: "Shape", d: "Strategy, brand and product directions on paper. Two routes, real options, no design-by-committee." }, { n: "03", t: "Build", d: "Design and engineering in parallel sprints. Weekly Friday demos. You see the work as it grows." }, { n: "04", t: "Compound", d: "Ship, measure, iterate. Growth retainers turn launch energy into a long arc of progress." } ]; return (
How we work

Four steps, sized for the real world.

{/* line */}
{steps.map((s, i) => (
{s.n}

{s.t}

{s.d}

))}
); } // ═══════════════════════════════════════════════════════════════ // LOCATION — Global studio map // ═══════════════════════════════════════════════════════════════ function Location({ accent }) { const offices = [ { city: "Sydney", country: "Australia", flag: "🇦🇺", addr: "Suite 401, 88 Foveaux St, Surry Hills NSW 2010", phone: "+61 2 8095 6440", x: 84, y: 78, lead: true }, { city: "Bangalore", country: "India", flag: "🇮🇳", addr: "WeWork Galaxy, 43 Residency Road, Bangalore 560025", phone: "+91 80 4969 1200", x: 70, y: 52 }, { city: "New York", country: "USA", flag: "🇺🇸", addr: "Floor 8, 175 Varick St, New York, NY 10014", phone: "+1 212 555 0140", x: 28, y: 38 }, { city: "London", country: "UK", flag: "🇬🇧", addr: "Second Home, 68 Hanbury St, London E1 5JL", phone: "+44 20 4538 9120", x: 48, y: 32 }, ]; const [active, setActive] = useState(0); return (
Studio

Four studios, one craft team.

Sydney is our home. Bangalore, New York and London are our friends. We follow the sun — work runs 22 hours a day.

{/* MAP */}
{/* CITY DETAIL */}
{offices.map((o, i) => ( ))}
{offices[active].lead &&
HQ
}

{offices[active].city}

{offices[active].country}
} label="Address" value={offices[active].addr}/> } label="Phone" value={offices[active].phone}/> } label="Direct" value={`${offices[active].city.toLowerCase()}@digitacurve.studio`}/>
Open in Maps
); } function Info({ icon, label, value }) { return (
{icon}
{label}
{value}
); } function WorldMap({ offices, active, onSelect, accent }) { // Dotted world map (procedurally placed dots from a simple landmass approximation) const dots = []; // Generate a dot-pattern only over rough landmasses using a simple heightmap-ish lookup const land = (lon, lat) => { // crude continent shapes via overlapping ellipses const ell = [ // N America { cx: -100, cy: 45, rx: 30, ry: 22 }, { cx: -85, cy: 20, rx: 18, ry: 8 }, // S America { cx: -65, cy: -15, rx: 18, ry: 24 }, // Europe { cx: 12, cy: 50, rx: 22, ry: 14 }, // Africa { cx: 22, cy: 5, rx: 25, ry: 28 }, // Asia { cx: 80, cy: 40, rx: 50, ry: 22 }, { cx: 100, cy: 15, rx: 18, ry: 12 }, // Australia { cx: 135, cy: -25, rx: 18, ry: 12 }, // UK / Ireland { cx: -4, cy: 55, rx: 5, ry: 5 }, ]; return ell.some(e => Math.pow((lon - e.cx) / e.rx, 2) + Math.pow((lat - e.cy) / e.ry, 2) < 1); }; const step = 4; for (let lat = -55; lat <= 70; lat += step) { for (let lon = -170; lon <= 175; lon += step) { if (land(lon, lat)) { const x = ((lon + 180) / 360) * 100; const y = ((90 - lat) / 180) * 100; dots.push({ x, y }); } } } return (
{dots.map((d, i) => ( ))} {/* pins */} {offices.map((o, i) => ( ))} {/* corner badge */}
DC-MAP / v2.6
22h / 365d coverage
); } // ═══════════════════════════════════════════════════════════════ // Testimonials // ═══════════════════════════════════════════════════════════════ function Testimonials({ accent }) { const items = [ { q: "They stayed connected long after launch — the kind of partner that protects your ROI when everyone else has moved on.", n: "Priya Shenoy", r: "VP Marketing, Halocene", i: "PS" }, { q: "An outstanding technical team. We hit a major milestone faster than I thought possible because they actually cared.", n: "Marcus Reilly", r: "Founder, MeinHaus", i: "MR" }, { q: "Above and beyond on responsiveness, adaptability and the willingness to wrestle with an idea.", n: "Sofia Liang", r: "CMO, AMPS Institute", i: "SL" }, { q: "Took a plain, boring website and turned it into the centre of our growth engine.", n: "Jonas Becker", r: "CEO, Northvane", i: "JB" }, ]; return (
Words from clients

We’re measured by what we ship, but remembered for how we work.

{items.map((t, i) => (
{Array.from({length: 5}).map((_,k)=>)}

{t.i}
{t.n}
{t.r}
))}
); } // ═══════════════════════════════════════════════════════════════ // ENQUIRY FORM // ═══════════════════════════════════════════════════════════════ function Enquiry({ accent }) { const [step, setStep] = useState(1); const [data, setData] = useState({ name: "", email: "", company: "", service: "", budget: "", timeline: "", message: "" }); const [submitted, setSubmitted] = useState(false); const set = (k) => (e) => setData(d => ({ ...d, [k]: e.target.value })); const pick = (k, v) => setData(d => ({ ...d, [k]: v })); const submit = (e) => { e.preventDefault(); setSubmitted(true); console.log("Enquiry:", data); }; const services = ["Brand identity", "Digital product", "Growth marketing", "Content & film", "Engineering", "AI workflows"]; const budgets = ["< $25k", "$25k – $75k", "$75k – $150k", "$150k+"]; const timelines = ["ASAP", "1–2 months", "3–6 months", "Just exploring"]; return (
Start a project

Tell us
what you’re
building.

We take on 4–6 new partnerships a year. We’ll reply inside 24 hours — with the team you’d actually work with, not a salesperson.

} label="Email" value="hello@digitacurve.studio"/> } label="Sydney" value="+61 2 8095 6440"/> } label="Calendly" value="cal.com/digitacurve/intro · 30 min"/>
{!submitted ? (
STEP {step} / 2
= 1 ? accent[0] : "rgba(255,255,255,0.1)" }}/>
= 2 ? accent[0] : "rgba(255,255,255,0.1)" }}/>
{step === 1 ? ( <>
{services.map(s => ( ))}
) : ( <>
{budgets.map(b => ( ))}
{timelines.map(t => ( ))}