const { useState, useEffect, useRef } = React; // ============ DATA ============ const SERVICES = [ { n: "01", t: "Social Media", em: "Management", d: "End-to-end feed ownership. Strategy, calendar, posting, community." }, { n: "02", t: "Content", em: "Production", d: "Photo + video shoots engineered for the algorithm. Reels, UGC, stills." }, { n: "03", t: "Creative", em: "Direction", d: "The look, the voice, the world your audience wants to live inside." }, { n: "04", t: "Paid", em: "Campaigns", d: "Meta, TikTok, Pinterest. Creative-led and ROAS-honest." }, { n: "05", t: "Influencer", em: "Partnerships", d: "Sourcing, briefing, negotiating. Matches that land on camera." }, { n: "06", t: "Launch", em: "Strategy", d: "Drop a product or rebrand without silence. Rollouts that actually land." }, ]; const WORK = [ { img: "assets/portfolio-6.png", client: "Boona Signature", tag: "Brand film · 2026", desc: "A signature campaign we shot in-house — red heels, grey sweats, laptop open. The tone we build for every client.", layout: "l" }, { img: "assets/portfolio-3.png", client: "Skyline, Miami", tag: "Editorial · Night", desc: "Rooftop shoot for a hospitality launch. Dual-camera, behind-the-scenes, social-first cut delivered in 48 hours.", layout: "r" }, { img: "assets/portfolio-5.png", client: "The Trio", tag: "Lifestyle · Reels", desc: "Founder storytelling cut into three-week rollout: before the shoot, at the shoot, what we made with it.", layout: "center" }, { img: "assets/portfolio-1.png", client: "Kōnā Sushi", tag: "Hospitality · Content", desc: "Monthly retainer: four shoot days, twenty Reels, a feed that tripled saves inside a quarter.", layout: "l" }, { img: "assets/portfolio-2.png", client: "Nova Beauty", tag: "Beauty · UGC", desc: "Product drop for a clean beauty line. Close-up, fingers-in-frame, let the texture speak.", layout: "r", tall: true }, { img: "assets/portfolio-4.png", client: "Off-Duty", tag: "Lifestyle · Stills", desc: "A day off, captured on film. Sometimes the best feed is the one that doesn't look like one.", layout: "center" }, ]; const FOUNDERS = [ { idx: "01", name: "Founder", last: "One", role: "Creative Director", bio: "Directs the look and voice. Believes a feed should feel like a place, not a channel.", handle: "@boona.media", img: "assets/portfolio-2.png", pos: "center 22%" }, { idx: "02", name: "Founder", last: "Two", role: "Strategy & Social", bio: "Turns ideas into a calendar and a budget. Reads the data so the team doesn't have to.", handle: "@boona.media", img: "assets/portfolio-4.png", pos: "center 28%" }, { idx: "03", name: "Founder", last: "Three", role: "Content & Production", bio: "Shoots and edits. Ships the Reel at the exact hour it performs.", handle: "@boona.media", img: "assets/portfolio-5.png", pos: "center 22%" }, ]; // ============ HOOKS ============ function useInView(options = { threshold: 0.15 }) { const ref = useRef(null); const [inView, setInView] = useState(false); useEffect(() => { if (!ref.current) return; const o = new IntersectionObserver(([e]) => { if (e.isIntersecting) { setInView(true); o.disconnect(); } }, options); o.observe(ref.current); return () => o.disconnect(); }, []); return [ref, inView]; } function useScrollY() { const [y, setY] = useState(0); useEffect(() => { const on = () => setY(window.scrollY); window.addEventListener("scroll", on, { passive: true }); return () => window.removeEventListener("scroll", on); }, []); return y; } // ============ COMPONENTS ============ function Nav() { const y = useScrollY(); const stuck = y > 80; return ( ); } function VideoStage() { const y = useScrollY(); const winH = typeof window !== "undefined" ? window.innerHeight : 800; const p = Math.min(1, y / (winH * 0.9)); const scale = 1 + p * 0.05; const brightness = 1 - p * 0.15; return (
); } function Hero() { return (
LIVE · Miami, FL
Booking Q3 · '26
A social media & creative agency

Social that
moves the needle.

Est. 2025 · Three founders, one sharp feed
Scroll Explore
); } function IntroPanel() { return (
The Studio

We're three women building the kind of social presence brands wish they had.

Direction meets execution. Strategy meets production. We run the whole thing from Miami — the shoots, the calendar, the captions, the data.

03
Founders
'25
Est.
24h
Reply time
); } function PortfolioTile({ w, i }) { const [ref, inView] = useInView({ threshold: 0.2 }); return (
{w.client}
{w.tag}
{String(i + 1).padStart(2, "0")}
); } function Portfolio() { return (
Selected Work · 2025 – 2026

Recent files, off the feed.

{WORK.map((w, i) => )}
); } function Services() { return (
Services

Six lanes.
Pick what you need.

{SERVICES.map((s) => (
— {s.n}

{s.t} {s.em}

{s.d}

))}
); } function Studio() { return (
The Studio · Miami, FL

Three women, one sharp feed.

We met doing the work — styling, shooting, strategizing — and decided we'd rather build it than keep fixing other people's decks.

{FOUNDERS.map((f) => (
{f.idx} / 03

{f.name} {f.last}

{f.role}

{f.bio}

↳ {f.handle}
))}
); } function Contact() { return (
Start a project

Tell us about the brand, the audience, and the problem. We'll tell you what we'd do and what it costs.

hello@boona.media
Studio

Miami, Florida
By appointment

Hours

Mon — Fri · 9–6 ET
DMs open always

Instagram

@boona.media

Inquiries

hello@boona.media

); } function Tweaks({ state, setState, visible }) { if (!visible) return null; const set = (k, v) => { const next = { ...state, [k]: v }; setState(next); window.parent?.postMessage({ type: "__edit_mode_set_keys", edits: { [k]: v } }, "*"); }; return (
Tweaks · Boona
Video treatment
Density
); } // ============ APP ============ function App() { const [state, setState] = useState(window.__TWEAKS__); const [tweaksOn, setTweaksOn] = useState(false); useEffect(() => { // video treatment const el = document.querySelector(".video-stage video"); if (el) { if (state.videoMode === "raw") el.style.filter = "none"; else el.style.filter = "saturate(0.95) contrast(1.02)"; } document.documentElement.style.setProperty("--pad", state.density === "tight" ? "100px" : "140px"); }, [state]); useEffect(() => { const onMsg = (e) => { const d = e.data || {}; if (d.type === "__activate_edit_mode") setTweaksOn(true); if (d.type === "__deactivate_edit_mode") setTweaksOn(false); }; window.addEventListener("message", onMsg); window.parent?.postMessage({ type: "__edit_mode_available" }, "*"); return () => window.removeEventListener("message", onMsg); }, []); return ( <>