function AboutPage() { const [vis, setVis] = React.useState({}); const refs = React.useRef({}); React.useEffect(() => { const obs = new IntersectionObserver( entries => entries.forEach(e => { if (e.isIntersecting) setVis(v => ({ ...v, [e.target.dataset.id]: true })); }), { threshold: 0.15 } ); Object.values(refs.current).forEach(r => r && obs.observe(r)); return () => obs.disconnect(); }, []); function block(id, style = {}) { return { opacity: vis[id] ? 1 : 0, transform: vis[id] ? 'translateY(0)' : 'translateY(32px)', transition: 'opacity 0.9s ease, transform 0.9s ease', ...style, }; } const label = { fontFamily: "'Montserrat', sans-serif", fontSize: 12, letterSpacing: '0.32em', color: 'rgba(255,255,255,0.28)', textTransform: 'uppercase', marginBottom: 20 }; const rule = { height: 1, background: 'rgba(255,255,255,0.08)', margin: '0' }; const team = [ { name: 'Irfan Mappasaid', role: 'Co-Founder · Head Roaster', note: 'Certified Q Grader. Trained in Gothenburg. Roasts with silence and intention.' }, { name: 'Andi Nurul Rahmawati', role: 'Co-Founder · Head of Sourcing', note: 'Speaks four languages, none of them corporate. Negotiates directly with farmers.' }, { name: 'Dimas Pratama', role: 'Head Barista · Training', note: '2nd place Indonesia Brewers Cup 2024. Believes in the 93°C gospel.' }, ]; return (
{/* ── HERO STATEMENT ── */}
refs.current['h1'] = r} data-id="h1">
About

{['Shadow is the', 'absence of light.', 'In shadow, flavour', 'reveals itself.'].map((ln, i) => ( {i === 1 ? {ln} : ln} ))}

{/* ── ORIGIN STORY ── */}
refs.current['o1'] = r} data-id="o1">
Founded
2021
Makassar, South Sulawesi
refs.current['o2'] = r} data-id="o2">
Our Story

Umbra began on a rooftop in Makassar's old port district, with a 1-kilogram sample roaster and a disagreement about what Indonesian coffee could be.

The Indonesian archipelago produces some of the world's most distinctive coffees — but they were being sold overseas, processed for other people's blends, roasted to hide complexity rather than reveal it.

We decided to do the opposite. Source high. Roast light. Let the altitude speak.

{/* ── PHILOSOPHY ── */}
refs.current['ph'] = r} data-id="ph">
Philosophy
"We source where altitude writes the flavour. Every metre above sea level is a degree of complexity the roaster must not erase."
{[ ['Altitude-First', 'We only source farms above 1,200m. The elevation is non-negotiable.'], ['Minimal Intervention', 'We stop before the second crack. The terroir should be louder than the roast.'], ['Direct Trade', 'We buy directly from farmers. The margin goes to the people who grew it.'], ].map(([t, d]) => (
{t}
{d}
))}
{/* ── ROASTERY ── */}
{/* Roastery illustration placeholder */}
Roastery Photography
refs.current['ro'] = r} data-id="ro">
The Roastery

A converted warehouse
at the old port.

We roast on a 12kg Probat drum in a century-old warehouse overlooking the Makassar Strait. The ceiling is 8 metres high. The walls have not been painted. We like it that way.

Every batch is profiled, cupped, and profiled again. We reject lots that pass industry standards. Our standard is the cup.

{[['12kg', 'Probat Drum'], ['48h', 'Dispatch Window'], ['100%', 'Direct Trade']].map(([n, l]) => (
{n}
{l}
))}
{/* ── TEAM ── */}
refs.current['tm'] = r} data-id="tm">
The People
{team.map((p, i) => (
0 ? 48 : 0, borderRight: i < 2 ? '1px solid rgba(255,255,255,0.08)' : 'none', ...block('tm', { transitionDelay: `${i * 0.12}s` }), }}> {/* Placeholder portrait */}
{p.name.split(' ').map(w => w[0]).join('').slice(0,2)}
{p.name}
{p.role}

{p.note}

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