/* The Purple Chair — page components */ const { useState, useEffect, useRef } = React; // ---------- shared bits ---------- function Mark({ size = 28, white = false }) { // A wordmark-style monogram drawn from the brief lockup. Original — does not reproduce the existing logo. const c = white ? "#FBFAF8" : "var(--ink)"; return (
The Purple Chair
Dubai · Worldwide
); } function Eyebrow({ children, white }) { return (
{children}
); } function DisplayH({ children, size = 72, italic = false, style = {} }) { return (

{children}

); } function HairlineButton({ children, onClick, variant = "outline", style = {} }) { const base = { fontFamily: "var(--font-sans)", fontSize: 11, letterSpacing: "0.32em", textTransform: "uppercase", padding: "16px 28px", border: "1px solid", cursor: "pointer", transition: "all .25s ease", fontWeight: 500, display: "inline-flex", alignItems: "center", gap: 14, background: "transparent", }; const variants = { outline: { borderColor: "var(--ink)", color: "var(--ink)" }, solid: { borderColor: "var(--ink)", background: "var(--ink)", color: "var(--paper)" }, plum: { borderColor: "var(--plum)", background: "var(--plum)", color: "var(--paper)" }, ghost: { borderColor: "rgba(255,255,255,.6)", color: "white" }, }; return ( ); } // ---------- NAV ---------- function Nav({ page, go, locale, setLocale, openEnquire }) { const [scrolled, setScrolled] = useState(false); useEffect(() => { const sc = document.querySelector(".tpc-scroll"); if (!sc) return; const on = () => setScrolled(sc.scrollTop > 60); sc.addEventListener("scroll", on); return () => sc.removeEventListener("scroll", on); }, []); const links = [ ["portfolio", "Portfolio"], ["weddings", "Weddings"], ["events", "Events"], ["brand-events", "Brand Events"], ["services", "Approach"], ["about", "Studio"], ["press", "Press"], ["contact", "Contact"], ]; const onHome = page === "home"; const dark = onHome && !scrolled; return (
{["EN", "AR", "RU"].map(l => ( ))}
Enquire
); } // ---------- HOME ---------- function Home({ go, openEnquire, projects, heroVariant }) { // Pick hero by variant const heroImages = { "anantara": "media/wedding-anantara-qasr-al-sarab.webp", "desert-palm": "media/wedding-desert-palm-dubai.webp", "sintra": "media/wedding-destination-sintra-portugal.webp", "armani": "media/wedding-armani-hotel-sangeet-dubai.webp", "ritz": "media/wedding-ritz-carlton-difc-dubai.webp", "rove": "media/event-rove-home-jumeirah-beach-hotel.webp", }; const heroSrc = heroImages[heroVariant] || heroImages["anantara"]; const featured = projects.slice(0, 6); return (
{/* HERO */}
Dubai · Worldwide · Est. by Rasha Badran

Bespoke event design,
tasteful and timeless.

A full-service design house for luxury weddings, social events and brand activations — known for minimalist, cohesive design and quiet, considered production.

Planning · Styling · Creative Direction
go("portfolio")}>View Portfolio Request a Proposal
{/* INTRO / MANIFESTO */}
01 — The Studio
A boutique founded by the Badran sisters — designing the moments that become the photographs, the toasts, the memories.

We are an editorially-led design house based in Dubai. Our work begins with conversation — a careful brief, a real point of view — and ends with an event that feels effortless, considered, and unmistakeably yours.

We work across weddings, social occasions, and brand activations — for private clients and luxury Maisons. Bespoke by definition; no template, no public price list.

{/* THREE ARMS */}
{[ { key: "weddings", num: "i.", title: "Weddings", desc: "Intimate ceremonies and multi-day celebrations across the UAE and abroad.", img: "media/wedding-vida-umm-al-quwain-beach.webp" }, { key: "events", num: "ii.", title: "Events & Social", desc: "Milestone celebrations, private dinners and styled gatherings.", img: "media/event-farm-event.webp" }, { key: "brand-events", num: "iii.", title: "Brand Events", desc: "Elevated brand experiences, activations and production for luxury Maisons.", img: "media/event-bulgari-ramadan-majlis-dubai.webp" }, ].map(t => ( ))}
{/* FEATURED WORK */}
02 — Selected Work Quiet, considered productions — across the desert, the dunes and the diaspora.
go("portfolio")}>The Full Portfolio
{featured.map((p, i) => { // Editorial irregular grid const layouts = [ { col: "span 7", aspect: "4/3" }, { col: "span 5", aspect: "3/4" }, { col: "span 4", aspect: "3/4" }, { col: "span 8", aspect: "16/10" }, { col: "span 5", aspect: "3/4" }, { col: "span 7", aspect: "4/3" }, ]; const L = layouts[i % layouts.length]; return (
go(`project:${p.id}`)} style={{ gridColumn: L.col, cursor: "pointer", }} className="tpc-card">
{p.title}
{p.category} · {p.location}

{p.title}

0{i+1} / {String(featured.length).padStart(2,"0")}
); })}
{/* PHILOSOPHY QUOTE */}
03 — Philosophy "Known for our minimalist and cohesive designs — tasteful and timeless events."
— The Purple Chair
{/* PRESS */}
04 — As Featured In
{window.PRESS.map(p => (
{p.name}
{p.note}
))}
{/* ENQUIRE CTA */}
); } // ---------- PORTFOLIO ---------- function Portfolio({ go, projects, openEnquire }) { const [filter, setFilter] = useState("All"); const cats = ["All", "Weddings", "Events & Social", "Brand Events"]; const filtered = filter === "All" ? projects : projects.filter(p => p.category === filter); return (
The Portfolio Twenty-two productions, across three disciplines.
{cats.map(c => ( ))}
{filtered.length} {filtered.length === 1 ? "project" : "projects"}
{filtered.map((p, i) => (
go(`project:${p.id}`)} style={{ cursor: "pointer" }} className="tpc-card">
{p.title} {p.permissionGated && (
Permission pending
)}
{p.category}

{p.title}

{p.venue} · {p.location}
))}
); } // ---------- CASE STUDY ---------- function CaseStudy({ projectId, go, projects, openEnquire }) { const p = projects.find(x => x.id === projectId) || projects[0]; const others = projects.filter(x => x.id !== p.id && x.category === p.category).slice(0, 3); // Build a fake gallery from other category images const galleryImages = [ p.image, ...projects.filter(x => x.id !== p.id).slice(0, 5).map(x => x.image), ]; return (
{/* Hero */}
{p.category}

{p.title}

{[["Venue", p.venue], ["Location", p.location], ["Year", p.year], ["Photography", p.photographer]].map(([k, v]) => (
{k}
{v}
))}
{/* Concept */}
The Concept
Palette
{p.palette.map((c, i) => (
))}
Disciplines
{p.tags.map(t => ( {t} ))}
"{p.concept}"

We began with the place itself — its geometry, its light, the hour the guests would arrive. The brief was answered first with restraint: a refined palette, a tight floral language, a single signature material drawn through the entire event.

From there: tablescape, ceremony staging, transitions between moments, and the small private rituals that make a celebration feel singular. Planning, styling and on-the-day production were held in-house from concept through breakdown.

{/* Gallery — editorial irregular */}
{/* Credits */}
{[ ["Planning", "The Purple Chair"], ["Styling", "The Purple Chair"], ["Creative Direction", "The Purple Chair"], ["Photography", p.photographer + " — credit pending"], ].map(([k, v]) => (
{k}
{v}
))}
{/* More work */}
More in this discipline go("portfolio")}>All Work
{others.map(o => (
go(`project:${o.id}`)} style={{ cursor: "pointer" }} className="tpc-card">
{o.title}
{o.category}

{o.title}

{o.location}
))}
); } window.Nav = Nav; window.Home = Home; window.Portfolio = Portfolio; window.CaseStudy = CaseStudy; window.Eyebrow = Eyebrow; window.DisplayH = DisplayH; window.HairlineButton = HairlineButton; window.Mark = Mark;