Build a trilingual site with Claude Code behind memory hooks and test gates

Mateusz Muszarski built his English, Polish and Spanish portfolio site with Claude Code in about two weeks, using hooks to restore project rules after compaction and gates that refuse a bare claim of done.

Done withClaude Code· Oct 18, 2026

What they did

Muszarski had Claude Code build his portfolio site one section at a time. Each slice was researched, built with real content, checked and then polished until a further pass found nothing. His CLAUDE.md is a short table that routes kinds of task to pages in a 33-page project wiki. Three hooks do the remembering: one reprints the working rules and a lessons file at every session start and compaction, one injects up to five wiki pages matching each prompt, and one blocks Claude from finishing if code changed but the wiki did not. Done means typecheck, lint, unit tests, Playwright end-to-end runs with accessibility checks, mobile Lighthouse scores and screenshots from 390 to 1920 px in all three languages that Claude has to open and look at. Subagents handled research, with eight sent out in parallel during planning, and fact checks. Missing facts became tagged placeholders that fail the launch build.

How it went

He says the site was built by him and Claude Code in about two weeks. The gates caught failures Claude had reported as finished. A build step merged two CSS animation properties into a shorthand Chrome ignores, so scroll animations silently never ran; a written rule did not stop it coming back three times the next day, so a unit test now scans every stylesheet. A background build piped through tail exited 0 while its log said it failed, leaving a preview serving 404s. The placeholder rule let him ask for every remaining section in one evening and review real pages the next morning. He tracked no token costs.

Worth knowing

Running two or three sessions on one repo caused real damage: one session committed another's unfinished work, an audit ran against the wrong build, and killing Python by name stopped other sessions' servers. His safety rules live in CLAUDE.md, which he notes guides Claude but blocks nothing; settings deny rules are what actually stop a read. The setup is Windows-specific in places, and the lessons file has outgrown the hook's 8,000-character budget.

Try it

With Claude Code· 8 parts to fill in

Build [the next section of my site] as one slice. First read [CLAUDE.md] and the wiki pages it routes this task to, plus [lessons.md]. Use real content only: where a fact is missing, insert a placeholder tagged [TODO-FACT] and log it in [the placeholder register] instead of inventing it. You are not done until [typecheck, lint, unit tests, e2e and Lighthouse commands] all exit 0, with each result read separately, and you have taken screenshots at [phone and desktop widths] in [each language] and opened every one. If a check fails, fix it and rerun all of them. When finished, update the wiki page this change affects and stop with a list of what passed and any placeholders left.

Square brackets are the parts to fill in. The prompt is ours; the story is theirs.

Where they said it

Related