Skip to main content
Auto-memory
Retell + Twilio
MCP ecosystem
Founder Pres.
Obsidian + QMD
Review pass
Claude / Codex
Convex
75K+ sold
SwiftUI CloudKit
Next.js + Vercel
1,350+ locations
Shopify
Session notes
Founder
MCP forks
<60s response
Operator chapters
QMD retrieval
121+ skills
Six figures raised
Founder office
back to grid
Projects2026

This portfolio

This is the site you're reading. A Next.js 16 app with a Rubik's-style cube for navigation and one shared template for every project page. Show the range fast, then make each project easy to inspect.

19
project pages
54
cube cells
Next.js 16
App Router · static-first
R3F + GSAP
cube and motion stack
§01The workLive system

The cube routes into the site's sections. Every project page, including this one, renders from a typed content file through the same template.

The work

A cube homepage and one shared page template.

The cube routes into the site's sections. Every project page, including this one, renders from a typed content file through the same template.

Auto-memory
Retell + Twilio
MCP ecosystem
Founder Pres.
Obsidian + QMD
Review pass
Claude / Codex
Convex
75K+ sold
SwiftUI CloudKit
Next.js + Vercel
1,350+ locations
Shopify
Session notes
Founder
MCP forks
<60s response
Operator chapters
QMD retrieval
121+ skills
Six figures raised
Founder office
Cube navigationOne homepage object for the whole portfolio.

Six sections make the range scannable before a visitor opens any project page.

FoundedCareerProjectsSystemsBuild StackContact
The workThe cube routes into the site's sections. Every project page, including this one, renders from a typed content file through the same template.
§02What I builtMain parts

Four pieces.

Cube navigation.

The cube is the site index. Link cells route; quieter proof chips add context. You scan the whole range before clicking anything.

54 cells · 6 sections

Shared case-study template.

One template renders every project page from a typed content file: hero, metrics, sections, stack, artifacts, links. No per-page forks.

One React template

Blueprint visual layer.

A hover layer over the hero: grid, small diagrams, graphite tint. Visual texture only. It never touches the content model.

Hover grid

Typed content registry.

The cube, menu, pages, and metadata all read from the same content modules. Edit the registry, every surface follows.

Cube · menu · pages

Semantic HTML, never inside Canvas.

The cube uses real labels and the project pages render as headings, prose, lists, captions, and links. Models can read the site without parsing a canvas scene.

Readable by people and models
§03Build rulesRules I used

A few rules kept the build consistent as the site grew.

Rules I usedpublic build
  1. One content model. Cube, menu, pages, and metadata all read from it.
  2. Links route, chips don't. Anchors navigate; proof chips just add evidence.
  3. Real labels, no canvas text. Focusable and crawlable, so people and models can read the work.
§04LessonsWhat changed
Lesson · 02

Build against the running site.

The cube and motion only made sense in the live app. Static mockups were useful for direction, but the final decisions had to happen against localhost.

§05StackFrameworks and tools
Next.js 16 / FrameworkApp Router / FrameworkTypeScript / FrameworkReact Three Fiber / Cube rendererthree.js / Cube rendererdrei / Cube rendererGSAP / MotionuseGSAP / MotionScrollTrigger / MotionLenis / MotionTailwind v4 / StylingVollkorn + Hanken / TypographyVercel / HostingVitest / TestsESLint / TestsCodex review / Tests
§06ArtifactsVisible proof
The cube

Navigation for the site's sections. Link cells route; proof chips add context.

entry point
Detail-page template

One React template renders every project page from typed content: hero, metrics, sections, stack, artifacts, and related links.

project pages
Blueprint overlay

A hover visual layer around the hero: grid, small diagrams, and a graphite body treatment over the existing palette.

visual layer
Typed content registry

Shared data for the cube, menu, project pages, and metadata, all under src/content/.

source of truth