This Site
`limitations` is a required field. The compiler rejects a project without it
Built with
Not public
The repository is private because its history contains personal writing that was once served under public/. The mechanisms described here are all visible in the rendered pages.
A portfolio is the easiest place in the world to overstate something, because nobody checks and the incentives all point one way. So the interesting decision here was not the design. It was making the overstatement hard to commit.
Two mechanisms do that. The first is a required field: `limitations: string[]` on every project record. Not optional, not a convention. The compiler rejects an entry without it. Whatever else a project claims, it has to say in the same object what it does not show. Small sample, group work, a result that was never reproduced, a missing after-number.
The second is a single evidence registry. Every load-bearing figure is defined once with a `source` naming the command or file that produced it and the date it was last run. That exists because of two specific failures: this site claimed 24 test files for a project whose working tree had 21, and a client repository's README still advertises 320 tests when collection finds 427. Both numbers were true when written. Neither was re-checked. The registry does not stop a figure going stale, but it makes staleness visible instead of invisible.
Underneath it is Next.js 16 on the App Router with React 19 and Tailwind v4. The look is deliberately not template AI: warm espresso rather than black, Fraunces rather than Inter, and procedural WebGL colour fields instead of stock photography, all of it gated behind a reduced-motion check.
One thing it does not do: a custom cursor. I built one, ran it for a day, and deleted it, because it felt fractionally laggy against the native one and no amount of spring tuning fixed the fact that a real cursor is drawn by the compositor and mine was not.
What this does not show
- The honesty constraints are structural, not semantic. Nothing stops a limitation being written weakly; the compiler only checks that one exists.
- The evidence registry records when a figure was verified. It cannot tell you when it went stale.
- No analytics-backed claim about whether any of this converts. It has been live since June 2026 and the contact form only started delivering recently.