// Work page — filterable portfolio + case study detail const { useState: useStateW } = React; function WorkPage({ t, go }) { const [filter, setFilter] = useStateW('All'); const [active, setActive] = useStateW(null); const list = filter === 'All' ? WORK : WORK.filter(w => w.category === filter); if (active) { const w = WORK.find(x => x.id === active); return setActive(null)} />; } return (
{t.nav.work}

Built for the
front row.

A selection of corporate, government and live-entertainment productions. Imagery and project metadata published only with rights clearance.

Filter {CATEGORIES.map(c => ( ))} {list.length} {list.length === 1 ? 'project' : 'projects'}
{list.map((w, i) => { // Pattern repeats every 5: [12-wide hero, 7+5 pair, 5+7 pair] const mod = i % 5; const span = mod === 0 ? 12 : (mod === 1 ? 7 : (mod === 2 ? 5 : (mod === 3 ? 5 : 7))); const ratio = span === 12 ? '21/9' : (span === 7 ? '4/3' : '3/4'); const maxH = span === 12 ? 520 : (span === 7 ? 480 : 520); return ( ); })}
i

Rights notice. All published imagery is shipped only with photographer credit and client permission. Project metadata (scale, client name, year) appears only where verified. Festival imagery flagged "Stock · placeholder" is sector-appropriate reference and will be swapped for rights-cleared client media before launch.

); } function CaseStudy({ w, t, go, onBack }) { return (
{w.isStock && }
{w.category}

{w.title}

{[['Client', w.client], ['Location', w.location], ['Year', w.year], ['Scale', w.scale]].map(([k,v])=>(
{k}
{v || '—'}
))}
Brief

{w.blurb}

The work

Detailed narrative — concept, production, delivery — appears here once the client clears photographer credits and confirms measurable outcomes. The Done Events case-study template captures category, client/venue, location, year, scale, and credit line per image.

{t.misc.confirm}

{w.isStock && }
Plan something similar

Let's build the
next one together.

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