The story
This portfolio is its own relic. I wanted a personal site that argued for my taste by existing rather than by describing itself, so I built it from an empty Next.js project with no template or component kit underneath.
The visual language — void black, gold leaf, Roman numerals, illuminated capitals — is deliberate. Every orbit sigil on the page is a real WebGL object rendered through a single shared canvas, and every reveal is tied to scroll position. All of it degrades to a static SVG when a visitor prefers reduced motion.
The unglamorous half is the part I care about most: a JSON-LD entity graph a crawler can walk in one pass, per-project generated OG cards, a sitemap, and an llms.txt for language models. It stays continuously updated, which is the honest state of any personal site.
Marks in the margin
- Built from an empty Next.js app — no theme, no UI kit, no template.
- One shared WebGL canvas renders every orbit sigil on the page.
- Scroll-linked motion throughout, with a full reduced-motion fallback path.
- JSON-LD entity graph, generated OG cards, sitemap, and an llms.txt.
You're looking at the demo.