// SP11 — Marketing standalone pages: /services, /process, /work // Three deep public pages, sharing the editorial visual language. // ═════════════════════════════════════════════════════════════════ // SERVICES PAGE // ═════════════════════════════════════════════════════════════════ const ServicesPage = ({ setPage }) => { const [active, setActive] = React.useState(null); return (
{/* Hero */}
Services · M11 · {SERVICES.length} offerings
FROM $1,800 · 2–10 WEEKS TYPICAL

Six things, done deliberately.

We don't try to be everything. Here's what we ship — at a level you can put in front of paying users tomorrow. Each is fixed-scope, weekly-demoed, and ends with a working product, not a slide deck.

{/* Anchor nav */}
JUMP TO {SERVICES.map(s => ( {e.preventDefault();document.getElementById(s.id)?.scrollIntoView({behavior:'smooth',block:'start'})}} style={{ padding:'5px 10px',borderRadius:6,fontSize:12,color:'var(--ink-3)',border:'1px solid var(--line)', fontFamily:'var(--mono)',letterSpacing:'0.02em' }}>{s.code} · {s.title.split(',')[0]} ))}
{/* Detailed services */}
{SERVICES.map((s, i) => ( ))}
{/* Process strip */}
How we work

The same four phases. Always.

{[ {n:'01',t:'Discover',d:'Workshop, audit, define scope. 1 week.',c:'#7c9bff'}, {n:'02',t:'Design',d:'Mocks, prototype, sign-off. 1–2 weeks.',c:'#ff8a3a'}, {n:'03',t:'Build',d:'2-week sprints, weekly demos.',c:'#d4ff3a'}, {n:'04',t:'Ship',d:'Launch, monitor, iterate.',c:'#a78bfa'}, ].map(p=>(
STEP {p.n}
{p.t}
{p.d}
))}
{/* CTA */}
); }; const ServiceBlock = ({ s, idx }) => { const accents = ['#7c9bff','#a78bfa','#7ee787','#ff8a3a','#fde047','#22d3ee']; const c = accents[idx % accents.length]; return (
{s.code} · {s.tag || 'SERVICE'}

{s.title}

{s.summary}

What's included
    {s.deliverables.map(d => (
  • {Icon.check()}{d}
  • ))}
); }; const ServicesCTA = ({ setPage }) => (
● TAKING WORK · JUNE

Don't see what you need?

If your project doesn't fit neatly into one of these six, get in touch. Most of our best work started with "we don't quite do this, but…"

); // ═════════════════════════════════════════════════════════════════ // PROCESS PAGE // ═════════════════════════════════════════════════════════════════ const ProcessPage = ({ setPage }) => { const phases = [ {n:'01',t:'Discover',d:'1 week. We figure out what you\'re actually building.',c:'#7c9bff', items:[ ['Discovery workshop','Half-day call with stakeholders. We map goals, users, constraints, success criteria.'], ['Technical audit','If there\'s existing code: a top-to-bottom audit. Performance trace, security scan, architecture review.'], ['Scope doc','One-page SOW. Modules, sprints, fixed price, fixed deadline.'], ]}, {n:'02',t:'Design',d:'1–2 weeks. We turn the doc into something you can click.',c:'#ff8a3a', items:[ ['Information architecture','Site map, user flows, key states. Reviewed before any pixels are pushed.'], ['Hi-fi prototype','Clickable Figma or coded prototype. Real copy, real data, real interactions.'], ['Design system','Tokens, components, primitives. Everything we build sits on this foundation.'], ]}, {n:'03',t:'Build',d:'2–10 weeks. 2-week sprints. Weekly demos.',c:'#d4ff3a', items:[ ['Sprint planning','Every other Monday, 10:00. We commit to a 2-week scope, broken into stories with point estimates.'], ['Daily standup','09:30 each weekday. 15 minutes. What I shipped, what I\'m doing, what\'s blocking me.'], ['Friday demo','Every Friday at 16:00 we ship a build to staging and walk through what changed.'], ['Retrospective','Last 30 minutes of every other Friday. What worked, what didn\'t, what changes for next sprint.'], ]}, {n:'04',t:'Ship',d:'1 week. Launch, monitor, hand off.',c:'#a78bfa', items:[ ['Production rollout','Feature flags + canary deploys. We ramp from 1% to 100% over a few days.'], ['Monitoring + alerts','Sentry, PostHog, Vercel Analytics wired up. You get the dashboard on day one.'], ['Handoff session','Live walkthrough of the codebase + architecture. Recorded so the next engineer can watch it later.'], ['Support window','90 days / 12 months / ongoing depending on tier. Bug fixes free, new features quoted.'], ]}, ]; return (
{/* Hero */}
The process · M11 · v0.4

The same way, every time.

Four phases, two-week sprints, weekly demos. We don't reinvent the wheel for every project — we invented one good wheel and put it under every car.

{/* The four phases */}
The four phases

From "we should build something" to "it's live."

{phases.map((p, i) => (
0 ? '1px solid var(--line)' : 'none'}}>
{p.n}

{p.t}

PHASE {p.n}

{p.d}

OWNED BY {['Engineering lead','Design lead','Whole team','Engineering lead'][i]}
{['DELIVERABLE: SOW','DELIVERABLE: PROTOTYPE','DELIVERABLE: BUILDS','DELIVERABLE: LIVE SITE'][i]}
{p.items.map(([t,d],j) => (
0{j+1}

{t}

{d}

))}
))}
{/* Sprint cadence */}
Sprint cadence

Two weeks at a time. No exceptions.

{/* Days */}
WEEK 1 → 2
{Array.from({length:10},(_,i) => (
{['MON','TUE','WED','THU','FRI','MON','TUE','WED','THU','FRI'][i]}
))}
{[ {n:'Standup',d:'09:30 daily · 15 min',cells:[1,2,3,4,5,6,7,8,9,10],c:'#7c9bff',weak:[2,4,7,9]}, {n:'Planning',d:'Mon week 1 · 60 min',cells:[1],c:'#d4ff3a'}, {n:'Design review',d:'Wed · 60 min',cells:[3,8],c:'#ff8a3a'}, {n:'Demo + retro',d:'Fri week 2 · 90 min',cells:[10],c:'#a78bfa'}, {n:'Coding hours',d:'~6h focused per day',cells:[1,2,3,4,5,6,7,8,9],c:'rgba(212,255,58,0.5)'}, ].map((row, ri) => (
{row.n}
{row.d}
{Array.from({length:10},(_,i) => (
{row.cells.includes(i+1) &&
}
))}
))}
{/* Ceremonies */}
{[ {t:'Mon 10:00',l:'Sprint planning',d:'Commit to scope. Break stories. Estimate points.'}, {t:'Daily 09:30',l:'Standup',d:'15 min. Async on Slack if anyone\'s out.'}, {t:'Wed 14:00',l:'Design review',d:'Sana + engineering. Walk current designs.'}, {t:'Fri 16:00',l:'Demo + retro',d:'Show what shipped. Discuss what to change.'}, ].map(r => (
{r.t.toUpperCase()}
{r.l}
{r.d}
))}
{/* Principles */}
Principles

Five rules we don't bend.

{PRINCIPLES.map(p => (
{p.n}

{p.t}

{p.d}

))}
{/* Tools */}
Tools

What we use to run the studio.

{[ ['Linear','Project mgmt'],['GitHub','Code + reviews'],['Vercel','Deploys'],['Figma','Design'], ['Slack','Team chat'],['Loom','Async demos'],['Notion','Docs + specs'],['Sentry','Errors'], ['PostHog','Analytics'],['Cal.com','Scheduling'],['Stripe','Payments'],['Resend','Email'], ].map(([n,l]) => (
{n[0]}
{n}
{l.toUpperCase()}
))}
{/* CTA */}
); }; // ═════════════════════════════════════════════════════════════════ // WORK INDEX PAGE // ═════════════════════════════════════════════════════════════════ const WorkPage = ({ setPage, openCase }) => { const [tag, setTag] = React.useState('All'); const [year, setYear] = React.useState('All'); const [layout, setLayout] = React.useState('editorial'); const tags = ['All', ...new Set(PORTFOLIO.map(p=>p.tag))]; const years = ['All', ...new Set(PORTFOLIO.map(p=>p.year))].sort().reverse(); const filtered = PORTFOLIO.filter(p => (tag === 'All' || p.tag === tag) && (year === 'All' || p.year === year) ); return (
{/* Hero */}
Selected work · {PORTFOLIO.length} cases · since 2022
EVERY PROJECT HAS A CASE STUDY

What we've shipped.

41 projects across fintech, AI, commerce, healthcare, and dev tools. Every entry links to a full case study — the build log, the decisions, the things we'd do differently.

{/* Quick stats */}
{[ ['Cases shipped','41','since 2022'], ['Repeat clients','73%','past projects'], ['Avg engagement','9 weeks','sprint cadence'], ['On-time delivery','94%','of milestones'], ].map(([l,v,sub],i) => (
0 ? '1px solid var(--line)' : 'none', background:'var(--bg-2)'}}>
{l.toUpperCase()}
{v}
{sub}
))}
{/* Filters */}
TAG
{tags.map(t => ( ))}
YEAR
{years.map(y => ( ))}
{filtered.length} OF {PORTFOLIO.length}
{[['editorial','▦'],['list','☰']].map(([k,ic]) => ( ))}
{/* Featured */} {tag === 'All' && year === 'All' && (
● FEATURED
openCase(filtered[0])} className="clickable">
)} {/* Grid */}
{layout === 'editorial' && (
{filtered.slice(tag==='All' && year==='All' ? 1 : 0).map((p, i) => { const span = i % 3 === 1 ? 6 : i % 3 === 2 ? 6 : 12; const actualSpan = filtered.length > 6 ? (i % 2 === 0 ? 7 : 5) : 6; return (
openCase(p)} className="clickable" style={{gridColumn:`span ${actualSpan}`}}>
); })}
)} {layout === 'list' && (
{filtered.map((p, i) => (
openCase(p)} className="clickable" style={{ display:'grid', gridTemplateColumns:'80px 80px 1.5fr 1.2fr 1fr 60px',gap:24,alignItems:'center', padding:'24px 28px',borderTop: i>0 ? '1px solid var(--line)' : 'none', transition:'background .2s ease' }} onMouseEnter={e=>e.currentTarget.style.background='var(--bg-2)'} onMouseLeave={e=>e.currentTarget.style.background='transparent'}> {String(i+1).padStart(2,'0')} {p.year}
{p.name}
{p.summary}
{p.metric[0]}
{p.metric[1]}
{p.stack.join(' · ')}
{Icon.arrow()}
))}
)}
{/* CTA */}
● ACCEPTING NEW WORK

Yours could be next.

Two slots left for June starts. July is filling. Tell us about your project — we'll come back within 24 hours.

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