3D Portfolio
The same profile, as a place you move through
Results — hover any figure for the baseline and the caveat
The only public URL here
Which is most of why it earns a place on this list — everything else is source you have to read. It's a presentation layer, though: the engineering claims are in the projects it links to, not in it.
The problem
A portfolio has to work for two readers who want opposite things. One is scanning for evidence and wants numbers, baselines and source they can check — that reader is served by a document. The other wants to know whether the person can build something that feels good to use, and no amount of prose demonstrates that. Building one site that tries to be both usually produces a document with distracting animation.
What I built
Two separate front doors over the same content instead of one compromise. This is the second: an interactive 3D environment where the same profile, projects and metrics are placed in a scene, plus a genuinely playable chess board so there's something to do rather than only something to look at. The content is held in a single configuration file that also generates the page metadata and Person JSON-LD, so the two presentations can be kept in step and the SEO surface can't contradict the copy.
What the results actually say
The licensing was the part that needed care, not the rendering.
Bundling Stockfish means shipping GPLv3 artifacts, which have to stay verbatim with their banner intact and their licence text served. The chess piece SVGs are CC BY-SA. The character model and backdrop video came with the template this site was built from and aren't mine to relicense — so they're excluded from the repository's AGPL-3.0 grant and named as the author's. Every one of those is written down rather than assumed.
A number in a game UI has to say what it measures.
The obvious read of a figure next to a chess engine is Elo. It's search depth. Labelling it as depth costs nothing and stops the page implying a strength rating it never measured — the same rule the rest of this portfolio applies to model scores.
Omitting metadata beats guessing at it.
The build resolves its own origin from the environment; when nothing is set, canonical and Open Graph URLs are left out rather than defaulted to a plausible-looking domain. A missing canonical is a gap. A wrong one actively misdirects crawlers — which is the exact bug this site had until the fallback was corrected.
What this doesn’t prove
- It began as a 3D template and was rebuilt on top of it. The scene architecture and the character are not mine in origin; the content system, the chess integration, the metadata pipeline and the deployment configuration are.
- The two sites share content by convention, not by build. Each holds its own copy, so an edit here has to be carried across by hand — a real source of drift that a shared package would fix.
- The optional /play assistant runs on a Groq key consumed server-side, behind an endpoint that is deliberately unauthenticated. Request size and message count are capped, but a public endpoint can still burn API credits, and the repository says so and recommends an external rate limit before broad use.
- WebGL, a character model and a chess engine make it a heavy page. It is the wrong front door on a slow connection, which is why the document version is the canonical one.
This section is here on purpose. A result without its limits isn’t a result, it’s a claim.