// Sections const { useEffect: useEffect2, useRef: useRef2, useState: useState2 } = React; /* ---------- NAV ---------- */ function Nav() { const [scrolled, setScrolled] = useState2(false); const [open, setOpen] = useState2(false); useEffect2(() => { const onScroll = () => setScrolled(window.scrollY > 30); window.addEventListener('scroll', onScroll, { passive: true }); return () => window.removeEventListener('scroll', onScroll); }, []); useEffect2(() => { document.body.style.overflow = open ? 'hidden' : ''; return () => { document.body.style.overflow = ''; }; }, [open]); const goTo = (e, id) => { e.preventDefault(); setOpen(false); // Defer scroll to allow menu close + body overflow reset setTimeout(() => { const el = document.getElementById(id); if (el) { const navH = 64; const top = el.getBoundingClientRect().top + window.pageYOffset - navH; window.scrollTo({ top, behavior: 'smooth' }); } }, 60); }; const linkStyle = { fontFamily: 'var(--sans)', fontSize: 13, color: 'var(--ink-2)', letterSpacing: '0.02em', padding: '6px 0', position: 'relative', }; return ( ); } /* ---------- HERO ---------- */ function Hero() { return (
{/* LEFT: headline column */}
{/* Eyebrow label */}
Fractional Operations Lead

I build the execution infrastructure that{' '} health, wellness, and technology {' '} companies need to scale.

I work with growing teams to build the systems, lead the high impact initiatives, and turn strategy into consistent execution.

Book a conversation See what I do
{/* Bottom meta strip */}
{/* RIGHT: portrait */}
); } function MetaBlock({ label, value, accent }) { return (
{accent && ( )} {label}
{value}
); } /* ---------- MARQUEE / POSITIONING STRIP ---------- */ function Marquee() { const words = ['AI-Augmented Operations', 'GTM Infrastructure', 'Revenue Systems', 'Implementation', 'People Ops', 'AI Workflows', 'Cross-Functional Execution', 'Strategic Initiatives']; const row = [...words, ...words, ...words]; return (
{row.map((w, i) => ( {w} ))}
); } /* ---------- WHEN TO BRING ME IN ---------- */ function WhenToBring() { return (
Eight signs the operation is the bottleneck.} intro="Most of my work begins at one of these inflection points. If any of these feel familiar, we should talk." />
{window.WHEN_ITEMS.map((text, i) => ( ))}
); } function WhenCard({ idx, text }) { const [hover, setHover] = useState2(false); return (
setHover(true)} onMouseLeave={() => setHover(false)} style={{ padding: '36px 32px 44px', borderRight: '1px solid var(--rule)', borderBottom: '1px solid var(--rule)', minHeight: 220, display: 'flex', flexDirection: 'column', justifyContent: 'space-between', background: hover ? 'rgba(240,236,228,0.025)' : 'transparent', transition: 'background 300ms ease', position: 'relative', }} >
0{idx}

{text}

); } /* ---------- SERVICES ---------- */ function Services() { return (
Systems and initiatives that turn strategy into results.} intro="I work with growing companies, typically seed to Series C, that need the work in these areas done but don't have anyone to own it. Most engagements focus on one or two of these areas based on what the company needs most." />
{window.SERVICES.map((s, i) => ( ))}
); } function ServiceRow({ idx, service }) { return (
0{idx}
{service.tag}

{service.title}

{service.body}

{service.stack.map(s => ( {s} ))}
); } /* ---------- WORK ---------- */ function Work() { return (
What this looks like in practice.} intro="From operating systems to revenue to GTM." />
{window.WORK.map((w, i) => ( ))}
); } function StatRow({ stat }) { const [hover, setHover] = useState2(false); return (
setHover(true)} onMouseLeave={() => setHover(false)} style={{ display: 'flex', alignItems: 'baseline', gap: 20, padding: '18px 0', borderBottom: '1px solid var(--rule)', }} >
{stat.value}
{stat.label}
); } function WorkItem({ work, index }) { const [hover, setHover] = useState2(false); return (
setHover(true)} onMouseLeave={() => setHover(false)} style={{ display: 'grid', gridTemplateColumns: 'minmax(80px, 1fr) 4fr 5fr', gap: 40, padding: '56px 0 64px', borderTop: '1px solid var(--rule)', position: 'relative', transition: 'background 600ms cubic-bezier(.2,.7,.2,1)', background: hover ? 'rgba(240,236,228,0.015)' : 'transparent', }} className="work-item"> {/* Accent rail that grows on hover */}
/{work.id}
{work.category}
{work.context}

{work.title}

{/* Stats */}
{work.stats.map((stat, i) => ( ))}
); } function WorkBody({ body }) { const paragraphs = body.split(/\n\n+/); const [isMobile, setIsMobile] = React.useState( typeof window !== 'undefined' ? window.innerWidth <= 700 : false ); const [expanded, setExpanded] = React.useState(false); React.useEffect(() => { const mq = window.matchMedia('(max-width: 700px)'); const onChange = (e) => setIsMobile(e.matches); setIsMobile(mq.matches); if (mq.addEventListener) mq.addEventListener('change', onChange); else mq.addListener(onChange); return () => { if (mq.removeEventListener) mq.removeEventListener('change', onChange); else mq.removeListener(onChange); }; }, []); const paraStyle = (i) => ({ margin: i === 0 ? 0 : '18px 0 0', color: 'var(--ink-2)', fontSize: 16, lineHeight: 1.7, textWrap: 'pretty', }); // Desktop: always show everything if (!isMobile) { return ( <> {paragraphs.map((para, i) => (

{para}

))} ); } // Mobile: show first paragraph clamped to ~3 lines until expanded const firstPara = paragraphs[0]; const restParas = paragraphs.slice(1); return ( <>

{firstPara}

{expanded && restParas.map((para, i) => (

{para}

))} ); } /* ---------- PROCESS ---------- */ function Process() { return (
I start by understanding what’s actually going on.} />
{window.PROCESS.map((p, i) => ( ))}
Engagement structure

Engagements are structured as monthly retainers, typically 10 to 20 hours per week with a 3 month minimum. Every engagement begins with an initial assessment so I’m solving the right problems from day one.

); } function ProcessCard({ step, last }) { const [hover, setHover] = useState2(false); return (
setHover(true)} onMouseLeave={() => setHover(false)} style={{ padding: '40px 36px 48px', borderRight: last ? 'none' : '1px solid var(--rule)', borderBottom: '1px solid var(--rule)', minHeight: 340, display: 'flex', flexDirection: 'column', flex: 1, width: '100%', height: '100%', position: 'relative', transition: 'background 600ms cubic-bezier(.2,.7,.2,1)', background: hover ? 'rgba(240,236,228,0.022)' : 'transparent', }} className="proc-card"> {/* Accent top-rail */}
STEP {step.id}
{step.duration}

{step.title}

{step.body}

); } /* ---------- ABOUT ---------- */ function About() { return (
8+ years in healthcare and health tech, from Fortune 500 to early-stage.} />

I gravitate toward environments where things are complex, fast moving, and under built. I like understanding how a company actually runs, spotting the gaps, and building what’s missing.

I think in systems, not tasks. When I look at a company, I'm looking at how things connect, where the same problems keep recurring, and what would fix the root cause instead of the symptom. I go deep into the details until I understand how things actually work, and then I build the structure that makes them work better. Everything I build is designed to outlast me.

I've spent 8+ years in health tech and healthcare, from Fortune 500 to early-stage startup. The pattern is the same anywhere: growing companies need operational infrastructure, and most don't have it yet.

I work best with founders and leadership teams who are building something meaningful and have hit the point where the internal operations can't keep up with the ambition.

); } function MetaRow({ label, value }) { return (
{label}
{value}
); } /* ---------- CONTACT / FOOTER ---------- */ function Contact() { return (
Get in touch

Share what
you’re building.

Book
Book a conversation Email directly
{/* Footer strip */}
© Alex Farris · 2026 Fractional Operations · Health · Wellness · Tech Los Angeles
); } Object.assign(window, { Nav, Hero, Marquee, WhenToBring, Services, Work, Process, About, Contact });