This site
A personal platform built to grow — five content collections, a design system in one file, and a publishing loop that starts on Instagram and ends here.
27 Aug 2026
The site you are reading. I am including it because the interesting part is not that it exists — it is what had to be decided before a single component got written.
The actual problem
A portfolio is easy. This is not a portfolio. It has to serve three people who want completely different things:
- someone who might hire me, who wants proof I can build
- someone who might build something with me, who wants to know how I think
- someone who just watched a sixty-second video and wants the prompt
Those pull in opposite directions. Optimise for the first and you get an agency site. Optimise for the third and you get a link dump. The compromise most personal sites reach is a homepage with one call to action that suits exactly one of them.
The decision that shaped everything else
The homepage does not have a primary CTA. It has four routes — Projects, Content, Resources, Collaborate — as a full-width rail under the headline, each with a sentence explaining who it is for.
That sounds like indecision. It is the opposite: it is a bet that self-selection beats funnelling when your visitors genuinely want different things. A recruiter and a person who wants a prompt should not be pushed down the same path.
Content architecture
Five collections, one folder of .mdx files each:
| Collection | What goes in it |
|---|---|
projects | Things I built, with the reasoning |
lab | Short experiments, including failures |
content | The full version behind a video or post |
resources | Prompts, workflows, templates — free |
ideas | Concepts open to collaborators |
Adding anything means adding one file. No CMS, no database, no admin panel. Tags link
entries across collections, so a project tagged nextjs automatically surfaces a
resource tagged nextjs in its related rail. The site cross-links itself as it grows.
Every route is prerendered at build time.
Design system
Warm near-black, not the blue-black that every AI product landing page uses. One hot accent for energy, one cool accent held back for focus states and links only — so colour means something rather than just being present. Long-form pages flip to a warm paper surface, because a cinematic dark ground is genuinely worse at reading five hundred words.
The whole system is one @theme block in one CSS file. Colour, type scale, spacing,
easing curves, durations. Changing the brand means changing that block.
Three bugs worth remembering
Content stranded invisible. Scroll reveals started at opacity: 0 and were revealed
by an IntersectionObserver. In a backgrounded tab the observer never fires — so the page
loaded and stayed blank. Now the entry styles only apply inside
@media (scripting: enabled), with a 2.5 second failsafe timer behind that. Motion is a
nicety; the content is not.
The mobile menu collapsed to nothing. The header had backdrop-blur, which quietly
makes an element a containing block for position: fixed children. The full-screen panel
inside it was being sized against a 72px header. It computed to 0.63 pixels tall.
White text on the accent orange was 3.12:1 — below the WCAG AA threshold, on the primary button. Near-black on orange measures 6.18:1 and, as it turns out, looks better.
What I would change
The Lab section is supposed to be the most visually experimental part of the site and right now it follows the same grid logic as everything else. That is the next thing to break on purpose.
I also want per-entry reading progress on long resources, and I have not decided whether that is genuinely useful or just a thing sites do.
How I actually build with Claude Code
The working loop — persistent project context, questions before code, small verified slices, and checking the browser instead of trusting the summary.
Read ResourcesThe prompt system I use to build client websites
Two documents instead of one prompt — a permanent quality standard, and a per-client brief. Why the split is the part that actually works.
Read ProjectsEmber & Olive
A cinematic website for a Mediterranean restaurant, built as a re-skinnable starting point for real hospitality clients.
ReadNeed something built along these lines?