The portfolio site

Design & front-end

No build step

0 deps

CSS Grid

Vanilla JS

A portfolio built by hand: HTML, CSS and JS I typed myself. No template, no visual editor, no framework. One page, a panel that follows you down it, and every project written up with the decisions in it.

Role

Design, build & the writing

Year

2026

5

files

0

dependencies

28

aria attributes

v3 as it shipped, the visual-editor build, captured from v3_old.html
v3 as it shipped, the visual-editor build, captured from v3_old.html

01 — The constraint

One rule, and the rest follows

The site has one job: be the thing somebody looks at before deciding whether to write to me. That audience is small and in a hurry. A café owner in Kiel. A practice with a phone number and nothing else. A studio wanting a second pair of hands. Most of them arrive on a phone, on mobile data, with one thumb. So it had to open fast, say what I do inside the first screen, and prove it by being built well rather than by claiming to be. A portfolio that takes its time arguing it can build a fast website has already lost the argument.

There was exactly one rule: if it does not fit in a file I typed myself, it does not go in. No framework to hide a bad layout behind, no build step standing between what I wrote and what ships, and no dependency quietly growing. Every byte a visitor downloads is one I chose. That is the whole constraint, and it decided every other decision on the site.

02 — Design decisions

Why it looks like this

Five decisions, and each one is visible in the figures below. The clips run silent and without controls: they are figures that move, not a video player.

The panel, at 1440px

The work grid, on hover

The nav, marking state

03 — Honest leftovers

What is still wrong with it

The idle log is localStorage only, so it looks social and is not. The counted numbers are a snapshot of one commit and they will drift the moment I edit any of these files. And this page has since moved on: the portfolio became a studio site, with a top bar instead of the panel and the work running full width. What you see above is the finished portfolio, not what sits at the same address today. I would rather leave that here than quietly fix it in a screenshot.

Menu