◍ THE ARCHIVE · 5 PROJECTS
BACK TO PORTFOLIO
◍ EXPERIENCES — DETAILED

Every project,
unfolded.

Click any project below to expand its case study. Each entry includes the context, the architecture choices, the trade-offs, and what I’d do differently with another year of perspective.

EDITOR.TSX

A browser-native motion editor for product teams. Built a custom timeline, ECS-based scene graph, and a rendering pipeline that hits 60fps on 4K canvases.

Next.jsTypeScriptWebGLRust/WASM
12ms
median frame time
230k
active users
— 01 · CONTEXT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. The team came to me with a clear problem and a fuzzy solution space. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. The constraints were real: a six-week timeline, a designer-light org, and a customer base that would notice every regression.

— 02 · ARCHITECTURE

Built on Next.js with the App Router and React Server Components for the data-heavy pages. State machines for the editor surfaces, optimistic UI for everything else. The hot path was instrumented from day one — every interaction emits a span, and the slowest 1% of sessions get sampled for replay.

— 03 · TRADE-OFFS

Chose to ship without a full design system because the surface area was too small to justify one. Shipped without dark mode at launch. Chose Postgres over a planet-scale option because the actual data shape was relational and the team would benefit more from familiar tools than from theoretical ceiling.

— 04 · WHAT I'D CHANGE

I'd start with the boring parts first — auth, billing, observability — and let the marquee features bake longer. The version we shipped was the right product, but the second six weeks would have produced a much sharper version of the same idea.

— color tokensember/500#FFB37Aember/200#FFD9BDember/900#7A3A18neutral/950#1A1413neutral/100#E8E4E1

Open-source component primitives used across 14 products. 240+ components, full a11y compliance, and a docs site that loads in under 200ms.

Next.jsRadixStitchesStorybook
240+
components
100
Lighthouse score
— 01 · CONTEXT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. The team came to me with a clear problem and a fuzzy solution space. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. The constraints were real: a six-week timeline, a designer-light org, and a customer base that would notice every regression.

— 02 · ARCHITECTURE

Built on Next.js with the App Router and React Server Components for the data-heavy pages. State machines for the editor surfaces, optimistic UI for everything else. The hot path was instrumented from day one — every interaction emits a span, and the slowest 1% of sessions get sampled for replay.

— 03 · TRADE-OFFS

Chose to ship without a full design system because the surface area was too small to justify one. Shipped without dark mode at launch. Chose Postgres over a planet-scale option because the actual data shape was relational and the team would benefit more from familiar tools than from theoretical ceiling.

— 04 · WHAT I'D CHANGE

I'd start with the boring parts first — auth, billing, observability — and let the marquee features bake longer. The version we shipped was the right product, but the second six weeks would have produced a much sharper version of the same idea.

40.7128° N · 74.0060° W

An IDE for cartographers. Real-time collaborative editing on vector tiles, with a plugin system written by mapmakers who have never touched JavaScript.

MapLibreCRDTsTauriRust
8ms
edit latency
p99 < 60ms
render
— 01 · CONTEXT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. The team came to me with a clear problem and a fuzzy solution space. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. The constraints were real: a six-week timeline, a designer-light org, and a customer base that would notice every regression.

— 02 · ARCHITECTURE

Built on Next.js with the App Router and React Server Components for the data-heavy pages. State machines for the editor surfaces, optimistic UI for everything else. The hot path was instrumented from day one — every interaction emits a span, and the slowest 1% of sessions get sampled for replay.

— 03 · TRADE-OFFS

Chose to ship without a full design system because the surface area was too small to justify one. Shipped without dark mode at launch. Chose Postgres over a planet-scale option because the actual data shape was relational and the team would benefit more from familiar tools than from theoretical ceiling.

— 04 · WHAT I'D CHANGE

I'd start with the boring parts first — auth, billing, observability — and let the marquee features bake longer. The version we shipped was the right product, but the second six weeks would have produced a much sharper version of the same idea.

TESSERA №037

Generative print campaign for a Tokyo gallery. Built the rendering pipeline that produced 12,000 unique posters from a single shader.

GLSLThree.jsNodeCairo
12k
unique outputs
1 shader
pipeline
— 01 · CONTEXT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. The team came to me with a clear problem and a fuzzy solution space. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. The constraints were real: a six-week timeline, a designer-light org, and a customer base that would notice every regression.

— 02 · ARCHITECTURE

Built on Next.js with the App Router and React Server Components for the data-heavy pages. State machines for the editor surfaces, optimistic UI for everything else. The hot path was instrumented from day one — every interaction emits a span, and the slowest 1% of sessions get sampled for replay.

— 03 · TRADE-OFFS

Chose to ship without a full design system because the surface area was too small to justify one. Shipped without dark mode at launch. Chose Postgres over a planet-scale option because the actual data shape was relational and the team would benefit more from familiar tools than from theoretical ceiling.

— 04 · WHAT I'D CHANGE

I'd start with the boring parts first — auth, billing, observability — and let the marquee features bake longer. The version we shipped was the right product, but the second six weeks would have produced a much sharper version of the same idea.

API · production100.00%CDN · global edge100.00%Auth service100.00%Webhook delivery100.00%Database (replica)100.00%Background jobs100.00%ALL SYSTEMS OPERATIONAL

Tiny, fast, opinionated status page. Single binary, SQLite, no JS frameworks, ships in a 90KB bundle. Powers a few thousand small teams.

GoHTMXAlpineSQLite
90KB
JS bundle
4k+
teams
— 01 · CONTEXT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. The team came to me with a clear problem and a fuzzy solution space. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. The constraints were real: a six-week timeline, a designer-light org, and a customer base that would notice every regression.

— 02 · ARCHITECTURE

Built on Next.js with the App Router and React Server Components for the data-heavy pages. State machines for the editor surfaces, optimistic UI for everything else. The hot path was instrumented from day one — every interaction emits a span, and the slowest 1% of sessions get sampled for replay.

— 03 · TRADE-OFFS

Chose to ship without a full design system because the surface area was too small to justify one. Shipped without dark mode at launch. Chose Postgres over a planet-scale option because the actual data shape was relational and the team would benefit more from familiar tools than from theoretical ceiling.

— 04 · WHAT I'D CHANGE

I'd start with the boring parts first — auth, billing, observability — and let the marquee features bake longer. The version we shipped was the right product, but the second six weeks would have produced a much sharper version of the same idea.

Got a project in mind?

The fastest way to start a conversation is an email with one paragraph and one rough deadline.

Contact meBack to portfolio