/* The Purple Chair — secondary pages: hubs, about, press, services, contact, footer, enquire modal */ const { useState: useStateB, useEffect: useEffectB } = React; function Hub({ slug, title, eyebrow, blurb, projects, go, openEnquire, heroImg }) { const items = projects.filter(p => { if (slug === "weddings") return p.category === "Weddings"; if (slug === "events") return p.category === "Events & Social"; if (slug === "brand-events") return p.category === "Brand Events"; return true; }); return (
{eyebrow}

{title}

{blurb}

{items.map((p, i) => (
go(`project:${p.id}`)} style={{ cursor: "pointer" }} className="tpc-card">
{p.title}
{String(i+1).padStart(2,"0")} — {p.tags.join(" · ")}

{p.title}

{p.venue}
))}
); } // ---------- ABOUT ---------- function About({ go, openEnquire }) { return (
The Studio A boutique founded by three sisters, built on conversation, craft and care.
{/* Placeholder for founder portrait */}
Founder portrait
Rasha Badran
Client to supply
Founder & Managing Director Rasha Badran

The Purple Chair began as a small boutique founded by Rasha with her sisters Dana and May Badran — organising and styling small, classically beautiful celebrations. It became, over time, a full design house: planning, styling and creative direction for weddings, social events and luxury-brand experiences.

We remain founder-led and intentionally small. Each project is briefed, designed and produced by the same hands from first conversation to final breakdown — an editorial sensibility held across every detail.

Co-Founders
Dana & May Badran
Headquarters
Al Quoz, Dubai
{/* Values */}
The Philosophy We make events that feel like a place, not a checklist — singular, considered, intentionally restrained.
{[ ["I.", "Editorial restraint", "We prefer a tight palette, a single signature material, and a quiet visual language carried through every detail."], ["II.", "Sense of place", "Whether desert, ballroom or villa — the venue is our first collaborator. The design begins with the site."], ["III.", "In-house from concept to breakdown", "Planning, styling and creative direction held under one roof. Decisions stay with the people who made them."], ].map(([n, t, d]) => (
{n}

{t}

{d}

))}
); } // ---------- SERVICES / APPROACH ---------- function Services({ go, openEnquire }) { const pillars = [ { key: "planning", num: "I.", title: "Planning", lede: "From the first conversation to the final breakdown — quietly held, end-to-end.", bullets: [ "Brief & consultation", "Venue selection & site planning", "Supplier negotiation & contract management", "Production logistics & timelines", "Guest experience & hospitality flow", "Entertainment programming", "On-the-day event management", ], }, { key: "styling", num: "II.", title: "Styling", lede: "An editorial language for the table, the room, and every transition in between.", bullets: [ "Tablescape & centrepiece design", "Floral concept & selection", "Furniture, linens & tableware curation", "Ceremony staging & arrival moments", "Graphic design & print artwork", "Lighting & atmosphere", "Bespoke fabrication where required", ], }, { key: "direction", num: "III.", title: "Creative Direction", lede: "The concept behind the event — what it should feel like, sound like, photograph as.", bullets: [ "Concept development", "Mood, palette & material language", "Narrative & sequencing", "Photographer & film direction", "Wardrobe and styling guidance", "Brand alignment for activations", ], }, ]; return (
The Approach Planning. Styling. Creative Direction.

Three disciplines, one studio — held in-house across weddings, social events and luxury brand experiences. Engagements are bespoke; we work with a small number of clients each season to keep the work close.

{pillars.map((p, i) => (
{p.num}
{p.title}

{p.lede}

Inclusions
    {p.bullets.map(b => (
  • {b}
  • ))}
))}
{/* PROCESS */}
The Process Six conversations between brief and breakdown.
{[ ["01", "Enquire", "A short note about your event — the date, the place, the sense of it."], ["02", "Discovery", "We meet (in person, or by video) to listen. A bespoke proposal follows within ten days."], ["03", "Design", "Mood, palette, materials. Decks, samples, site visits, sourcing."], ["04", "Production", "Suppliers, contracts, logistics. Weekly meetings as we approach the date."], ["05", "Event", "We run the day. You enjoy it."], ["06", "Archive", "A curated set of stills and credits — to keep, to share, to remember."], ].map(([n, t, d]) => (
{n}

{t}

{d}

))}
); } // ---------- PRESS ---------- function Press({ go, openEnquire }) { return (
Editorial As featured in.

Selected editorial coverage. Full credits and links are added once publication and image-usage rights are confirmed.

{window.PRESS.map((p, i) => (
{String(i+1).padStart(2,"0")}
{p.name}
{p.note}
{p.confirmed ? "Read →" : "Pending"}
))}
A note on attribution

The Purple Chair has been featured by multiple editorial titles. This page lists only publications whose feature, year and image-usage rights have been confirmed with the publisher and the photographer. Pending entries will be added once verified.

); } // ---------- CONTACT ---------- function Contact({ go, openEnquire }) { return (
Begin Tell us about your event.
); } // ---------- CONTACT FORM ---------- function ContactForm({ initialSector = "" }) { const [data, setData] = useStateB({ name: "", email: "", phone: "", type: initialSector || "wedding", date: "", guests: "", venue: "", message: "", }); const [sent, setSent] = useStateB(false); const set = (k) => (e) => setData(d => ({ ...d, [k]: e.target.value })); const submit = (e) => { e.preventDefault(); setSent(true); }; if (sent) { return (
Thank you We've received your note.

A member of the studio will respond personally within two working days. If urgent, please call +971 4 355 2777.

); } const fieldStyle = { border: 0, borderBottom: "1px solid var(--line)", padding: "16px 0", fontFamily: "var(--font-sans)", fontSize: 15, background: "transparent", outline: "none", color: "var(--ink)", fontWeight: 300, width: "100%", }; const labelStyle = { fontFamily: "var(--font-sans)", fontSize: 10, letterSpacing: "0.3em", textTransform: "uppercase", color: "var(--muted)", marginBottom: 6, display: "block" }; return (
{[["wedding", "Wedding"], ["brand", "Brand Event"], ["social", "Social / Private"]].map(([k, l]) => ( ))}