/* Bluehaus — Home + Projects + Case Study pages */ const { useState: useState1, useEffect: useEffect1, useMemo } = React; // ====================== HOME ====================== function HomePage({ navigate }) { const data = window.BHG_DATA; const featured = data.projects.filter(p => p.featured); const heroProject = data.projects.find(p => p.slug === 'sushi-samba-riyadh'); return (
{/* HERO */}
Bluehaus Group · Est. Dubai 2003
Architecture / Interior / MEP
Dubai · Abu Dhabi · Riyadh · Manila

Inspired design.
Forward-thinking people.

A multi-disciplinary architecture, interior design and MEP consultancy. Over 20 years building people-centric, resilient environments across the Middle East — now part of tp bennett.

{/* MARQUEE */} {/* STATS */}
{window.BHG_DATA.stats.map((s, i) => (
{s.num}
{s.lab}
))}
{/* FEATURED PROJECT 1 — du Telecom */}
Selected work, structured as case studies.} action={ { e.preventDefault(); navigate('projects'); }} className="link-arrow">All projects → } /> p.slug === 'du-telecom-hq')} reverse={false} navigate={navigate} />
p.slug === 'huawei-riyadh')} reverse={true} navigate={navigate} />
{/* SECTOR TILES */}
Six sectors, one practice.} action={ { e.preventDefault(); navigate('sectors'); }} className="link-arrow">All sectors →} />
{data.sectors.map((s, i) => (
navigate('projects?sector=' + s.id)}>
0{i + 1} / 0{data.sectors.length}
{s.name}
{s.count} projects
))}
{/* TP BENNETT STRIP */}
A new chapter — 2025
Bluehaus × tp bennett

In May 2025, Bluehaus joined tp bennett, a 100-year-old London practice of 400+ designers — extending our regional craft into a truly international platform.

Founder Ben Corrigan continues to lead the Middle East region from Dubai, with the combined firm now operating from Dubai, Abu Dhabi, Riyadh, Manila, London, Manchester, Leeds and New York. Same studio, same people — broader reach.

{/* DIVISIONS */}
{data.divisions.map((d) => ( ))}
{/* FEATURED — SUSHI SAMBA + clients */}
p.slug === 'sushi-samba-riyadh')} reverse={false} navigate={navigate} />
{/* CLIENT LOGOS — text-only treatment */}
Selected clients · 2003 — 2026
{data.clientLogos.map((c, i) => ( {c}{i < data.clientLogos.length - 1 ? · : ''} ))}
{/* AWARDS STRIP */}
{ e.preventDefault(); navigate('awards'); }} className="link-arrow">All awards →} />
{data.awards.slice(0, 6).map((a, i) => (
{a.year}
{a.name}{a.project}
{a.issuer}
))}
{/* CTA BAND */}
Start a project
Tell us about your brief.
{ e.preventDefault(); navigate('contact'); }} className="btn btn-primary" style={{ background: 'var(--paper)', color: 'var(--ink)' }}> Start a project +971 (4) 452 0956
); } function FeatureRow({ project, reverse, navigate }) { if (!project) return null; return (
{reverse ? ( <>
{project.name}
) : ( <>
{project.name}
)}
); } function FeatureCopy({ p, navigate }) { return (
{p.sectorName}
{p.name}
{p.tagline}
Location
{p.location}
Year
{p.year}
Scope
{p.scope}
Area
{p.area}
{ e.preventDefault(); navigate('projects/' + p.slug); window.scrollTo(0, 0); }} className="link-arrow" style={{ marginTop: 32, display: 'inline-flex' }}> Read case study →
); } // ====================== PROJECTS INDEX ====================== function ProjectsPage({ navigate, initialSector }) { const data = window.BHG_DATA; const [sector, setSector] = useState1(initialSector || 'all'); const visible = sector === 'all' ? data.projects : data.projects.filter(p => p.sector === sector); // Mixed grid layout — sizing variants for editorial rhythm const variantFor = (idx) => { const m = idx % 6; if (m === 0) return 'wide'; if (m === 3) return 'tall'; return ''; }; const colSpanFor = (idx) => { const m = idx % 6; if (m === 0) return 'span 8'; if (m === 1) return 'span 4'; if (m === 2) return 'span 6'; if (m === 3) return 'span 4'; if (m === 4) return 'span 4'; if (m === 5) return 'span 4'; return 'span 4'; }; return (
Portfolio

Projects, structured. By sector, by location, by year.

A working archive of named projects across the GCC and beyond. Filter by sector, or browse the full set.
{data.sectors.map(s => ( ))}
{visible.map((p, i) => (
))}
{visible.length === 0 && (
No published projects in this sector yet — confirm with the studio.
)}
); } // ====================== CASE STUDY ====================== function CaseStudyPage({ slug, navigate }) { const data = window.BHG_DATA; const p = data.projects.find(x => x.slug === slug); const [lightbox, setLightbox] = useState1(null); if (!p) { return (
404

Project not found.

{ e.preventDefault(); navigate('projects'); }} className="link-arrow" style={{ marginTop: 24, display: 'inline-flex' }}>← Back to projects
); } const idx = data.projects.indexOf(p); const next = data.projects[(idx + 1) % data.projects.length]; return (
{/* HERO */}
{p.name}
{p.sectorName} · {p.location}

{p.name}

{/* META */}
Client
{p.client}
Location
{p.location}
Year
{p.year}
Area
{p.area}
Scope
{p.scope}
{/* BODY */}
Concept

{p.tagline}

{p.narrative.map((para, i) => (

{para}

))}
Photography

{p.photographer} — usage rights to be confirmed with the studio.

{/* GALLERY */}
{p.gallery.map((src, i) => (
setLightbox(src)} style={{ cursor: 'zoom-in' }}> {p.name
))}
{/* NEXT */}
Next project
{next.name}
{ e.preventDefault(); navigate('projects/' + next.slug); window.scrollTo(0,0); }} className="btn btn-primary"> View case study
{/* CTA */}
{p.sectorName}
Working on something similar?
{ e.preventDefault(); navigate('contact'); }} className="btn btn-primary" style={{ background: 'var(--paper)', color: 'var(--ink)' }}> Start a project
{lightbox && setLightbox(null)} />}
); } Object.assign(window, { HomePage, ProjectsPage, CaseStudyPage });