Process
The making of this portfolio
Along the way, Claude and I built hooks and skills, listed below. My rule: nothing gets built until the same thing has had to be explained twice. Most of them started with a mistake.
3 Sep
The handoff capHook
The handoff note, a short file saying where the project stands, kept growing. A hook (a script that runs on its own, here after every file write) now sends back any handoff over 60 lines.
Why 60? The number is not calculated, it is fixed on purpose. A cap limits size, not content, so every time I hit it I have to judge what a new session really needs: the state, not the history, and delete what the last commits made false.
7 Sep
ShipCommand
Vercel builds whatever is pushed, so a broken push is a broken site. One command runs the checks and the build before saving anything, pushes, then waits until the live page really changes.
Why wait? A page that answers only proves the site is up. A page whose version changed proves my change arrived.
9 Sep
Done has a definitionHook
After any edit in the project, Claude cannot end its turn until types and lint pass.
Why at the end of the turn? A change often spans several files, and the middle of it is allowed to be broken. The check runs once, when Claude says it is finished.
9 Sep
Open and closeSkills
The opening and closing routines were text loaded into every session, used or not. They became two skills (procedures loaded only when I ask). One reads the handoff and reports what no longer matches. The other updates it against the real files, then saves and publishes.
Why read the files first? Several sessions run in parallel. A rewrite from an old read would erase another session's work.
11 Sep
MemoryRule
Claude saved a note to its own memory without being asked, in the wrong file and shape. Writing there now needs my yes, and so does a push to GitHub.
Why a permission, not a sentence? The sentence already existed, and a stronger habit had beaten it once.
15 Sep
Blind searchHook
The rule said to read a project's guide before searching it. A session searched blindly anyway. Now the first search is refused until something has been read.
Why? I measured a session start: about 61,700 tokens, of which my own files are about 2,700. The waste was wandering, not file size.