// Work — filterable portfolio grid const { useState: useStateW, useMemo: useMemoW } = React; const Work = ({ go, initialFilter = "all" }) => { const [filter, setFilter] = useStateW(initialFilter || "all"); const filtered = useMemoW(() => filter === "all" ? PROJECTS : PROJECTS.filter(p => p.category === filter), [filter]); // Layout pattern — make the grid feel composed, not a uniform tile sheet const sizes = ["feat", "m", "m", "m", "feat", "m", "m", "m", "feat", "m", "m", "m"]; return (
Index 02 / Work · {PROJECTS.length} projects

Two decades of real events across the GCC.

Sports, festivals, brand activations, conferences, ceremonies — sorted by category. Each card opens a structured case study with measurable outcomes.

{CATEGORIES.map(c => { const count = c.id === "all" ? PROJECTS.length : PROJECTS.filter(p => p.category === c.id).length; return ( ); })} Showing {filtered.length} / {PROJECTS.length}
{filtered.map((p, i) => { const cls = p.feature ? "feat" : (sizes[i % sizes.length] || "m"); return ( ); })}
{filtered.length === 0 && (
No projects in this category yet.
)}

Don't see your category?

Crowd management, motorsport, hospitality, royal protocol — we'll route the right lead into your brief.

); }; Object.assign(window, { Work });