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
- shipped project pages
- 54
- cube cells
- Next.js 16
- App Router · static-first
- R3F + GSAP
- cube and motion stack
The cube routes into the site's sections. Every project page, including this one, renders from a typed content file through the same template.
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.
Six sections make the range scannable before a visitor opens any project page.
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 sectionsShared 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 templateBlueprint visual layer.
A hover layer over the hero: grid, small diagrams, graphite tint. Visual texture only. It never touches the content model.
Hover gridTyped content registry.
The cube, menu, pages, and metadata all read from the same content modules. Edit the registry, every surface follows.
Cube · menu · pagesSemantic 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 modelsA few rules kept the build consistent as the site grew.
- One content model. Cube, menu, pages, and metadata all read from it.
- Links route, chips don't. Anchors navigate; proof chips just add evidence.
- Real labels, no canvas text. Focusable and crawlable, so people and models can read the work.
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.
Navigation for the site's sections. Link cells route; proof chips add context.
entry pointOne React template renders every project page from typed content: hero, metrics, sections, stack, artifacts, and related links.
project pagesA hover visual layer around the hero: grid, small diagrams, and a graphite body treatment over the existing palette.
visual layerShared data for the cube, menu, project pages, and metadata, all under src/content/.
source of truth

